본문 바로가기
Database/MYSQL

innodb_flush_log_at_trx_commit = 2를 사용하는 것이 안전할까?

by 반화넬 2020. 8. 25.
반응형

최대 1 초 분량의 트랜잭션을 잃을 수 있습니다. 기본값은 1이며 InnoDB ACID 준수를 유지하는 데 도움이됩니다 .

innodb_flush_log_at_trx_commit 의 MySQL 문서에 따르면 innodb_flush_log_at_trx_commit의 값이 0이면 로그 버퍼가 초당 한 번 로그 파일에 기록되고 디스크로 플러시 조작이 로그 파일에서 수행되지만 트랜잭션 커미트에서는 아무것도 수행되지 않습니다. 값이 1 (기본값)이면 각 트랜잭션 커밋에서 로그 버퍼가 로그 파일에 기록되고 디스크로 플러시 작업이 로그 파일에서 수행됩니다. 값이 2 인 경우, 커밋 할 때마다 로그 버퍼가 파일에 기록되지만 디스크로 플러시 작업은 수행되지 않습니다. 그러나 값이 2 인 경우에도 로그 파일의 플러시가 초당 1 회 발생합니다. 프로세스 스케쥴링 문제로 인해 초당 플러시가 100 % 보장되는 것은 아닙니다.

 

완전한 ACID 준수를 위해서는 기본값 1이 필요합니다. 1과 다른 값을 설정하여 성능을 향상시킬 수 있지만 충돌시 최대 1 초 분량의 트랜잭션을 잃을 수 있습니다. 값이 0이면 mysqld 프로세스 충돌로 인해 마지막 트랜잭션이 지워질 수 있습니다. 값이 2이면 운영 체제 충돌 또는 정전 만이 마지막 트랜잭션의 초를 지울 수 있습니다. InnoDB의 응급 복구는 값에 관계없이 작동합니다.

반응형

트랜잭션과 함께 InnoDB를 사용하는 복제 설정에서 최대한의 내구성과 일관성을 유지하려면 마스터 서버 my.cnf 파일에서 innodb_flush_log_at_trx_commit = 1 및 sync_binlog = 1을 사용하십시오.

 

많은 운영 체제와 일부 디스크 하드웨어는 디스크 비우기 작업을 속입니다. 그들은 플러시가 발생하지 않았음에도 불구하고 mysqld에 알려줄 수있다. 그러면 설정 1을 사용해도 트랜잭션의 내구성이 보장되지 않으며 최악의 경우 정전으로 인해 InnoDB 데이터베이스가 손상 될 수도 있습니다. SCSI 디스크 컨트롤러 나 디스크 자체에서 배터리 백업 디스크 캐시를 사용하면 파일 플러시 속도가 빨라지고 작업이 더 안전 해집니다. 하드웨어 캐시에서 디스크 쓰기 캐싱을 비활성화하거나 하드웨어 공급 업체에 특정한 다른 명령을 사용하려면 Unix 명령 hdparm을 사용해보십시오.

 

이를 바탕으로 1 이외의 값으로 InnoDB는 1 초 분량의 트랜잭션 또는 트랜잭션 커밋 분량의 데이터를 잃을 위험이 있습니다.

 

이 문서에는 use라고 나와 있습니다 sync_binlog=1 sync_binlog 의 MySQL 문서에 따르면 충돌이 발생하면 이진 로그에서 최대 하나의 명령문이나 트랜잭션이 손실되므로 값 1이 가장 안전한 선택입니다. 그러나 디스크에 배터리 백업 캐시가 없어 동기화 속도가 매우 빠르지 않은 한 가장 느린 선택이기도합니다.

 

가장 안전한 선택은 [mysqld] innodb_flush_log_at_trx_commit=1 sync_binlog=가능한 데이터 손실 (최대 1 초 가치)을 염두에 두지 않으면 보상 (빠른 쓰기 속도)이 가치가있는 경우 위험 부담으로 0 또는 2를 사용할 수 있습니다.

반응형