• 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. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 1. InnoDB 소개
    2. InnoDB의 개념과 아키텍처
    1. MySQL 과 ACID 모델
    2. InnoDB 트랜잭션 모델 및 잠금
    3. InnoDB 잠금 모드
    4. 일관성 nonlock 읽기
    5. 잠금 읽기 (SELECT ... FOR UPDATE 및 SELECT ... LOCK IN SHARE MODE)
    6. InnoDB 레코드 격차 및 넥스트 키 잠금
    7. 넥스트키 로크에 의한 팬텀 문제 해결
    8. InnoDB의 다양한 SQL문에서 설정된 잠금
    9. 암시적 트랜잭션 커밋과 롤백
    10. 교착 상태 감지 및 롤백
    11. 교착 상태 해결 방법
    12. InnoDB 멀티 버전
    13. InnoDB 테이블 및 인덱스 구조
    3. InnoDB 구성
    4. InnoDB 관리
    5. InnoDB 테이블 스페이스 관리
    6. InnoDB 테이블 관리
    7. InnoDB 압축 테이블
    8. InnoDB 파일 형식 관리
    9. InnoDB Row Storage and Row Formats
    10. InnoDB 디스크 I/O 및 파일 영역 관리
    11. InnoDB와 온라인 DDL
    12. InnoDB 부팅 옵션 및 시스템 변수
    13. InnoDB의 성능
    14. InnoDB INFORMATION_SCHEMA 테이블
    15. InnoDB 모니터
    16. InnoDB 백업 및 복구
    17. InnoDB와 MySQL 복제
    18. InnoDB 및 memcached의 통합
    19. 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 새로운 기능

14.2.2 InnoDB 트랜잭션 모델 및 잠금

트랜잭션 및 잠금 은 InnoDB 스토리지 엔진에 관련하는 대규모 고부하 또는 신뢰할 수있는 데이터베이스 응용 프로그램을 구현하거나 다른 데이터베이스 시스템에서 대량의 코드를 이식하거나 MySQL의 성능을 조정하거나 하려면 이러한 개념을 이해할 필요가 있습니다.

InnoDB 트랜잭션 모델의 목표는 멀티 버전 데이터베이스의 최고의 특성을 기존의 두 단계 잠금과 결합하는 것입니다. InnoDB 는 행 수준 잠금을 실시 기본적으로 쿼리를 Oracle 식의 비락의 일관성 독해로서 실행합니다. InnoDB 잠금 정보는 매우 높은 공간 효율성으로 저장되기 때문에 잠금 에스컬레이션은 필요 없습니다. 일반적으로 몇몇 사용자는 InnoDB 테이블의 모든 행 또는 행의 임의의 부분 집합을 잠글 수 있도록되어 있습니다. 이는 InnoDB 의 메모리가 소진 될 수는 없습니다.

InnoDB 는 모든 사용자 활동이 트랜잭션 내부에서 발생합니다. 자동 위탁 모드가 활성화되어있는 경우 각 SQL 문 자체에 하나의 트랜잭션이 생성됩니다. MySQL은 기본적으로 새로운 연결 세션 시작시 자동 실행을 활성화하기 위해 각 SQL 문에서 오류가 반환되지 않은 경우에 그 문 후에 커밋을 실행합니다. 문에서 오류가 반환 된 경우 커밋 또는 롤백 동작은 그 오류에 따라 다릅니다. 섹션 14.19.4 "InnoDB 오류 처리" 를 참조하십시오.

자동 위탁이 활성화되어있는 세션에서는 명시 적 START TRANSACTION 또는 BEGIN 문에서 시작하고 COMMIT 또는 ROLLBACK 문으로 종료되는 것으로, 다중 문 트랜잭션을 실행할 수 있습니다. 섹션 13.3.1 "START TRANSACTION, COMMIT 및 ROLLBACK 구문" 을 참조하십시오.

SET autocommit = 0 에서 세션에서 자동 커밋 모드를 해제하면 해당 세션은 항상 트랜잭션이 열린 상태입니다. COMMIT 또는 ROLLBACK 문은 현재 트랜잭션을 종료하고 새 세션을 시작합니다.

COMMIT 는 현재 트랜잭션에서 변경 한 내용은 영구적이며 다른 세션에서 볼 수있는 것을 의미합니다. 반대로, ROLLBACK 문은 현재 트랜잭션에 의해 수행 된 모든 변경을 취소합니다. COMMIT 과 ROLLBACK 은 모두 현재 트랜잭션 중에 설정된 모든 InnoDB 잠금을 해제합니다.

SQL : 1992의 트랜잭션 격리 수준 에 관해서는 기본 InnoDB 수준은 REPEATABLE READ 입니다. InnoDB 는 SQL 표준에 포함 된 4 개의 트랜잭션 격리 수준 ( READ UNCOMMITTED , READ COMMITTED , REPEATABLE READ , SERIALIZABLE )가 모두 제공됩니다.

사용자는 SET TRANSACTION 문을 사용하여 단일 세션 또는 이후의 모든 연결의 분리 레벨을 변경할 수 있습니다. 모든 연결에 대한 서버의 기본 격리 수준을 설정하려면 명령 행 또는 옵션 파일에서 --transaction-isolation 옵션을 사용합니다. 격리 수준 및 수준 설정 구문에 대한 자세한 내용은 섹션 13.3.6 "SET TRANSACTION 구문" 을 참조하십시오.

InnoDB 는 일반적으로 행 레벨 락 에 넥스트 키 잠금이 사용됩니다. 즉, InnoDB 는 인덱스 레코드 외에 인덱스 레코드 앞의 격차 도 록함으로써 인덱스 값이 트리 데이터 구조에서 그 갭에 삽입되는 다른 세션에 의해 삽입되는 것을 차단할 수 있습니다 . 넥스트 키 잠금은 인덱스 레코드와 그 전의 갭을 ​​잠그는 락을 참조하십시오. 갭 잠금은 여러 인덱스 레코드의 전의 갭만을 잠그는 락을 참조하십시오.

행 수준 잠금 및 갭 잠금이 해제되는 상황에 대한 자세한 내용은 섹션 14.2.6 "InnoDB 레코드 격차 및 넥스트 키 잠금" 을 참조하십시오.

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