티스토리 뷰

learning

MySQL의 격리 수준

눈침침 2022. 1. 30. 18:07

Real MySQL 에서 가져온 'MySQL 격리수준 정리'

'READ UNCOMMITTED', 'READ COMMITTED', 'REPEATABLE READ', 'SERIALIZABLE' 이 격리 수준

'DIRTY READ', 'NON-REPEATABLE READ', 'PHANTOM READ'가 발생할 수 있는 문제를 의미함

READ UNCOMMITTED

커밋할지 롤백할지 정해지지 않은 상태로 변경한 데이터도 읽을 수 있음(=DIRTY READ), 변경된 데이터를 읽었는데 롤백되면.. 그 데이터로 한 연산은

READ COMMITTED

트렌젝션이 완료된 변경만 읽어옴, 긴 트렌젝션 A에서 한 로우를 SELECT 해온 뒤, 연산 중... 다른 작은 트렌젝션에서 해당 로우 수정 후 커밋,  A 트렌젝션에서 해당 로우 읽어오니 값이 달라져 있음. (NON-REPEATABLE READ, 같은 레코드를 반복해서 읽어와도 항상 같은 값임을 보장하지 못함)

REPEATABLE READ

트렌젝션 발생 순서를 고려해서 특정 레코드에 대한 'REPEATABLE READ'가 가능하도록 함.

하지만 범위로 하는 연산은 실패하는 경우인 듯(전 요렇게 이해했어요.)

예를 들어

긴 트랜젝션 A에서 특정 조건의 레코드를 모두 SELECT!,  이때 레코드가 3개 나왔다고 치자!

짧은 트렌젝션에서 동일한 조건의 레코드를 하나 추가!

트렌젝션 A 에서 다시 모두 SELECT! 오잉 없던 녀석이 하나 추가되었다(=PHANTOM READ)

SERIALIZABLE

모든 트렌젝션은 한 번에 하나씩만 실행. 성능상 거의 사용되지 않음.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함