MySQL의 디스크 쓰기 정책 제어 및 데이터 보안은 두 가지 핵심 매개 변수입니다 : 에서 innodb_flush_log_at_trx_commit 및 sync_binlog을
매개 변수 :에서 innodb_flush_log_at_trx_commit
① 세트를 0으로하는 경우, 로그 파일 조작 (디스크로) 로그 파일과 동시에 높이를 작성 초당 한번 로그 버퍼. 트랜잭션 커밋은 디스크에 기록 트리거 조치에 주도권을 쥐고하지 않는이 모드에서,
② 로그 버퍼 데이터는 로그 파일에 로그 파일과 동시에 세척 (디스크로) 동작 작성된 1로 설정하면하여,이 모드에서, 트랜잭션이 커밋 될 때마다, MySQL이 될 것이다;
③ 제 의지에 따라 동작 세트 2하다면,이 모드에서, 트랜잭션이 커밋 될 때마다, MySQL은 로그 버퍼 데이터가 로그 파일에 기록되지만, 로그 파일에 플러시되지 않을 것 같은 시간 (디스크로 플러시) 로그 파일을 플러시의 구현 작업 (디스크로).
참고 : 인해 스케줄링 문제의 과정에, 우리는 보장 100 % "작업 (디스크로) 매 초마다 플러시 실행"없습니다 "초마다 한 번씩 수행됩니다."
매개 변수 : sync_binlog을
① 동기화되지 디스크 N = 0 경우, 다른 문서로 운영 체제를 새로 고침 메커니즘으로, MySQL의 의지를 이동하지만, 바이너리 로그를 새로 운영 체제에 의존합니다.
② N> 0, 각 쓰기에서 MySQL의 N 시간이 바이너리 로그를 기록 진 경우, 이동 디스크에 바이너리 로그 바이너리 로그를 동기화를 fdatasync () 함수를 호출합니다.
참고 : 자동 커밋을 사용하고있는 경우, 각 문장 문은 쓰기 작업이있을 것이다 쓰기 작업에 달리, 각 트랜잭션 해당합니다.
도표 :
성능 :
① 테스트 시나리오 1 :
= 2에서 innodb_flush_log_at_trx_commit
sync_binlog을 = 1000
② 테스트 시나리오 2 :
= 1에서 innodb_flush_log_at_trx_commit
sync_binlog을 = 1000
③ 테스트 시나리오 3 :
= 1에서 innodb_flush_log_at_trx_commit
sync_binlog을 = 1
④ 테스트 시나리오 4 :
= 1에서 innodb_flush_log_at_trx_commit
sync_binlog을 = 1000
⑤ 테스트 시나리오 5 :
= 2에서 innodb_flush_log_at_trx_commit
sync_binlog을 = 1000
에서 innodb_flush_log_at_trx_commit | sync_binlog을 | TPS |
1,000 | 이 | 41000 |
1,000 | 1 | 33000 |
1 | 1 | 26000 |
1,000 | 1 | 33000 |
이 쇼가 :
Ⅰ, 1에서 innodb_flush_log_at_trx_commit = 1 sync_binlog을하고, 기록 동작의 최악의 성능 = 때
Ⅱ,에서 innodb_flush_log_at_trx_commit = 2 인 경우와 = 2 sync_binlog을 최대 성능에 대한 기입 동작;
보안 :
① 에서 innodb_flush_log_at_trx_commit을 0으로 설정하면, mysqld를 공정은 손실 모든 트랜잭션 데이터의 마지막 순간의 붕괴로 이어질 것입니다.
② 1의 mysqld 프로세스 충돌이나 트랜잭션에만 최대 서버, 바이너리 로그를 충돌 할 때 케이스에서 innodb_flush_log_at_trx_commit 및 sync_binlog을 가장 안전한 경우 손실 될 수 있습니다.
③ 2에서 innodb_flush_log_at_trx_commit 세트 만 정전 또는 서버 충돌의 경우, 모든 트랜잭션은 데이터 전에 마지막 순간이 손실 될 수 있습니다합니다.