• 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. 버퍼링과 캐시
    1. InnoDB 버퍼 풀
    2. MyISAM 키 캐시
    1. 공유 키 캐시 액세스
    2. 복합 키 캐시
    3. Midpoint 삽입 전략
    4. 인덱스 프리로드
    5. 키 캐시 블록 크기
    6. 키 캐시의 재구성
    3. MySQL 쿼리 캐시
    4. 준비된 문 및 저장 프로그램 캐시
    10. 잠금 작업의 최적화
    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.9.2.2 복합 키 캐시

키 캐시에 대한 공유 액세스 성능을 향상 시키지만 세션 간의 충돌을 완전히 제거하지 않습니다. 그들은 여전히​​ 키 캐시 버퍼에 대한 액세스를 관리하는 제어 구조를 얻기 위해 경쟁합니다. 키 캐시 액세스 충돌을 더 줄이기 위해, MySQL은 복합 키 캐시도 제공합니다. 이 기능은 다른 키 캐시에 다양한 테이블 인덱스를 할당 할 수 있습니다.

복합 키 캐시가있는 경우, 서버는 특정 MyISAM 테이블에 대해 쿼리를 처리 할 때 사용해야 캐시를 알고 있어야합니다. 기본적으로 모든 MyISAM 테이블 인덱스는 기본 키 캐시에 캐시됩니다. 테이블 인덱스를 특정 키 캐시에 할당하려면 CACHE INDEX 문을 사용합니다 ( 섹션 13.7.6.2 "CACHE INDEX 구문" 을 참조하십시오). 예를 들어, 다음 명령문은 t1 , t2 및 t3 테이블에서 hot_cache 라는 이름의 키 캐시 인덱스를 할당합니다.

mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table   | Op                 | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status   | OK       |
| test.t2 | assign_to_keycache | status   | OK       |
| test.t3 | assign_to_keycache | status   | OK       |
+---------+--------------------+----------+----------+

CACHE INDEX 문에서 참조되는 키 캐시는 SET GLOBAL 파라미터 설정 명령문에서 그 크기를 설정하거나 서버 시작 옵션을 사용하여 만들 수 있습니다. 예 :

 mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;

키 캐시를 삭제하려면 그 사이즈를 제로로 설정합니다.

 mysql> SET GLOBAL keycache1.key_buffer_size=0;

기본 키 캐시는 포기하지 않습니다. 이렇게하면 모든 시도는 무시됩니다.

mysql> SET GLOBAL key_buffer_size = 0;

mysql> SHOW VARIABLES LIKE 'key_buffer_size';
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| key_buffer_size | 8384512 |
+-----------------+---------+

키 캐시 변수는 이름과 구성 요소의 구조화 된 시스템 변수입니다. keycache1.key_buffer_size 의 경우 keycache1 캐시 변수 이름이며, key_buffer_size 는 캐시 구성 요소입니다. 구조화 키 캐시 시스템 변수를 참조하는 데 사용하는 구문에 대한 자세한 내용은 섹션 5.1.5.1 "구조 시스템 변수" 를 참조하십시오.

기본적으로 테이블 인덱스는 서버 시작시에 생성되는 메인 (디폴트) 키 캐시에 할당됩니다. 키 캐시가 파기되면 그에 할당 된 모든 인덱스는 기본 키 캐시에 재 할당됩니다.

바쁜 서버의 경우 3 개의 키 캐시를 포함한 전략을 사용할 수 있습니다.

  • 모든 키 캐시에 할당 된 공간의 20 %를 차지하는 '핫'키 캐시. 이것은 검색에 자주 사용되지만 업데이트되지 않는 테이블에 사용합니다.

  • 모든 키 캐시에 할당 된 공간의 20 %를 차지한다 "콜드"키 캐시. 이 캐시는 임시 테​​이블 등 중소 집중적으로 변경되는 테이블에 사용합니다.

  • 키 캐시 공간의 60 %를 차지한다 "따뜻한"키 캐시. 이것은 기본적으로 다른 모든 테이블에 사용되도록 기본 키 캐시로 사용합니다.

3 개의 키 캐시를 사용하여 이점이있는 이유 중 하나는 하나의 키 캐시 구조에 대한 액세스가 다른 액세스를 차단하지 않는 것입니다. 캐시에 할당 된 테이블에 액세스하는 명령문은 다른 캐시에 할당 된 테이블에 액세스하는 명령문과 경쟁하지 않습니다. 성능 향상은 다른 이유에서도 발생합니다.

  • 핫 캐시는 쿼리를 가져 오는 데에만 사용되기 때문에 그 내용이 변경되는 것은 아닙니다. 그 결과, 인덱스 블록을 디스크로부터 꺼낼 필요가있는 경우 항상 대체를 위해 선택된 캐시 블록의 내용을 최초로 플래시 필요가 없습니다.

  • 핫 캐시에 할당 된 인덱스의 경우 인덱스 스캔을 요구하는 쿼리가 없으면 인덱스 B 트리의 리프가 아닌 노드에 대응하는 인덱스 블록이 캐시에 남아있을 가능성이 높습니다.

  • 임시 테이블에 대한 가장 자주 실행되는 업데이트 작업은 업데이트되는 노드가 캐시에 먼저 디스크에서 읽을 필요가없는 경우 훨씬 빠르게 실행됩니다. 임시 테이블의 인덱스 크기가 콜드 키 캐시의 크기와 같은 정도이면 업데이트되는 노드가 캐시에있을 수 높습니다.

CACHE INDEX 문은 테이블과 키 캐시 간의 연결을 설정하지만, 그 협회는 서버가 재시작 될 때마다 손실됩니다. 서버가 시작할 때마다 연결을 사용하려는 경우이를 하나의 방법은 옵션 파일을 사용하는 것입니다. 키 캐시를 구성하는 변수 설정 및 실행되는 CACHE INDEX 문을 포함하는 파일을 지정 init-file 옵션을 포함합니다. 예 :

 key_buffer_size = 4G
 hot_cache.key_buffer_size = 2G
 cold_cache.key_buffer_size = 2G
 init_file = / path / to / data-directory /mysqld_init.sql

서버가 시작할 때마다 mysqld_init.sql 명령문이 실행됩니다. 파일에는 한 줄에 하나씩 SQL 문을 포함해야합니다. 다음의 예는 hot_cache 와 cold_cache 에 여러 테이블을 각각 할당합니다.

 CACHE INDEX db1.t1, db1.t2, db2.t3 IN hot_cache
 CACHE INDEX db1.t4, db2.t5, db2.t6 IN cold_cache


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