* Transaction

: 복수 SQL문을 수행하는 도중 장애가 발생했을때 장애에 대응할 수 있도록 하는 기능

: 전체 수행(Commit)과 전체 취소(Rollback) 두가지 결과값만 가져야함

: 기본적으로 SQL 수행모드는 AutoCommit모드(줄단위 커밋모드)

: 트랜잭션을 지원하기위해서는 AutoCommit모드를 오프시켜야함.

: InnoDB 스토리지엔진만 가능하다.

autocommit 확인

: SELECT @@autocommit (1=true/0=false)

autocommit 지정

: set autocommit = false;

트랜잭션 설정(DB설정이후 해야함.)

: commit or rollback


ACID 특성

: 원자성

: ALL or Nothing, Commit/Rollback

: 일관성

: 트랜잭션 전후에 데이터가 손상을 받으면 안됨

: 같은 데이터가 다른 값을 가지면 안됨

: 고립성/격리수준

: 여러개의 트랜잭션이 수행될 때 성능과 데이터 안전성간의 트레이드오프

: 지속성

: 트랜젝션이 종료된 이후 데이터에 문제가 없어야한다.


락(Lock)

:  공유자원에 대해 여러개의 트랜잭션이 접근하려고 경쟁하려고 할때 제어하는 방법

: 동시성제어(Concurrency Control)이라고 하고 보통 lock 으로 해결

: 프로그래밍에서 동기화라고도 함.

: 일관성과 무결성을 지키기위해 적용

- 테이블단위락 ( Table Lock ) : MyISAM 

: 동일한 테이블을 다른 트랜잭션이 사용하고 있다면 접근 금지

- 줄단위 락( Row Lock ) : InnoDB

: 동일한 줄(Row)만 접근 금지(테이블락에 비해 높은 성능)


: 스토리지 엔진은 기본/DB/테이블 단위로 변경할 수 있다.



* 격리(Isolation

: 트랜잭션의 격리수준

: 트랜잭션에 일관성 없는 데이터를 허용하는 레벨(안정성과 성능이 반비례되어 정렬)

: Read Uncommitted : 거이 안씀

: Commit되지 않는 처리중인 데이터를 읽기 허용한다.

: 성능은 높지만 데이터 안정성이 떨어짐

: Read Committed : 많이 사용

: 트랜잭션이 끝난 이후에만 접근하도록 허용(Committed data)

: Repeatable Read : 많이 사용

: 다른 트랜잭션이 UPDATE를 하는 것을 금지하지만, 레코드를 INSERT것은 허용

: Serializable

: 트랜잭션이 동시에 수행되는것이 금지되고 순차적 실행

: 성능저하가 있음.

: 격리수준 확인

: SELECT @@tx_isolation

: SET tx_isolation = 'READ-COMMITED'

: COMMIT

+ Recent posts