https://zzang9ha.tistory.com/381
원자성 : 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 실패해야 한다.
일관성 : 모든 트랜잭션은 일관성있는 데이터베이스 상태를 유지해야 한다.
격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 동시에 같은 데이터를 수정하지 못하도록 한다. 격리성은 성능 이슈로 트랜잭션 격리 수준을 선택할 수 있다.
지속성 : 트랜잭션을 성공적으로 끝내면 그 결과는 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.
트랜잭션 격리 수준 - Isolation level
READ UNCOMMITED - 커밋되지 않은 읽기
READ COMMITED - 커밋된 읽기
REPEATABLE READ - 반복 가능한 읽기
SERIALIZABLE - 직렬화 가능
현재 트랜잭션의 격리 수준 확인 명령어
SHOW VARIABLES LIKE 'tx_isolation';
트랜잭션 AUTOCOMMIT 설정 확인
SHOW VARIABLES LIKE 'autocommit';
AUTOCOMMIT값 FALSE로 변경 (default는 TRUE 임)
SET AUTOCOMMIT = FALSE;
트랜잭션 격리성 테스트용 테이블 생성
create table TX_TEST(no INT, name VARCHAR(20));
READ UNCOMMITTED 테스트
1) 먼저 두 개의 Session을 준비하고 격리 수준을 모두 'READ UNCOMMITTED'로 수정합니다.
// 트랜잭션 격리 수준 조회
show variables like 'tx_isolation';
// 트랜잭션 격리 수준 수정
set tx_isolation = 'READ-UNCOMMITTED'
2) 하나의 Session에서 트랜잭션을 시작(BEGIN)하고 INSERT를 실행합니다.
BEGIN;
INSERT INTO TX_TEST VALUES(10,"READ-UNCOMMIT");
3) 다른 Session에서 데이터를 SELECT 하여 확인 가능한지 확인한다.
SELECT * FROM TX_TEST;
4) INSERT했던 Session에서 ROLLBACK을 수행합니다.
ROLLBACK;
5) 다른 Session에서 다시 데이터를 SELECT 합니다.
SELECT * FROM TX_TEST;
READ-UNCOMMIT 격리성 설정에서는 트랜잭션에서 처리된 작업(Commit)이 완료되지 않아도 다른 트랜잭션에서 볼 수 있는 Dirty Read 현상이 일어난다.여러 문재점이 있어서 거의 사용하지 않는 격리성 래밸 설정이다.
'두고두고 볼 것' 카테고리의 다른 글
일급 콜렉션 (0) | 2022.09.22 |
---|---|
객체지향 (0) | 2022.09.20 |
JPA 변경 감지와 병합(merge) (0) | 2022.04.03 |
Java Collections, Iterator, Enumeration 인터페이스 간략 정리 (0) | 2022.03.31 |
enum (0) | 2022.03.21 |
댓글