반응형
※ 주요 파라미터에 대한 상세 설명은 아래 정리
InnoDB System Variable Name | MySQL 8.4 | MySQL 8.0 |
innodb_buffer_pool_in_core_file | OFF if MADV_DONTDUMP is supported, otherwise ON |
ON |
innodb_buffer_pool_instances | If innodb_buffer_pool_size <= 1 GiB, then innodb_buffer_pool_instances=1 If innodb_buffer_pool_size > 1 GiB, then this is the minimum value from the following two calculated hints in the range of 1-64:
|
8 (or 1 if innodb_buffer_pool_size < 1 GiB) |
innodb_change_buffering | none | all |
--innodb-dedicated-server | If ON, the value of innodb_flush_method is no longer changed as in MySQL 8.0, but the calculation of innodb_redo_log_capacity is changed from memory-based to CPU-based. | OFF |
innodb_adaptive_hash_index | OFF | ON |
innodb_doublewrite_files | 2 | innodb_buffer_pool_instances * 2 |
innodb_doublewrite_pages | 128 | innodb_write_io_threads, which meant a default of 4 |
innodb_flush_method on Linux | O_DIRECT if supported, otherwise fsync | fsync |
innodb_io_capacity | 10000 | 200 |
innodb_io_capacity_max | 2 * innodb_io_capacity | 2 * innodb_io_capacity, with a minimum default value of 2000 |
innodb_log_buffer_size | 67108864 (64 MiB) | 16777216 (16 MiB) |
innodb_numa_interleave | ON | OFF |
innodb_page_cleaners | innodb_buffer_pool_instances | 4 |
innodb_parallel_read_threads | available logical processors / 8, with a minimum default value of 4 | 4 |
innodb_purge_threads | 1 if available logical processors is <= 16, otherwise 4 | 4 |
innodb_read_io_threads | available logical processors / 2, with a minimum default value of 4 | 4 |
innodb_use_fdatasync | ON | OFF |
temptable_max_ram | 3% of total memory, with a default value within a range of 1-4 GiB | 1073741824 (1 GiB) |
temptable_max_mmap | 0, which means OFF | 1073741824 (1 GiB) |
temptable_use_mmap | OFF | ON |
innodb_buffer_pool_in_core_file
- InnoDB 버퍼 풀 관련 정보를 MySQL의 코어 덤프(core dump) 에 포함시킬지 여부를 제어
innodb_buffer_pool_instances
- InnoDB 버퍼 풀을 여러 개의 인스턴스로 나누어 병렬 처리 성능을 향상시키는 데 사용되는 설정 파라미터
- ※ InnoDB 버퍼 풀 (InnoDB Buffer Pool)
- InnoDB는 데이터를 읽고 쓰는 작업을 더 빠르게 처리하기 위해 데이터를 메모리에 캐싱한다. 이때 이 메모리 영역이 바로 버퍼 풀이다.
- ※ 버퍼 풀 인스턴스
- 하나의 버퍼 풀을 여러 개의 인스턴스로 나누어 데이터의 읽기 및 쓰기 작업이 병렬로 처리될 수 있도록 도와준다. 이를 통해 특정 워크로드에서 경합(Contention)을 줄이고 성능을 향상시킬 수 있다.
innodb_change_buffering
- MySQL에서 InnoDB의 인덱스 변경 작업을 처리하는 방식과 관련된 파라미터
- 인덱스 페이지의 쓰기 작업을 디스크로 직접 기록하지 않고, 변경 내용을 임시로 버퍼에 저장함으로써 성능을 최적화
- 한창 커뮤니티에서 해당 파라미터가 오히려 성능을 악화시키고 시스템 부하를 야기한다는 의견이 많았다. 그래서 8.4 버전부터는 아예 지원을 하지 않게 된 듯 하다.
innodb-dedicated-server
- MySQL 8.0부터 도입된 설정으로, MySQL이 실행 중인 서버의 리소스를 전적으로 InnoDB 엔진에 최적화된 방식으로 자동 조정하도록 설정하는 파라미터
- 서버의 리소스를 기반으로 InnoDB 관련 메모리 설정(예: 버퍼 풀 크기)을 자동으로 계산하고 최적화한다.
- MySQL 서버를 상세 커스텀 하지 않아도 알아서 맞춰준다는 장점이 있지만,, 다른 애플리케이션을 같이 올려놓았을경우 MySQL에서 자원을 다 땡겨가거나 하는 이슈가 발생할 수 있다.
- 근데.. 실제로 해당 기능을 켜고 사용하는 사이트가 있을까 싶은... 제대로 운영이 될지는 모르겠다.
해당 기능을 사용할시 자동으로 조정해주는 파라미터들
- innodb_buffer_pool_size
- MySQL 서버의 전체 메모리 크기를 기반으로 InnoDB 버퍼 풀 크기를 계산.
- 기본적으로 시스템 메모리의 약 75~80%를 할당.
- innodb_log_file_size
- 로그 파일 크기를 자동으로 설정.
- 버퍼 풀 크기와 관련하여 최적의 값으로 조정됩니다.
- innodb_log_files_in_group
- InnoDB 로그 파일 그룹의 수를 적절히 설정.
- innodb_flush_method
- 디스크 I/O 성능에 따라 적합한 flush 방법을 자동 선택.
innodb_adaptive_hash_index
- InnoDB 스토리지 엔진에서 사용되는 MySQL 파라미터로, 자주 조회되는 데이터에 대해 자동으로 해시 인덱스를 생성하여 특정 쿼리의 성능을 향상시키는 기능
- InnoDB는 데이터를 B-트리 인덱스로 저장한다. 하지만 특정 쿼리(특히, 동등 조건 검색 =)가 자주 실행되는 경우, 해시 인덱스를 사용하면 검색 속도를 더 향상시킬 수 있다.
- InnoDB는 자주 사용되는 데이터 패턴을 분석하여 자동으로 해시 인덱스를 생성한다.
- 해시 인덱스는 InnoDB 버퍼 풀의 일부로 관리된다.
- 해당 파라미터도 문제가 많았다. 예를들어 메모리 사용량이 증가한다거나(InnoDB 버퍼풀의 일부로 관리함으로), 인덱스 접근시 LOCK 경합이 발생한다거나... 따라서 OLTP성 환경에서는 오히려 성능이 좋지 않으므로 8.4버전에서는 default값을 OFF로 한 듯 하다.
innodb_doublewrite_files
- InnoDB가 더블라이트 작업을 위해 사용할 수 있는 외부 파일의 수를 정의한다.
- DoubleWrite Buffer
- 기본적으로 더블라이트 버퍼는 공유 테이블스페이스에서 관리되며, 메모리에 존재한다.
- 데이터 페이지가 물리적 디스크로 쓰여지기 전에 이 버퍼에 한 번 기록된다.
- 외부 파일 관리
- innodb_doublewrite_files를 설정하면 더블라이트 버퍼가 외부 파일에 저장된다.
- 외부 파일의 개수를 늘리면 더블라이트 버퍼 작업이 병렬 처리되어 성능이 향상될 수 있다.
※ doublewrite
- InnoDB는 데이터를 디스크에 기록할 때 (재기동이나 스토리지 장애 등의) 크래시 손상 방지를 위해 데이터를 두 번 기록한다.
- 데이터가 최종 데이터 파일에 쓰여지기 전에, 더블라이트 버퍼(doublewrite buffer)에 한 번 기록된 후 물리적 디스크에 기록된다.
innodb_flush_method
- InnoDB 스토리지 엔진이 데이터를 디스크로 기록할 때 사용하는 플러시(Flush) 방법을 설정하는 파라미터
- InnoDB는 데이터를 메모리(버퍼 풀)에 저장한 후, 디스크에 플러시하여 영구 저장한다.
- innodb_flush_method는 데이터를 디스크로 쓰는 방법과 관련된 시스템 호출을 제어한다.
- 적절한 플러시 방법을 선택하면 디스크 I/O 성능을 최적화하고 데이터 무결성을 향상시킬 수 있다.
fsync | 안정적이고 데이터 무결성이 보장됨 | 높은 I/O 비용으로 인해 성능이 낮을 수 있음 |
O_DSYNC | 데이터와 메타데이터를 동기화하여 무결성을 유지하며 fsync보다 빠를 수 있음 | 일부 워크로드에서 성능 차이가 미미함 |
O_DIRECT | 디스크 캐시를 우회하여 레이턴시 감소 | 설정이 부적절하면 성능 저하 및 메모리 요구량 증가 가능 |
O_DIRECT_NO_FSYNC | 고성능을 제공하지만 안정성이 낮아 데이터 손실 가능성이 있음 | 데이터 무결성이 중요하지 않은 환경에서만 권장 |
- fsync: 일반적인 데이터 무결성이 중요한 환경에서 기본적으로 적합.
- O_DSYNC : 안전성과 성능 간 균형을 원할 때.
- O_DIRECT: 고성능 워크로드, 특히 대규모 데이터베이스에서 I/O 최적화가 필요한 경우. / 스토리지가 고성능이며 디스크 캐시가 불필요한 경우 적합.
- O_DIRECT_NO_FSYNC : 데이터 무결성이 중요하지 않은 읽기 중심 또는 테스트 환경.
innodb_use_fdatasync
- MySQL에서 InnoDB 스토리지 엔진이 데이터를 디스크로 플러시할 때 사용하는 시스템 호출을 제어하는 파라미터
- InnoDB는 데이터를 디스크로 기록할 때 OS의 파일 시스템 호출을 사용한다.
- innodb_use_fdatasync는 데이터 플러시에 fsync() 대신 fdatasync() 호출을 사용할지를 설정한다.
- 뭐가 더 나을지는 실제 운영 환경에서 테스트 해봐야하지만... 재기동 필요한 파라미터이다..
옵션
- ON:
- fdatasync()를 사용하여 데이터만 디스크로 동기화.
- I/O 성능을 최적화할 수 있음.
- OFF:
- fsync()를 사용하여 데이터와 메타데이터를 모두 디스크로 동기화.
- 더 안전하지만 성능이 저하될 수 있음.
반응형
'MySQL' 카테고리의 다른 글
MySQL MHA Failover 시 문제 원인과 해결법 | GARP(ARPING) 이슈 (2) | 2025.01.27 |
---|---|
MySQL Master Slave 복제 지연 해결 방안 | 예방 방안 (0) | 2025.01.17 |
Checking MySQL Logs (1) | 2024.12.26 |
MySQL Partition Exchange 작업 테스트 내용 정리(작업 소요시간 산정) (1) | 2024.12.20 |
MySQL 점검시 확인 해야 할 리스트(Error Summary, Purge Lag) (0) | 2024.11.30 |