Loading...
MySQL 9.5 Reference Manual 9.5의 10.5.4 Optimizing InnoDB Redo Logging의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
다음의 가이드라인을 참고하여 redo 로깅을 최적화할 수 있습니다:
InnoDB가 redo 로그 파일을 가득 채우면, 버퍼 풀의 수정된 내용을 디스크로 checkpoint 시에 기록해야 합니다. redo 로그 파일이 작으면 불필요한 디스크 쓰기가 많이 발생합니다.redo 로그 파일의 크기는 innodb_redo_log_capacity에 의해 결정됩니다. InnoDB는 동일한 크기의 32개 redo 로그 파일을 유지하려고 하며, 각 파일의 크기는 innodb_redo_log_capacity의 1/32입니다. 따라서 innodb_redo_log_capacity 설정을 변경하면 redo 로그 파일의 크기가 변경됩니다.
redo 로그 파일 구성을 변경하는 방법은 Section 17.6.5, “Redo Log”를 참조하십시오.
log buffer 크기를 늘리는 것을 고려하십시오. 로그 버퍼가 크면 큰 transaction이 트랜잭션 commit 전에 로그를 디스크에 기록할 필요 없이 실행될 수 있습니다. 따라서 많은 row를 update, insert 또는 delete하는 트랜잭션이 있는 경우, 로그 버퍼를 크게 하면 디스크 I/O를 줄일 수 있습니다. 로그 버퍼 크기는 동적으로 설정 가능한 innodb_log_buffer_size 구성 옵션을 사용하여 설정합니다.
“read-on-write”를 방지하기 위해 innodb_log_write_ahead_size 구성 옵션을 설정하십시오. 이 옵션은 redo 로그에 대한 write-ahead 블록 크기를 정의합니다. innodb_log_write_ahead_size를 운영 체제 또는 파일 시스템 캐시 블록 크기와 일치하도록 설정하십시오. read-on-write는 redo 로그의 write-ahead 블록 크기와 운영 체제 또는 파일 시스템 캐시 블록 크기 사이에 불일치가 있어 redo 로그 블록이 운영 체제나 파일 시스템에 완전히 캐시되지 않을 때 발생합니다.
innodb_log_write_ahead_size의 유효한 값은 InnoDB 로그 파일 블록 크기 (2ⁿ)의 배수입니다. 최소 값은 InnoDB 로그 파일 블록 크기 (512)입니다. 최소 값을 지정하면 write-ahead는 발생하지 않습니다. 최대 값은 innodb_page_size 값과 같습니다. innodb_log_write_ahead_size에 innodb_page_size 값보다 큰 값을 지정하면 innodb_log_write_ahead_size 설정은 innodb_page_size 값으로 잘립니다.
innodb_log_write_ahead_size 값을 운영 체제 또는 파일 시스템 캐시 블록 크기에 비해 너무 낮게 설정하면 read-on-write가 발생합니다. 값을 너무 높게 설정하면 여러 블록을 한 번에 기록하기 때문에 로그 파일 쓰기에 대한 fsync 성능에 약간의 영향을 줄 수 있습니다.
MySQL은 로그 버퍼에서 시스템 버퍼로 redo 로그 레코드를 기록하고 시스템 버퍼를 redo 로그 파일로 플러시하기 위한 전용 로그 라이터 스레드를 제공합니다. innodb_log_writer_threads 변수를 사용하여 로그 라이터 스레드를 활성화하거나 비활성화할 수 있습니다. 전용 로그 라이터 스레드는 고동시성 시스템에서 성능을 향상시킬 수 있지만, 저동시성 시스템에서는 전용 로그 라이터 스레드를 비활성화하는 것이 더 나은 성능을 제공합니다.
flushed redo를 기다리는 user 스레드가 사용하는 스핀 딜레이를 최적화하십시오. 스핀 딜레이는 지연 시간을 줄이는 데 도움이 됩니다. 저동시성 기간에는 지연 시간 감소의 우선순위가 낮을 수 있으며, 이 기간 동안 스핀 딜레이 사용을 피하면 에너지 소비를 줄일 수 있습니다. 고동시성 기간에는 스핀 딜레이에 처리 능력을 사용하는 대신 다른 작업에 사용할 수 있도록 하는 것이 좋을 수 있습니다. 다음 시스템 변수를 사용하면 스핀 딜레이 사용의 경계를 정의하는 high watermark 및 low watermark 값을 설정할 수 있습니다.
innodb_log_wait_for_flush_spin_hwm: user 스레드가 flushed redo를 기다리는 동안 더 이상 스핀하지 않게 되는 최대 평균 로그 플러시 시간을 정의합니다. 기본값은 400 마이크로초입니다.
innodb_log_spin_cpu_abs_lwm: user 스레드가 flushed redo를 기다리는 동안 더 이상 스핀하지 않게 되는 최소 CPU 사용량을 정의합니다. 이 값은 CPU 코어 사용량의 합으로 표현됩니다. 예를 들어, 기본값 80은 단일 CPU 코어의 80%입니다. 멀티코어 프로세서가 있는 시스템에서 값 150은 하나의 CPU 코어 100% 사용 및 두 번째 CPU 코어 50% 사용을 의미합니다.
innodb_log_spin_cpu_pct_hwm: user 스레드가 flushed redo를 기다리는 동안 더 이상 스핀하지 않게 되는 최대 CPU 사용량을 정의합니다. 이 값은 모든 CPU 코어의 전체 처리 능력 합에 대한 비율(%)로 표현됩니다. 기본값은 50%입니다. 예를 들어, 두 개의 CPU 코어를 100% 사용하면 네 개의 CPU 코어가 있는 서버에서 전체 CPU 처리 능력의 50%에 해당합니다.
innodb_log_spin_cpu_pct_hwm 구성 옵션은 프로세서 affinity를 고려합니다. 예를 들어, 서버에 48개의 코어가 있지만 mysqld 프로세스가 네 개의 CPU 코어에만 고정되어 있는 경우, 나머지 44개의 CPU 코어는 무시됩니다.
10.5.3 Optimizing InnoDB Read-Only Transactions
10.5.5 Bulk Data Loading for InnoDB Tables