• 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의 개념과 아키텍처
    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의 성능
    1. InnoDB 버퍼 풀 구성
    2. InnoDB 상호 배타적 잠금 및 읽기 / 쓰기 잠금 구현
    3. InnoDB를위한 메모리 할당 구성
    4. InnoDB 변경 버퍼링 구성
    5. InnoDB의 스레드 병렬성 구성
    6. InnoDB 백그라운드 I/O 스레드 수 구성
    7. 그룹 커밋
    8. InnoDB 마스터 스레드의 I/O 속도의 구성
    9. InnoDB 스핀 루프에서 PAUSE 명령 사용
    10. 스핀 록 폴링 구성
    11. InnoDB의 MySQL 성능 스키마와 통합
    12. 다중 롤백 세그먼트에 의한 확장성 향상
    13. InnoDB 퍼지 스케줄링 구성
    14. InnoDB의 읽기 전용 트랜잭션 최적화
    15. 체크섬의 고속화를위한 CRC32 체크섬 알고리즘의 사용
    16. 옵티 마이저 통계
    17. InnoDB 테이블에 ANALYZE TABLE의 복잡성 추정
    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.13.2 InnoDB 상호 배타적 잠금 및 읽기 / 쓰기 잠금 구현

MySQL 및 InnoDB 는 실행의 여러 스레드가 공유 데이터 구조에 액세스합니다. InnoDB 는 이러한 액세스를 상호 배타 락 과 읽기 / 쓰기 잠금 자신의 구현과 동기화합니다. InnoDB 는 종래 InnoDB 상호 배타 락을 사용하여 읽기 / 쓰기 잠금의 내부 상태를 보호하고 왔습니다. Unix 및 Linux 플랫폼에서는 IEEE Std 1003.1c (POSIX.1c)에있는 바와 같이, InnoDB 상호 배타 락의 내부 상태는 Pthreads 상호 배타 락에 의해 보호됩니다.

많은 플랫폼은 상호 배타적 잠금 및 읽기 / 쓰기 잠금을 구현하기위한보다 효율적인 방법이 존재합니다. 원자 작업을 사용하면 종종 Pthreads보다 효율적으로 다중 스레드 작업을 동기화 할 수 있습니다. 락을 취득 또는 해제 할 각 작업을 더 적은 CPU 명령으로 실행할 수 있기 때문에 공유 데이터 구조에 대한 액세스를 위해 스레드가 충돌하는 경우 낭비 시간이 줄어 듭니다. 멀티 코어 플랫폼에서, 이것은 또한 확장 성을 향상시킵니다.

InnoDB 는 이전에 사용 된 Pthreads 방식을 사용하는 대신 원자 메모리 액세스를위한 GNU 컴파일러 컬렉션 (GCC)에 의해 제공되는 내장 함수 를 사용하여 상호 배타 락과 읽기 / 쓰기 잠금을 구현 합니다. 보다 구체적으로는 GCC 버전 4.1.2 이상에서 컴파일 된 InnoDB 는 pthread_mutex_t 대신 원자 내장을 사용하여 InnoDB 상호 배타적 잠금 및 읽기 / 쓰기 잠금을 구현합니다.

32 비트 Microsoft Windows에서는 InnoDB 는 손으로 쓰여진 어셈블러 명령을 사용하여 (읽기 / 쓰기 잠금이 아니라) 상호 배타 락을 구현하고있었습니다. Microsoft Windows 2000에서는 GCC에서 제공되는 내장 함수와 같은, 연동 된 변수 액세스 를위한 함수를 사용할 수 있습니다. Windows 2000 이상에서는 InnoDB 는 연동 된 함수를 사용합니다. 손으로 쓰여진 옛날 어셈블러 코드와는 달리 새로운 구현에서는 읽기 / 쓰기 잠금 및 64 비트 플랫폼이 지원됩니다.

Solaris 10에서는 원자 연산을위한 라이브러리 함수가 도입되고, InnoDB는 기본적으로 이러한 함수를 사용합니다. 원자 메모리 액세스를위한 GNU 컴파일러 컬렉션 (GCC)에서 제공하는 내장 함수 를 지원하지 않는 컴파일러를 갖춘 Solaris 10에서 MySQL이 컴파일 된 경우 InnoDB 는 라이브러리 함수를 사용합니다.

이로 인해 멀티 코어 시스템에서 InnoDB 의 확장 성이 향상됩니다. 이 기능은 자신이 지원되는 플랫폼에서 표준으로 사용됩니다. 성능 향상을 제공하기 위해 매개 변수와 옵션을 설정할 필요가 없습니다. 원자 메모리 액세스를위한 GCC, Windows 또는 Solaris 함수를 사용할 수없는 플랫폼에서는 InnoDB 는 상호 배타 락과 읽기 / 쓰기 잠금을 구현하기 위해 기존의 Pthreads 방법을 사용합니다.

MySQL이 시작되면 InnoDB 는 원자 메모리 액세스가 상호 배타적 잠금 사용되거나 상호 배타 락과 읽기 / 쓰기 잠금에 사용되거나 어느 쪽에도 사용 여부를 나타내는 메시지를 로그 파일에 기록 합니다. 적절한 도구를 사용하여 InnoDB 가 구축되어 있으며, 또한 대상 CPU가 필요한 원자 연산을 지원하는 경우, InnoDB 는 상호 배타적 잠금 내장 함수를 사용합니다. 또한 스레드 식별자 ( pthread_t )에서 비교 및 스왑 작업을 사용할 수있는 경우, InnoDB 는 읽기 / 쓰기 잠금을위한 명령도 사용합니다.

참고

소스에서 빌드하는 경우 그 빌드 프로세스 플랫폼의 기능을 제대로 활용하고 있는지 확인하십시오.

락의 성능에 미치는 영향 대한 자세한 내용은 섹션 8.10 "잠금 작업의 최적화" 를 참조하십시오.



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