8.5.8 InnoDB 구성 변수의 최적화
경량 예측 가능한 부하가있는 서버와 항상 거의 가득한 공간에서 실행하고 있거나 높은 활동의 급증이 발생하거나 서버에서 최적으로 작동하는 설정이 다릅니다.
InnoDB
스토리지 엔진은 많은 최적화를 자동으로 실행하기위한 많은 성능 튜닝 작업은 데이터베이스가 제대로 실행되는지 확인하기위한 모니터링 및 성능 저하시의 구성 옵션 변경이 포함됩니다. 자세한 InnoDB
의 성능 모니터링 내용은 섹션 14.13.11 "InnoDB의 MySQL 성능 스키마와의 통합" 을 참조하십시오.
가장 중요하고 최신 InnoDB
성능 기능은 섹션 14.13 "InnoDB 성능" 을 참조하십시오. 이전 버전에서 InnoDB
테이블을 사용하더라도 이러한 기능은 "InnoDB 플러그인」에서의 것이기 때문에 익숙가 아니라고 생각합니다. 플러그인은 MySQL 5.1의 내장 InnoDB
와 공존 할 수 있으며 MySQL 5.5 이상에서 기본 스토리지 엔진입니다.
수행 할 수있는 주요 구성 단계는 다음과 같습니다.
고성능 메모리 할당을 갖춘 시스템에서
InnoDB
가 그들을 사용할 수 있도록합니다. 섹션 14.13.3 "InnoDB를위한 메모리 할당 구성" 을 참조하십시오.빈번한 작은 디스크 쓰기를 방지하기 위해
InnoDB
가 변경된 데이터를 버퍼링 DML 작업 유형을 제어합니다. 섹션 14.13.4 "InnoDB 변경 버퍼링 구성" 을 참조하십시오. 기본값은 모든 종류의 DML 작업을 버퍼링 할 수 있기 때문에 버퍼링의 양을 줄일 필요가있는 경우에만이 설정을 변경하십시오.innodb_adaptive_hash_index
옵션을 사용하여 적응 해시 인덱스 기능을 설정하거나 해제합니다. 자세한 내용은 섹션 14.2.13.6 "적응 형 해시 인덱스" 를 참조하십시오. 비정상적인 활동 사이에이 설정을 변경 한 다음 원래의 설정으로 복원 할 수 있습니다.컨텍스트 스위칭이 병목 인 경우에,
InnoDB
가 처리하는 동시 스레드 수에 제한을 설정합니다. 섹션 14.13.5 "InnoDB의 스레드 병렬성 구성" 을 참조하십시오.InnoDB
가 그 앞 조작으로 실행하는 프리 페치의 양을 제어합니다. 시스템에 사용되지 않은 I / O 용량이있는 경우 미리 의해 쿼리의 성능을 향상시킬 수 있습니다. 앞이 너무 많은 부하가 큰 시스템에서 성능이 주기적으로 저하 될 수 있습니다. 섹션 14.13.1.1 "InnoDB 버퍼 풀의 인출 (미리 읽기) 구성" 을 참조하십시오.기본값으로 충분히 활용되지 않은 고급 I / O 서브 시스템이있는 경우, 읽기 또는 쓰기 작업의 백그라운드 스레드 수를 늘립니다. 섹션 14.13.6 "InnoDB 백그라운드 I / O 스레드 수 구성" 을 참조하십시오.
백그라운드에서
InnoDB
가 수행하는 I / O의 양을 제어합니다. 섹션 14.13.8 "InnoDB 마스터 스레드의 I / O 속도의 구성" 을 참조하십시오. 백그라운드 I / O의 양은 MySQL 5.1보다 크므로 성능에주기적인 저하가 관찰 된 경우이 설정을 축소하는 것이 나을 수 있습니다.InnoDB
가 특정 종류의 백그라운드 쓰기를 실행하는시기를 결정하는 알고리즘을 제어합니다. 섹션 14.13.1.2 "InnoDB 버퍼 풀 플러시 빈도 구성" 을 참조하십시오. 알고리즘은 작업의 종류에 따라 기능하는 경우와 작동하지 않는 경우가 있기 때문에 성능에주기적인 저하가 관찰 된 경우는이 설정을 해제하는 것이 좋을 수 있습니다.컨텍스트 스위칭 지연을 최소화하기 위해 멀티 코어 프로세서와 그 캐시 메모리 구성을 사용합니다. 섹션 14.13.10 "스핀 록 폴링 구성" 을 참조하십시오.
테이블 스캔 등의 일회성 작업이
InnoDB
버퍼 캐시에 저장된 자주 액세스되는 데이터를 막는 것을 방지합니다. 섹션 14.13.1.3 "버퍼 풀 스캔을 견딜 수 있도록하겠다" 을 참조하십시오.신뢰성과 충돌 복구에 적당한 크기로 로그 파일을 조정합니다.
InnoDB
로그 파일은 종종 충돌 후 긴 부팅 시간을 피하기 위해 작게 유지되어 왔습니다. MySQL 5.5.4에서 도입 된 최적화하여 충돌 복구 프로세스의 특정 단계가 빨라집니다. 특히 Redo 로그 검색 및 Redo 로그의 적용은 메모리 관리 알고리즘의 개선을 위해 속도합니다. 긴 부팅 시간을 피하기 위해 로그 파일을 인위적으로 작게 유지하고 있었을 경우, 로그 파일 크기를 확대하고 Redo 로그 레코드의 재활용에 발생하는 I / O를 줄이는 것을 고려 할 수 습니다.InnoDB
버퍼 풀 인스턴스의 크기와 수를 구성합니다. 특히 기가 바이트의 버퍼 풀있는 시스템에 중요합니다. 섹션 14.13.1.4 "다중 버퍼 풀 인스턴스 사용" 을 참조하십시오.동시 트랜잭션의 최대 수를 늘립니다. 이것은 매우 바쁜 데이터베이스의 확장 성을 극적으로 향상됩니다. 섹션 14.13.12 「다중 롤백 세그먼트에 의한 확장 성 향상 " 을 참조하십시오. 이 기능은 일상적인 작업중인 작업을 필요로하지 않지만, 데이터베이스의 MySQL 5.5으로 업그레이드하는 동안 또는 그 이후에 저속 종료 를 실행하여 제한을 크게 할 수 있도록해야합니다.
제거 작업 (가비지 컬렉션의 일종)를 백그라운드 스레드로 이동합니다. 섹션 14.13.13 "InnoDB 퍼지 스케줄링 구성" 을 참조하십시오. 이 설정의 결과를 효율적으로 측정하려면 다른 I / O 관련 및 스레드 관련 구성 설정을 먼저 조정합니다.
바쁜 서버에서 SQL 조작이 줄 지어 '정체'가 발생하지 않도록,
InnoDB
가 동시 스레드에서 실행하는 스위칭의 양을 줄일 수 있습니다.innodb_thread_concurrency
옵션 값을 설정합니다 (강력한 최신 시스템에서 최대 약 32).innodb_concurrency_tickets
옵션의 값을 일반에 5000 정도로 늘립니다. 이 옵션의 조합은InnoDB
가 한번에 처리하는 스레드 수에 제한을 설정하고 각 스레드가 스왑 아웃 될 때까지 많은 양의 작업을 수행 할 수 있도록하기 위해 대기중인 스레드의 수가 줄어들고 과도한 컨텍스트 스위칭이 발생하지 않고 작업을 완료 할 수 있습니다.