[MySQL] 서버 자동 환경 설정(MySQL 8.0)
- Databases/MySQL
- 2023. 3. 19.
■ 서버 자동 설정 변수(파라미터)
MySQL 8.0에는 서버 메모리 환경을 자동으로 설정해주는 파라미터가 있습니다. 이 파라미터에 대해 한번 알아보겠습니다.
▶︎ 변수 확인
먼저 서버 변수에 대해 알아보겠습니다.
변수명 : innodb_dedicated_server
명령라인 형식 | --innodb-dedicated-server[={OFF|ON}] |
시스템 변수 | innodb_dedicated_server |
범위 | 전역 |
동적여부 | 아니오 |
SET_VAR 힌트 적용 | 아니오 |
형식 | Boolean(참, 거짓) |
기본값 | OFF |
▶︎ 자동 설정 변수
innodb_dedicated_server가 활성화되면 InnoDB는 자동으로 다음 변수를 구성합니다.
• innodb_buffer_pool_size
• innodb_redo_log_capacity 또는 MySQL 8.0.30 이전에는 innodb_log_file_size 및 innodb_log_files_in_group.
• innodb_flush_method
참고로 innodb_log_file_size 및 innodb_log_files_in_group은 MySQL 8.0.30에서 더 이상 사용되지 않습니다. 이러한 변수는 innodb_redo_log_capacity 변수로 대체됩니다.
MySQL 인스턴스가 사용 가능한 모든 시스템 리소스를 사용할 수 있는 전용 서버(Docker나 VM같은 가상환경 포함)에 상주하는 경우에만 innodb_dedicated_server 활성화를 고려해야 합니다.
MySQL 인스턴스가 다른 애플리케이션과 시스템 리소스를 공유하는 경우 시스템 자원을 MySQL이 많이 가져가게 되거나 반대로 다른 애플리케이션에서 시스템자원을 가져갈 수도 있습니다. 이때 메모리 관리에서 충돌이 발생하거나 부족 현상이 나타나여 시스템 성능에 영향을 받을 수 있습니다.
▶︎ 다음 정보는 각 변수가 자동으로 구성되는 방법을 설명합니다.
• innodb_buffer_pool_size
버퍼 풀 크기는 서버에서 감지된 메모리 양에 따라 구성됩니다.
표. 자동으로 구성된 버퍼 풀 크기
감지된 서버 메모리 | 버퍼 풀 크기 |
1기가 미만 | 128MB (기본값) |
1GB ~ 4GB | 감지 서버 메모리 * 0.5 |
4GB 이상 | 감지된 서버 메모리 * 0.75 |
• innodb_redo_log_capacity
Redo 로그 용량은 서버에서 감지된 메모리 양과 경우에 따라 innodb_buffer_pool_size가 명시적으로 구성되었는지 여부에 따라 구성됩니다. innodb_buffer_pool_size가 명시적으로 구성되지 않은 경우 기본값이 가정됩니다.
참고 : 자동 리두 로그 용량 구성 동작은 innodb_buffer_pool_size가 감지된 서버 메모리 양보다 큰 값으로 설정된 경우 정의되지 않습니다.
표. 자동으로 구성된 로그 파일 크기
감지된 서버 메모리 | 버퍼 풀 크기 | Redo 로그 용량 |
1GB 미만 | 구성되지 않음 | 100MB |
1GB 미만 | 1GB 미만 | 100MB |
1GB ~ 2GB | 해당 없음 | 100MB |
2GB ~ 4GB | 구성되지 않음 | 1GB |
2GB ~ 4GB | Any configured value 임의의 구성된 값 |
round(0.5 * 감지된 서버 메모리(GB)) * .5GB round : 반올림 |
4GB ~ 10.66GB | 해당 없음 | round(0.75 * 감지된 서버 메모리(GB)) * 0.5GB |
10.66GB~170.66GB | 해당 없음 | round(0.5625 * 감지된 서버 메모리(GB)) * 0.5GB |
170.66GB 이상 | 해당 없음 | 128GB |
• innodb_log_file_size(MySQL 8.0.30에서 더 이상 사용되지 않음)
로그 파일 크기는 자동으로 구성된 버퍼 풀 크기에 따라 구성됩니다.
표. 자동으로 구성된 로그 파일 크기
버퍼 풀 크기 | 로그 파일 크기 |
8GB 미만 | 512MB |
8GB~128GB | 1024MB |
128GB 이상 | 2048MB |
• innodb_log_files_in_group(MySQL 8.0.30에서 더 이상 사용되지 않음)
로그 파일의 수는 자동으로 구성된 버퍼 풀 크기에 따라 구성됩니다. innodb_log_files_in_group 변수의 자동 구성이 MySQL 8.0.14에 추가되었습니다.
표. 자동으로 구성된 로그 파일 수
버퍼 풀 크기 | 로그 파일 수 |
8GB 미만 | round(버퍼 풀 크기) |
8GB ~ 128GB | round(버퍼 풀 크기 * 0.75) |
128GB 이상 | 64 |
메모
반올림된 버퍼 풀 크기 값이 2GB 미만인 경우 최소 innodb_log_files_in_group 값 2가 적용됩니다.
• innodb_flush_method
플러시 방법은 innodb_dedicated_server가 활성화된 경우 O_DIRECT_NO_FSYNC로 설정됩니다.
O_DIRECT_NO_FSYNC 설정을 사용할 수 없는 경우 기본 innodb_flush_method 설정이 사용됩니다.
InnoDB는 I/O를 플러시하는 동안 O_DIRECT를 사용하지만 각 쓰기 작업 후에 fsync() 시스템 호출을 건너뜁니다.
• 참고
1. MySQL 8.0.14 이전 버전에서는 이 설정이 파일 시스템 메타데이터 변경 사항을 동기화하기 위해 fsync() 시스템 호출이 필요한 XFS 및 EXT4와 같은 파일 시스템에 적합하지 않습니다.
2. MySQL 8.0.14부터 fsync()는 새 파일을 만든 후, 파일 크기를 늘린 후, 파일을 닫은 후 파일 시스템 메타데이터 변경 사항이 동기화되도록 하기 위해 호출됩니다. fsync() 시스템 호출은 각 쓰기 작업 후에 여전히 건너뜁니다.
3. 리두 로그 파일과 데이터 파일이 서로 다른 저장 장치에 있는 경우 데이터 손실이 발생할 수 있으며 데이터 파일 쓰기가 배터리 지원되지 않는 장치 캐시에서 플러시되기 전에 예기치 않은 종료가 발생합니다. 리두 로그 파일과 데이터 파일에 대해 다른 저장 장치를 사용하거나 사용하려는 경우 데이터 파일이 배터리 지원되지 않는 캐시가 있는 장치에 상주하는 경우 대신 O_DIRECT를 사용하십시오.
▶︎ 마무리
자동으로 구성된 옵션이 옵션 파일이나 다른 곳에서 명시적으로 구성된 경우 명시적으로 지정된 설정이 사용되며 다음과 유사한 시작 경고가 stderr에 인쇄됩니다.
[Warning] [000000] InnoDB: Option innodb_dedicated_server is ignored for innodb_buffer_pool_size because innodb_buffer_pool_size=134217728 is specified explicitly.
한 옵션의 명시적 구성은 다른 옵션의 자동 구성을 방해하지 않습니다.
innodb_dedicated_server가 활성화되고 innodb_buffer_pool_size가 명시적으로 구성된 경우 버퍼 풀 크기를 기준으로 구성된 변수는 명시적으로 정의된 버퍼 풀 크기 값이 아닌 서버에서 감지된 메모리 양에 따라 계산된 버퍼 풀 크기 값을 사용합니다.
자동으로 구성된 설정은 MySQL 서버가 시작될 때마다 평가되고 필요한 경우 재구성됩니다.
참고페이지
https://dev.mysql.com/doc/refman/8.0/en/innodb-dedicated-server.html
'Databases > MySQL' 카테고리의 다른 글
[MySQL] PERSIST, RESET PERSIST를 통한 서버 파라미터 관리 (0) | 2024.01.01 |
---|---|
[MySQL] Logrotate - 로그 분할 (0) | 2023.07.02 |
[MySQL] 리눅스의 파일 열기 갯수 변경 및 자원 제한 확인 (0) | 2023.03.19 |
[MySQL][Parameter] back_log (2) | 2023.02.24 |
[MySQL][Parameter] 다양한 Read Only 파라미터 (0) | 2023.02.16 |