중화사전망 - 구한말 사전 - 거래 격리 수준이란 무엇인가요?
거래 격리 수준이란 무엇인가요?
낮은 것부터 높은 것까지 네 가지 트랜잭션 격리 수준, 즉 커밋되지 않은 읽기, 커밋된 읽기, 반복 가능한 읽기, 직렬화 가능이 있습니다. 사물의 동시 작업에서는 캐주얼한 더티 읽기, 반복되지 않는 읽기 및 팬텀 읽기가 발생할 수 있습니다.
1. 첫 번째 격리 수준: 커밋되지 않은 읽기(read uncommitted)
트랜잭션이 데이터 쓰기를 시작한 경우 다른 트랜잭션이 동시에 데이터를 쓸 수는 없지만 허용됩니다. 다른 트랜잭션이 이 데이터 행을 읽는 경우 "독점적 쓰기 잠금"을 통해 이 격리 수준을 달성할 수 있지만 읽기 스레드는 제외되지 않습니다. 이렇게 하면 업데이트 손실이 방지되지만 더티 읽기(dirty read)가 발생할 수 있습니다. 이는 트랜잭션 B가 트랜잭션 A에서 커밋되지 않은 데이터를 읽는다는 의미입니다.
업데이트 손실은 해결되었지만 더티 읽기가 계속 발생할 수 있습니다.
2. 두 번째 격리 수준: 읽기 커밋(read commit)
읽기 트랜잭션(스레드)인 경우 다른 트랜잭션에서 읽기 및 쓰기가 허용됩니다. 쓰기 트랜잭션은 다른 트랜잭션이 데이터 행에 액세스하는 것을 금지합니다. 이 격리 수준은 더티 읽기를 방지하지만 반복 불가능한 읽기가 발생할 수 있습니다. 트랜잭션 A가 미리 데이터를 읽고, 트랜잭션 B가 데이터를 업데이트하고 트랜잭션을 커밋하고, 트랜잭션 A가 다시 데이터를 읽으면 데이터가 변경되었습니다.
업데이트 손실 및 더티 읽기 문제가 해결되었습니다.
3. 세 번째 격리 수준: 반복 읽기(repeatable read)
반복 읽기는 트랜잭션 내에서 동일한 데이터를 여러 번 읽는 것을 의미합니다. 동일한 트랜잭션에서 두 번 읽은 데이터는 동일하므로 데이터에 액세스할 수 없으므로 반복 읽기 격리 수준이라고 합니다. 데이터를 읽는 트랜잭션은 쓰기가 금지되고, 쓰기 트랜잭션은 다른 트랜잭션이 금지됩니다. 따라서 반복 불가능한 읽기 및 더티 읽기를 방지하지만 때로는 팬텀 읽기가 발생할 수 있습니다.
데이터 읽기 트랜잭션은 "*** 공유 읽기 미러"와 "독점 쓰기 잠금"을 통해 실현할 수 있습니다.
업데이트 손실, 더티 읽기, 반복 불가능한 읽기 문제를 해결하지만 가상 읽기도 발생합니다.
4. 네 번째 격리 수준: 직렬화 가능(직렬화 가능)
트랜잭션을 순차적으로 실행해야 하며 트랜잭션은 하나씩만 실행할 수 있는 엄격한 트랜잭션 격리를 제공합니다. 동시에 실행할 수 없습니다. "행 수준 잠금"을 통해서만 직렬화를 수행할 수 없습니다. 쿼리 작업을 실행하는 트랜잭션이 새로 삽입된 데이터에 액세스하지 못하도록 하기 위해 다른 메커니즘을 사용해야 합니다.
직렬화는 가장 높은 트랜잭션 격리 수준이며 비용도 가장 많이 듭니다. 성능이 매우 낮고 일반적으로 이 수준에서는 트랜잭션이 순차적으로 실행되므로 더티 읽기 및 반복 불가능 읽기도 방지하고 더티 읽기와 반복 불가능 읽기도 방지합니다.
트랜잭션의 기본 요소(ACID)
1. 원자성: 트랜잭션이 시작된 후 모든 작업이 완료되거나 완료되지 않으며 중간 링크에서 정체가 불가능합니다. 트랜잭션 실행 중 오류가 발생하면 트랜잭션이 시작되기 전 상태로 롤백되어 모든 작업이 발생하지 않은 것처럼 처리됩니다. 즉, 물질의 기본 단위인 화학에서 배운 원자와 마찬가지로 사물은 분할할 수 없는 전체입니다.
2. 일관성: 트랜잭션 시작 및 종료 전후에 데이터베이스의 무결성 제약 조건이 파괴되지 않습니다. 예를 들어, A가 B에게 돈을 이체하면 A는 돈을 공제할 수 없지만 B는 돈을 받지 못합니다. ?
3. 격리: 동시에 하나의 트랜잭션만 동일한 데이터를 요청할 수 있으며 서로 다른 트랜잭션 간에 간섭이 없습니다. 예를 들어, A는 은행 카드에서 돈을 인출하고 있습니다. B는 A의 인출 절차가 완료되기 전에는 이 카드로 돈을 이체할 수 없습니다.
4. 내구성: 트랜잭션이 완료된 후 트랜잭션에 의해 데이터베이스에 대한 모든 업데이트가 데이터베이스에 저장되며 롤백할 수 없습니다.
위 내용 참조: 거래 격리 수준 - 바이두 백과사전