본문 바로가기

MySQL

MySQL version 8.0 | 8.4 주요 차이점 비교 (파라미터 튜닝)

반응형

※ 주요 파라미터에 대한 상세 설명은 아래 정리

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:
  • Buffer pool hint: Calculated as 1/2 of (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)
  • CPU hint: Calculated as 1/4 of the number of available logical processors
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()를 사용하여 데이터와 메타데이터를 모두 디스크로 동기화.
    • 더 안전하지만 성능이 저하될 수 있음.

 

 

 

 

 

반응형