MySQL/InnoDB storage engine 2

Insert intention lock

"Insert intention lock"은 레코드 인서트 전에 INSERT조작에 의해서 설정되는 Gap lock의 일종입니다. 이 락(잠금)은 동일한 인덱스 갭에 인서트된 여러 트랜잭션이 갭(간격) 내에서 동일한 위치에 인서트되지 않을 경우 서로 기다릴 필요가 없도록 인서트하려는 의도를 나타냅니다.값이 4와 7의 인덱스 레코드가 존재한다고 가정합니다. 각각 5와 6의 값을 인서트하려는 트랜잭션은 인서트된 행에 대한 단독 잠금을 얻기 전에 각각 4와 7 사이의 간격을 인서트 인텐션 락으로 잠그지만 행이 충돌하지 않으므로 서로 차단하지 않습니다. 다음 예에서는 인서트된 레코드에 대한 배타적 잠금을 얻기 전에 인서트 인텐션 락을 실행하는 트랜잭션을 보여 줍니다. 이 예에는 A와 B라는 두 고객이 포함됩니다...

read-ahead

read-ahead 란? 하나의 extent(64개 pages group)을 모두 buffer pool에 prefetch하는 작업. (asynchronous request임) 이들 페이지도 곧 읽혀질거라는 가정하에 모두 버퍼에 올리는 것 알고리즘 linear read-ahead technique: 버퍼풀 안에 순차적으로 읽혀진 페이지 개수로 판단 만약 하나의 extent내에서 순차적으로 읽혀진 페이지 개수가 innodb_read_ahead_threshold 이상이면 다음 extent전체 페이지를 read-ahead random read-ahead technique: 버퍼풀 안에 존재하는 페이지 개수로 판단(순차적인지 여부와 무관함) 만약 한 extent내의 13개의 연속된 페이지가 버퍼풀에 존재한다면, ..