14.14.2.3 InnoDB 트랜잭션과 잠금 테이블의 데이터 지속성 및 일관성
트랜잭션 및 잠금 테이블 (
INNODB_TRX
, INNODB_LOCKS
및 INNODB_LOCK_WAITS
)에 의해 공개되는 데이터는 빠르게 변경되는 데이터에 대한 참조를 나타냅니다. 이것은 응용 프로그램에서 시작된 업데이트가 발생한 경우에만 데이터가 변경되는 다른 (사용자) 테이블과는 다릅니다. 기반이되는 데이터는 시스템에 의해 관리되는 내부 데이터이며, 매우 빠르게 변경 될 수 있습니다. 성능상의 이유로 또한 InnoDB
트랜잭션과 잠금중인 INFORMATION_SCHEMA
테이블 간의 JOIN
이 잘못 해석 될 가능성을 최소화하기 위해 하나의 테이블에 대해 SELECT
가 발행 될 때마다, InnoDB
는 필요한 트랜잭션 및 잠금 정보를 중간 버퍼에 수집합니다. 이 버퍼는 마지막으로 읽은 후 0.1 초 이상의 시간이 경과 한 경우에만 갱신됩니다. 3 개의 테이블을 충족하기 위해 필요한 데이터는 원자 적으로하며 일관성을 유지하고 인출 된이 글로벌 내부 버퍼에 저장되어 시점 "스냅 샷"을 형성합니다. 여러 테이블 액세스가 0.1 초 이내에 발생한 경우 (MySQL이이 테이블 간의 조인을 처리하는 경우는 거의 틀림없이 발생합니다) 쿼리를 충족하기 위해 같은 스냅 샷이 사용됩니다.
이들 중 하나의 테이블을 하나의 쿼리로 결합 JOIN
을 실행 한 경우에는 3 개의 테이블의 데이터가 동일한 스냅 샷에서 가져 오기 때문에 올바른 결과가 반환됩니다. 버퍼는 이러한 테이블의 쿼리마다 새로 고침되지 않기 때문에 이러한 테이블에 10 분의 1 초 내에 개별 쿼리를 발행 한 경우는 쿼리마다 결과가 동일합니다. 이에 대해 10 분의 1 초 이상 떨어져 발행 된 같은 테이블 또는 다른 테이블의 두 개의 별도의 쿼리는 데이터가 다른 스냅 샷에서 파생되므로 다른 결과가 나타날 가능성 수 있습니다.
트랜잭션 및 잠금 데이터가 수집되는 동안 InnoDB
는 일시적으로 중지해야하므로 이러한 테이블의 쿼리를 자주 수행하고 너무 다른 사용자 관점에서 성능에 부정적인 영향을 미칠 수 있습니다.
이 테이블에는 기밀 정보 (적어도 INNODB_LOCKS.LOCK_DATA
및 INNODB_TRX.TRX_QUERY
)가 포함되어 있기 때문에 보안상의 이유로 거기에서 SELECT
허용되는 것은 PROCESS
권한을 가진 사용자 만입니다.
14.14.2.3.1 PROCESSLIST 데이터의 불일치 가능성
섹션 14.14.2.3 "InnoDB 트랜잭션과 잠금 테이블의 데이터 지속성과 일관성" 에 설명 된 바와 같이, InnoDB
트랜잭션과 잠금 테이블 ( INNODB_TRX
, INNODB_LOCKS
및 INNODB_LOCK_WAITS
)을 충족 데이터는 자동으로 가져 왔습니다 " 시점 "스냅 샷을 제공하는 중간 버퍼에 저장됩니다. 같은 스냅 샷에서 쿼리 된 경우 데이터는 3 개의 모든 테이블에 걸쳐 일관성이 있습니다. 그러나 기반이되는 데이터가 매우 빠르게 변경되므로 마찬가지로 빠르게 변경되는 다른 데이터에 유사한 참조가 동기화되지 않을 수 있습니다. 따라서 InnoDB
트랜잭션과 잠금 테이블의 데이터를 PROCESSLIST
테이블의 데이터와 비교하는 경우주의하십시오. PROCESSLIST
테이블에서 데이터 잠금 및 트랜잭션에 대한 데이터와 동일한 스냅 샷에서 검색되지 않습니다. 하나의 SELECT
(예를 들어, INNODB_TRX
과 PROCESSLIST
의 결합)을 발행 한 경우에도 일반적으로 이러한 테이블의 내용에 일관성이 없습니다. INNODB_TRX
이 PROCESSLIST
에는 존재하지 않는 행을 참조하거나 INNODB_TRX.TRX_QUERY
에 표시된 트랜잭션의 현재 실행중인 SQL 쿼리가 PROCESSLIST.INFO
의 것과는 다르다 할 수 있습니다.