14.13.3 InnoDB를위한 메모리 할당 구성
InnoDB
가 개발되었을 때 운영 체제와 함께 제공되는 메모리 할당과 런타임 라이브러리는 종종 성능 및 확장 성이 부족했습니다. 그 시점에서는 멀티 코어 CPU 용으로 튜닝 된 메모리 할당 라이브러리가 존재하지 않았습니다. 따라서 InnoDB
는 mem
서브 시스템 내에 메모리 할당을 구현했습니다. 이 할당은 하나의 상호 배타 락에 의해 보호되고 있으며, 이것이 병목 현상 이 발생할 수 있습니다. InnoDB
는 또한 시스템 할당 ( malloc
과 free
)의 주위에뿐만 아니라 하나의 상호 배타 락에 의해 보호되는 래퍼 인터페이스를 구현하고 있습니다.
오늘 멀티 코어 시스템이 더 광범위하게 사용 가능 해짐에 따라, 그리고 운영 체제가 성숙됨에 따라 운영 체제와 함께 제공되는 메모리 할당에 대해서 대폭적인 개선이 이루어 왔습니다. 새로운 메모리 할당은 이전보다 성능이 향상되고 또한 더 확장되었습니다. 주요 고성능 메모리 할당은 Hoard
, libumem
, mtmalloc
, ptmalloc
, tbbmalloc
및 TCMalloc
가 포함되어 있습니다. 대부분의 워크로드는 특히 메모리를 할당하고 해제가 빈번하게 행해지 (다중 테이블 조인과 같은) 경우 내부 InnoDB
고유의 메모리 할당이 아니라 더 높은 조정 된 메모리 할당을 사용하면 장점이 있습니다 .
InnoDB
가 자신의 메모리 할당 또는 운영 체제의 할당 중 어느 것을 사용할지, MySQL 옵션 파일 ( my.cnf
또는 my.ini
)의 시스템 구성 매개 변수 innodb_use_sys_malloc
값을 설정하여 제어 할 수 있습니다. ON
또는 1
(디폴트)로 설정되어있는 경우, InnoDB
는 메모리 풀을 스스로 관리하는 것이 아니라 기반이되는 시스템 malloc
과 free
함수를 사용합니다. 이 매개 변수는 동적 아니라 시스템이 부팅 된 경우에만 사용할 수 있습니다. InnoDB
메모리 할당을 계속 사용하려면 innodb_use_sys_malloc
를 0
으로 설정합니다.
InnoDB
메모리 할당이 해제 된 경우, InnoDB
는 매개 변수 innodb_additional_mem_pool_size
값을 무시합니다. InnoDB
메모리 할당은 시스템 메모리 할당에 대체하지 않고 할당 요청을 충족하기 위해 추가 메모리 풀을 사용합니다. InnoDB
메모리 할당이 해제 된 경우 이러한 할당 요청은 시스템 메모리 할당에 의해 채워집니다.
동적 링크를 사용하는 Unix 계열 시스템에서는 메모리 할당의 대체 환경 변수 LD_PRELOAD
또는 LD_LIBRARY_PATH
가 그 할당을 구현하는 동적 라이브러리를 가리 키도록하면 간단한 조작으로 끝날 수 있습니다. 다른 시스템에서는 어느 정도의 재 연결이 필요할 수 있습니다. 선택한 메모리 할당 라이브러리의 문서를 참조하십시오.
시스템 메모리 할당이 사용되는 ( innodb_use_sys_malloc
이 ON
인 경우) InnoDB
는 모든 메모리 사용을 추적 할 수 없기 때문에 SHOW ENGINE INNODB STATUS
명령의 출력에서의 "BUFFER POOL AND MEMORY"의 "Total memory allocated "는 버퍼 풀 통계 만 포함됩니다. mem
서브 시스템 또는 ut_malloc
를 사용하여 할당 된 메모리는 제외됩니다.
innodb_use_sys_malloc
과 innodb_additional_mem_pool_size
는 MySQL 5.6.3에서는 사용되지 않으며 이후 릴리스에서 제거 될 예정입니다.
InnoDB
의 메모리 사용의 성능에 미치는 영향 대한 자세한 내용은 섹션 8.9 "버퍼링과 캐시" 를 참조하십시오.