• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 1. 최적화 개요
    2. SQL문 최적화
    3. 최적화 및 인덱스
    4. 데이터베이스 구조의 최적화
    5. InnoDB 테이블의 최적화
    6. MyISAM 테이블의 최적화
    7. MEMORY 테이블 최적화
    8. 쿼리 실행 계획의 이해
    9. 버퍼링과 캐시
    10. 잠금 작업의 최적화
    1. 내부 잠금 방법
    2. 테이블 잠금 문제
    3. 동시 삽입
    4. 메타 데이터 잠금(Metadata Locking)
    5. 외부 잠금(External Locking)
    11. MySQL 서버의 최적화
    12. 성능 측정
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

8.10.4 메타 데이터 잠금(Metadata Locking)

MySQL은 메타 데이터의 잠금을 사용하여 객체 (테이블, 트리거 등)에 대한 액세스를 관리합니다. 메타 데이터의 잠금은 데이터의 일관성을 보장하기 위해 사용되지만, 약간의 오버 헤드가 쿼리 볼륨이 증가하면 그것도 커집니다. 여러 쿼리가 같은 개체에 액세스를 시도 할 많을수록 메타 데이터의 충돌이 증가합니다.

메타 데이터의 잠금은 테이블 정의 캐시의 대체가 아닌 상호 배타적 잠금 및 잠금은 LOCK_open 상호 배타 락과 다릅니다. 다음의 설명에서는 메타 데이터의 락 메커니즘에 대한 정보를 제공합니다.

트랜잭션의 시리얼 라이저 빌리티를 확보하기 위해 서버는 다른 세션에서 완료되지 않은 명시 적 또는 암시 적으로 시작된 트랜잭션에서 사용되는 테이블에 세션 데이터 정의 언어 (DDL) 문 를 실행하는 것을 허용해서는 안됩니다. 서버는 트랜잭션에서 사용되는 테이블에서 메타 데이터 잠금을 획득하고 트랜잭션이 끝날 때까지 그 잠금 해제를 연기함으로써이를 실현합니다. 테이블에 메타 데이터 잠금은 테이블의 구조에 변화를 방해합니다. 이 잠금 방식은 세션의 트랜잭션에서 사용되는 테이블은 트랜잭션이 끝날 때까지 다른 세션에 의해 DDL 문에서 사용할 수 없다는 문제가 있습니다.

이 원칙은 트랜잭션 테이블뿐만 아니라 비 트랜잭션 테이블에도 적용됩니다. 세션이 트랜잭션 테이블 t 과 비 트랜잭션 테이블 nt 를 다음과 같이 사용되는 트랜잭션을 시작합니다.

 START TRANSACTION;
 SELECT * FROM t;
 SELECT * FROM nt;

서버는 트랜잭션이 끝날 때까지 t 과 nt 모두에 대한 메타 데이터 잠금을 유지합니다. 다른 세션이 하나의 테이블에 대해 DDL 또는 기입 해 락 조작을 시도, 그것은 트랜잭션이 끝날 때 메타 데이터 잠금이 해제 될 때까지 블록됩니다. 예를 들어, 두 번째 세션은 이들 중 하나를 시도하면 차단됩니다.

 DROP TABLE t;
 ALTER TABLE t ...;
 DROP TABLE nt;
 ALTER TABLE nt ...;
 LOCK TABLE t ... WRITE;

서버가 문법적으로이지만 실행에 실패하는 문 메타 데이터 잠금을 획득 한 경우 잠금을 조기에 해제하지 않습니다. 실패한 명령문이 바이너리 로그에 기록되고 자물쇠로 로그 일관성이 보호되므로 잠금 해제는 아직 트랜잭션이 끝날 때까지 연기됩니다.

자동 커밋 모드에서는 각 문이 사실상 전체 트랜잭션이기 때문에 그 문에 획득 된 메타 데이터 잠금은 문이 끝날 때까지 밖에 유지되지 않습니다.

PREPARE 문 중에 획득 된 메타 데이터 잠금은 준비가 다중 문 트랜잭션 내에서 수행되는 경우에도 문이 준비되면 해제됩니다.

MySQL 5.5 이전 버전에서는 트랜잭션이 문에서 사용되는 테이블의 메타 데이터 잠금과 동등한 잠금을 획득 한 경우, 문이 끝날 때 잠금을 해제하고있었습니다. 이 방법은 활성 트랜잭션에서 다른 세션에서 사용되는 테이블에 대해 DDL 문이 실행 된 경우 문은 잘못된 순서로 바이너리 로그에 기록 될 수 있다는 단점이있었습니다 .

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved