트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel

김경민·2022년 5월 29일
1

database

목록 보기
2/10
post-thumbnail

Transcation

select @@autocommit;
set autocommit = false;

create database sampleDB;

create table BusinessCard(Name varchar(255), Address varchar(255), Telephone varchar(255));

insert into BusinessCard values ('Bob', 'Seocho-dong 123', '123-4567');

commit;

rollback;

Lock

select engine, support from information_schema.engines where support='DEFAULT';

set default_storage_engine = InnoDb;
set default_storage_engine = MyISAM;

select engine from information_schema.tables where table_name = 'city' and table_schema='world';

alter table 'city' engine = InnoDB;

Isolation level

select @@tx_isolation;

set tx_isolation = 'READ-COMMITED';

commit;

트랜잭션의 격리수준 Transcation IsolationLevel

ACID ( Atomicity / Consistency / Isolation / Durability )

  • 원자성 Atomicity : All or Nothing, Commit / Rollback
  • 일관성 Consistency : 트랜잭션 전후에 데이터가 손상을 받으면 안됨, 같은 데이터가 다른 값을 가지면 안됨
  • 고립성/격리수준 Isolation : 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성간의 trade-off
  • 지속성 Durability : 트랜잭션이 종료된 이후에도 데이터에 문제가 없어야 됨

Read Uncommitted

  • 트랜잭션이 종료되지 않는 상태의 대상 데이터를 읽어가는 것
  • 트랜잭션이 처리되는 도중에 다른 트랜잭션이 해당 데이터를 읽기를 허용 ( uncommitted date )
  • 트랜잭션이 종료되면 데이터 값이 변경 될 수 있음
  • 예를 들면 개표가 진행 중인 득표 현황으로 현재 값을 참고하지만 최종 값은 변경 될 수 있음
  • 성능은 높지만 데이터의 안정성이 떨어짐

Read Committed

  • 트랜잭션이 종료 된 상태의 데이터만 읽는 것 ( committed data )
  • 오라클이나 일반적인 DBMS 의 기본 격리수준
  • 현재 트랜잭션이 진행되면서 데이터를 참고할 때 다른 트랜잭션에서는 작업이 종료된 데이터만을 읽는 다는 것
  • 이 경우 트랜잭션에서 동일한 쿼리는 여러 번 수행시킬 때 쿼리 값이 달라지는 경우가 생길 수 있음
  • 이 경우를 해결해 주는 것이 Repeatable Read

Repeatable Read

  • 트랜잭션이 진행되는 도중에는 쿼리를 반복 수행하더라도 결과 값은 계속 동일
  • 즉, 데이터가 캐싱/버퍼링 됨
  • DB 백업 시간이 오래 걸릴 경우 백업이 진행되는 도중에는 데이터가 수정되어도 백업 시작 시점의 데이터를 백업하도록 함
  • 다른 트랜잭션이 업데이트하는 것은 금지하지만 레코드 추가하는 것은 허용하는 방식
  • MariaDB 의 기본 격리 수준

Serializable

  • 트랜잭션끼리 겹치는 일이 발생하지 않음
  • 트랜잭션이 동시에 수행되는 것이 금지되고 순차적으로 수행됨
  • 대신 성능이 가장 낮음, 안정성은 높음

CAP ( Consistency / Availability / Partition Tolerance )

0개의 댓글