어떻게 복제는 MySQL의 분석 래그

돌려 https://blogs.oracle.com/jsmyth/what-causes-replication-lag를

무엇 복제 지연의 원인은?

 
마크 르윈
MYSQL 교육 과정 개발자

노예 (또는 경우 복제 지연이 발생  세컨더리가 ) 마스터 (또는에서 발생하는 업데이트와 함께 유지할 수 없다  ). 적용되지 않은 변경 사항은 노예 '릴레이 로그에 축적과 노예의 데이터베이스의 버전은 마스터와는 점점 달라진다.

 

 

지연 원인을 알아하려면, 당신은 백업중인 복제가 스레드를 결정해야합니다. 하나는 마스터에서 생성되고 두 개의 슬레이브에 작성됩니다 복제는 마스터 / 슬레이브 연결 당 세 개의 스레드를 사용합니다.

  • 슬레이브 I / O 스레드. 당신이 실행하면  START SLAVE 슬레이브 서버에서 슬레이브는 마스터에 연결 마스터의 바이너리 로그의 사본을 요청이 스레드를 생성한다.
  • 바이너리 로그 덤프 스레드. 슬레이브가 마스터에 연결하면, 마스터는 슬레이브에게 바이너리 로그의 내용을 보내려면이 스레드를 사용합니다.
  • 슬레이브 SQL 스레드. 노예는이 SQL (또는 생성  적용자 검색된 바이너리 로그의 내용을 읽고 그 내용을 적용) 스레드.

는 I / O 스레드 또는 SQL 스레드 중 하나가 그 위에 배치 요구에 대처할 수없는 경우 복제 지연이 발생합니다.

I / O 쓰레드가 고통 인 경우, 마스터와 슬레이브 간의 네트워크 연결 속도가 느린이 수단이다. 당신은을 가능하게 고려하는 것이 좋습니다  slave_compressed_protocol 압축 네트워크 트래픽 또는 네트워크 관리자에게 말하기.

는 SQL thread의 경우 문제는 아마 적용하는 데 시간이 너무 오래 슬레이브을 복용하는 잘못에 최적화 된 쿼리 때문이다. 장기 실행 트랜잭션이나 너무 많은 I / O 활동이있을 수 있습니다. 를 사용할 때 슬레이브 테이블에 기본 키가없는  ROW 또는  MIXED 수표를 테이블 모두 마스터와 슬레이브 버전이 기본 키를 가지고 : 복제 형식이 스레드에서 지연의 일반적인 원인이다.

그러나 당신은 어떻게 영향을받는 스레드 알 수 있습니까? 이것은 당신이 바이너리 로그 파일 이름과 위치 또는 GTIDs 사용 여부에 따라 달라집니다.

그런 다음 실행, 바이너리 로그 파일 이름과 위치를 사용하는 경우  SHOW MASTER STATUS 와  SHOW SLAVE STATUS 당신이 어떤 스레드하는 것은 문제를 일으키는 해결하는 데 필요한 모든을 제공합니다 :

마스터> SHOW 마스터 상태; 
+ --------------- + ----------- + 
| 파일 | 위치 | ... 
+ --------------- + ----------- + 
| binlog.000002 | 121,752,008 | ... 
+ --------------- + ----------- + 

노예> SHOW 노예 상태 \ G 
********* ************ 1. 행 ********************* 
         Slave_IO_State : 대기 마스터 전송에 이벤트 
            MASTER_HOST : 127.0.0.1 
            Master_User : 복제 
            MASTER_PORT : 22,808 
          Connect_Retry : 60 
        MASTER_LOG_FILE : binlog.000002 
    Read_Master_Log_Pos : 121409852 
         RELAY_LOG_FILE : relaylog.000002  
          RELAY_LOG_POS : 119,819,329
  Relay_Master_Log_File : binlog.000002
       Slave_IO_Running : 예 
      Slave_SQL_Running : 예 
... 
    Exec_Master_Log_Pos : 120003004 
        Relay_Log_Space : 121,226,377

당신의 값을 뺀 모든 I / O 스레드 지연을 계산할 수 있습니다  Read_Master_Log_Pos 에서를  Position.

마스터 = 위치 뒤에 바이트 - Read_Master_Log_Pos 
= 121752008-121409852 
= 342,156 바이트

당신이 계정에 바이너리 로그 파일의 크기를 가지고해야하기 때문에이 바이너리 로그 파일 이름은 슬레이브와 마스터 모두 동일하다고 가정합니다 그렇지 않으면 계산은 더 복잡해진다.

슬레이브 SQL 쓰레드가 복제 마스터 뒤쳐 경우 다음 계산을 설명합니다 :

마스터 = 위치 뒤에 바이트 - Exec_Master_Log_Pos 
= 121752008-120003004 
= 1,749,004 바이트

슬레이브의 SQL 쓰레드가 I / O 스레드 뒤쳐 경우 또는, 다음이 다음과 같은 계산 결과에서 볼 수 있습니다 :

마스터 = Read_Master_Log_Pos 뒤에 바이트 - Exec_Master_Log_Pos 
= 121409852-120003004 
= 1,406,848 바이트

Seconds_Behind_Master 의 출력 열  SHOW SLAVE STATUS 또한 당신에게 지연의 정도의 거친 아이디어를 제공합니다. 이 거래 또는 슬레이브 필요하지 않습니다 마스터에서 수행하는 모든 작업을 실행 시간이 긴 고려하지 않기 때문에, 너무 많은 생각에 의존하지 마십시오. 이 값은 가장 좋은 기간 동안 모니터링됩니다.

복제 설정이 GTIDs를 사용하는 경우, 당신은 복제 지연을 진단하기 위해 다음과 같은 정보를 사용합니다 :

  • Executed GTIDs. 트랜잭션이 인스턴스에서 실행 된 쇼. 마스터와 슬레이브 모두에서 사용할 수 있습니다. 또한 세계에서 실행 된 최신 트랜잭션의 GTID 얻을 수있는  gtid_executed 상태 변수를.
  • Retrieved GTIDs. I / O 쓰레드가받은 트랜잭션을 보여줍니다. 단지 슬레이브에 사용할 수 있습니다.
  • Purged GTIDs. 거래 완료 후 바이너리 로그에서 제거 된 쇼. 당신은이 상황에서 슬레이브에 의해 제거 거래에 관심이 있습니다.

당신이 GTIDs이 있으면 당신이 사용할 수있는  GTID_SUBTRACT() 마스터의에서 세계의 노예의 관점의 차이를 계산하는 기능. 예를 들어, 슬레이브 쇼에서 다음 쿼리는 GTIDs 아직 (SQL 스레드 지연) 적용되지 않은 바이너리 로그에서 읽기 :

슬레이브> SELECT GTID_SUBTRACT ( '96985d6f-2ebc-11e7-84df-08002715584a : 5-133' 
        '- 96985d6f 2ebc-11e7-84df-08002715584a : 26-132') MissingGTIDs AS; 
+ ----------------------------------------------- + 
| MissingGTIDs | 
+ ----------------------------------------------- + 
| 96985d6f-2ebc-11e7-84df-08002715584a : 5-25 : 133 | 
+ ----------------------------------------------- + 
1 세트의 행 (0.00 초)

추천

출처www.cnblogs.com/feiyun8616/p/12163938.html