19.6.4 Partitioning and Locking
MySQL 5.6.5 이전 버전에서는 DML 또는 DDL 문을 실행할 때 테이블 수준 잠금을 실제로 실행하는 MyISAM
등의 스토리지 엔진의 경우, 파티션 된 테이블에 영향을주는 그런 문이 테이블에 전체 잠금 를 적용하고있었습니다. 즉, 문이 완료 될 때까지 모든 파티션이 잠겨있었습니다. MySQL 5.6.6 파티션 잠금 가지 치기를 구현하고 이에 따라 많은 경우에 불필요한 잠금이 제거됩니다. MySQL 5.6.6 이후에서는 분할 된 MyISAM
테이블에서 읽거나 업데이트 할 대부분의 문에서 영향을받는 파티션 만 고정됩니다. 예를 들어, MySQL 5.6.6 이전에는 분할 MyISAM
테이블에서 SELECT
전체 테이블이 잠겨있었습니다. MySQL 5.6.6 이후에는 SELECT
문 WHERE
조건을 채우는 행을 실제로 들어있는 파티션 만 고정됩니다. 여기에는 분할 된 MyISAM
테이블에 대한 동시 작업의 속도 및 효율성을 향상시키는 효과가 있습니다. 이 개선은 많은 (32 이상)의 파티션이있는 MyISAM
테이블을 조작 할 때 더욱 그러합니다.
이 동작 변경은 행 수준 잠금을 사용하여 파티션 가지 치기 전에 잠금을 실제로 실행하지 않는 (또는 실행 할 필요가 없다), InnoDB
등의 스토리지 엔진을 사용하는 파티션 된 테이블에 영향을 미치는 문 에 영향을주지 않습니다.
다음 몇 단락에서는 테이블 수준 잠금을 사용하는 스토리지 엔진을 사용하는 테이블에 대한 다양한 MySQL 문에 파티션 잠금 가지 치기의 효과에 대해 설명합니다.
DML 문에 미치는 영향
SELECT
문 (union 또는 join을 포함하는 것을 포함)가 실제로 읽어야하는 파티션 만 잠글 수 있습니다. 이것은 SELECT ... PARTITION
에도 적용됩니다.
UPDATE
는 파티셔닝 컬럼이 갱신되지 않는 테이블에만 잠금을 정리합니다.
REPLACE
및 INSERT
삽입 또는 교체되는 행이있는 파티션 만 잠글 수 있습니다. 그러나 AUTO_INCREMENT
값이 파티셔닝 컬럼으로부터 생성되는 경우, 모든 파티션이 잠겨 있습니다.
INSERT ... ON DUPLICATE KEY UPDATE
는 파티셔닝 컬럼이 갱신되지 않는 한 정리됩니다.
INSERT ... SELECT
는 읽어야 소스 테이블의 파티션 만 잠글 수 있습니다 (대상 테이블의 모든 파티션은 잠겨 있습니다).
INSERT DELAYED
는 파티션 된 테이블에서 지원되지 않습니다.
LOAD DATA
문에 의해 분할 된 테이블에 적용되는 잠금 치기 수 없습니다.
파티션 된 테이블의 파티셔닝 컬럼을 사용하는 BEFORE INSERT
또는 BEFORE UPDATE
트리거가 존재하는 경우,이 테이블을 업데이트 할 INSERT
및 UPDATE
문에 잠금을 정리 할 수 없음을 의미합니다 (트리거가 그 값을 변경할 수 있기 때문에). 테이블 파티셔닝 컬럼에 대한 BEFORE INSERT
트리거가 존재하는 경우, INSERT
또는 REPLACE
에 의해 설정되는 잠금을 정리 할 수 없음을 의미합니다 ( BEFORE INSERT
트리거가 행이 삽입되기 전에 행의 파티셔닝 컬럼을 변경하고이를 통해 행이 본래의 것과 다른 파티션에 강제로 삽입 될 수 있기 때문에). 파티셔닝 컬럼의 BEFORE UPDATE
트리거는 UPDATE
또는 INSERT ... ON DUPLICATE KEY UPDATE
에 의해 적용되는 잠금을 정리 할 수 없음을 의미합니다.
영향을받는 DDL 문
CREATE VIEW
에서 잠금을하지 않게됩니다.
ALTER TABLE ... EXCHANGE PARTITION
잠금을 정리하게됩니다. 교환되는 테이블 및 교환되는 파티션 만 고정됩니다.
ALTER TABLE ... TRUNCATE PARTITION
락이 정리하게됩니다. 하늘에있는 파티션 만 고정됩니다.
ALTER TABLE
문은 계속 테이블 수준에서 메타 데이터 잠금을합니다.
기타 문의
LOCK TABLES
는 파티션 잠금 치다 수 없습니다.
CALL stored_procedure(
은 잠금 가지 치기를 지원하지만, expr
)expr
을 평가할 때하지 않습니다.
DO
및 SET
문은 파티션 잠금 가지 치기를 지원하지 않습니다.