Loading...
MySQL 9.5 Reference Manual 9.5의 17.6.6 Undo Logs의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Undo log는 단일 읽기-쓰기 트랜잭션에 연결된 undo log 레코드들의 집합입니다. Undo log 레코드에는 트랜잭션이 clustered index 레코드에 수행한 최신 변경을 어떻게 롤백할 것인지에 대한 정보가 포함됩니다. 다른 트랜잭션이 일관 읽기 작업의 일부로 원래 데이터를 볼 필요가 있을 때, 수정되지 않은 데이터는 undo log 레코드에서 가져옵니다. Undo log는 undo log segments 내에 존재하며, undo log segments는 rollback segments 내에 포함됩니다. Rollback segments는 undo tablespaces와 global temporary tablespace 내에 존재합니다.
Global temporary tablespace에 존재하는 undo log는 사용자 정의 임시 테이블의 데이터를 수정하는 트랜잭션에 사용됩니다. 이러한 undo log는 장애 복구에 필요하지 않으므로 리두 로깅이 수행되지 않습니다. 이들은 서버가 실행 중일 때 롤백에만 사용됩니다. 이런 유형의 undo log는 리두 로깅 입출력을 피함으로써 성능 향상에 기여합니다.
Undo log에 대한 비활성 데이터 암호화 정보는 Undo Log Encryption을 참조하십시오.
각 undo tablespace와 global temporary tablespace는 각각 최대 128개의 rollback segment를 지원합니다. innodb_rollback_segments 변수는 rollback segment의 개수를 정의합니다.
Rollback segment가 지원하는 트랜잭션 수는 rollback segment 내 undo 슬롯의 개수와 각 트랜잭션에 필요한 undo log 개수에 따라 달라집니다. Rollback segment 내 undo 슬롯의 개수는 InnoDB 페이지 크기에 따라 다릅니다.
| InnoDB Page Size | Number of Undo Slots in a Rollback Segment (InnoDB Page Size / 16) |
|---|---|
4096 (4KB) | 256 |
8192 (8KB) | 512 |
16384 (16KB) | 1024 |
32768 (32KB) | 2048 |
65536 (64KB) | 4096 |
트랜잭션에는 다음 작업 유형 각각에 대해 최대 네 개의 undo log가 할당됩니다:
Undo log는 필요에 따라 할당됩니다. 예를 들어, 일반 테이블과 임시 테이블에 대해 INSERT, UPDATE, DELETE 작업을 수행하는 트랜잭션은 네 개의 undo log를 모두 할당받습니다. 일반 테이블에 대해서만 INSERT 작업을 수행하는 트랜잭션은 하나의 undo log만 필요합니다.
일반 테이블에 대한 작업을 수행하는 트랜잭션은 할당된 undo tablespace rollback segment로부터 undo log를 할당받습니다. 임시 테이블에 대한 작업을 수행하는 트랜잭션은 할당된 global temporary tablespace rollback segment로부터 undo log를 할당받습니다.
트랜잭션에 할당된 undo log는 트랜잭션이 지속되는 동안 그 트랜잭션에 연결된 상태로 유지됩니다. 예를 들어, 일반 테이블에 대한 INSERT 작업에 트랜잭션에 할당된 undo log는 해당 트랜잭션이 수행하는 모든 일반 테이블에 대한 INSERT 작업에 사용됩니다.
위에서 설명한 요소들을 고려하면, InnoDB가 지원할 수 있는 동시 읽기-쓰기 트랜잭션 수를 추정하기 위해 다음 공식을 사용할 수 있습니다.
참고
InnoDB가 지원할 수 있는 동시 읽기-쓰기 트랜잭션 수에 도달하기 전에 동시 트랜잭션 한도 오류가 발생할 수 있습니다. 이는 트랜잭션에 할당된 rollback segment의 undo 슬롯이 부족할 때 발생합니다. 이런 경우, 트랜잭션을 다시 실행해 보십시오.
트랜잭션이 임시 테이블에 대해 작업을 수행하는 경우, InnoDB가 지원할 수 있는 동시 읽기-쓰기 트랜잭션 수는 기본값이 128인 global temporary tablespace에 할당된 rollback segment 수에 의해 제한됩니다.
1(innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces
1(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces
INSERT 작업을 수행하는 경우, InnoDB가 지원할 수 있는 동시 읽기-쓰기 트랜잭션 수는 다음과 같습니다:1(innodb_page_size / 16) * innodb_rollback_segments
INSERT 및 UPDATE 또는 DELETE 작업을 수행하는 경우, InnoDB가 지원할 수 있는 동시 읽기-쓰기 트랜잭션 수는 다음과 같습니다:1(innodb_page_size / 16 / 2) * innodb_rollback_segments
17.6.5 Redo Log
17.7 InnoDB Locking and Transaction Model