중화사전망 - 서예자전 - Mysqlbinlog 의 도움 요청
Mysqlbinlog 의 도움 요청
2. 새 버전은 libbinlogevents 를 변경하고 압축된 트랜잭션 표현으로 Transaction_payload_event 를 추가합니다.
Classtransaction _ payload _ event: public binary _ log _ event {protected:? Const char * m _ payload? Uint64 _ t m _ payload _ size? Transaction:: 압축:: type m _ compression _ type? Uint64 _ t m _ uncompressed _ size
3. 트랜잭션 인코딩 및 디코딩을 위해 Transaction_payload_event 인코더/디코더를 추가합니다.
네임스페이스 binary_log {
네임스페이스 트랜잭션 {
네임스페이스 압축 {
열거 유형 {
/* 압축 안 함. */
없음 = 0,
/* ZSTD 압축. */
ZSTD = 1,
}
4. mysqlbinlog 에서 각 트랜잭션의 압축 해제 및 디코딩을 설계하고 구현합니다. 읽은 로그는 압축되지 않은 원본 로그와 동일하며 압축 알고리즘, 트랜잭션 형식, 압축 크기 및 압축되지 않은 크기를 주석으로 인쇄합니다.
#200505 16:24:24 서버 id11665511 End _ log _ pos2123 crc32 0x6 add0216 transaction _ payload payload _ size = 860 Uncompressed_size=2 184# 압축 이벤트 시작!
5. 압축된 이진 로그를 수신할 때 라이브러리 (또는 MGR-member) 에서 Transaction_payload_event 를 인식하고 2 차 압축 또는 디코딩을 수행하지 않습니다. 원래 압축 상태로 트렁크 로그를 기록합니다. 압축 상태를 유지하다. 재생 로그의 디코딩 및 압축 해제 프로세스는 SQL 스레드의 책임입니다.
요약 로그 압축 프로세스는 다음과 같습니다.
1) 회사 거래는 제출 및 binlog 기록이 필요합니다.
2) 압축 인코더는 ZSTD 알고리즘을 통해 캐시의 트랜잭션을 압축합니다.
3) 캐시에 있는 압축된 트랜잭션을 로그에 쓰고 로그 아웃합니다.
로그 읽기 프로세스는 다음과 같습니다.
클라이언트 도구 (mysqlbinlog, SQL thread) 는 압축된 로그의 압축을 풀고 디코딩합니다. 원래 압축되지 않은 로그의 압축을 풀어 읽거나 재생합니다.
주의할 사항
1. 압축 함수는 트랜잭션을 압축하고 트랜잭션되지 않은 엔진은 지원하지 않습니다.
2. 라인 모드에서 binlog 만 압축할 수 있습니다.
3. 현재는 ZSTD 압축 알고리즘만 지원되지만 기본 설계는 개방되어 있으므로 후속 공식에서는 필요에 따라 zlib 또는 lz4 와 같은 다른 압축 알고리즘을 추가할 수 있습니다.
4. 압축은 병렬로 수행되며 binlog 가 삭제되기 전 캐시 단계에서 발생합니다.
압축 프로세스는 로컬 CPU 및 메모리 리소스를 사용합니다. 마스터-슬레이브 지연 시나리오에서 성능이 병목 현상인 경우 네트워크 대역폭 및 압축 기능을 통해 마스터-슬레이브 지연을 효과적으로 완화할 수 있습니다. 그러나 성능 병목 현상이 기계 자체의 처리 능력인 경우 압축 기능은 오히려 마스터-슬레이브 지연을 증가시킬 수 있습니다.