[MySQL은] 너무 큰 SQL 파일 가져 오기 문제를 해결하기 위해 너무 느립니다입니다

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 세트 만 정전 또는 서버 충돌의 경우, 모든 트랜잭션은 데이터 전에 마지막 순간이 손실 될 수 있습니다합니다.

추천

출처www.cnblogs.com/ttkl/p/12023640.html