DBAtlas · 데이터베이스 운영 아틀라스

멀티스레드 replica 튜닝(replica_parallel_workers)

MySQL복제

명령어

-- Replica: stop the applier, set worker count and commit order
STOP REPLICA SQL_THREAD;
SET PERSIST replica_parallel_workers = 8;
SET PERSIST replica_preserve_commit_order = ON;
START REPLICA SQL_THREAD;
SELECT COUNT(*) AS workers FROM performance_schema.replication_applier_status_by_worker;

-- Source (8.0 only): switch dependency tracking to WRITESET (default in 8.4, variable removed)
SET PERSIST binlog_transaction_dependency_tracking = WRITESET;

하는 일

replica에서 트랜잭션을 병렬로 적용하는 worker 수를 설정한다. replica_preserve_commit_order는 커밋 순서를 source와 동일하게 유지한다. source의 WRITESET 의존성 추적은 source에서 순차적으로 커밋되었더라도 서로 다른 행을 건드리는 트랜잭션을 병렬로 적용할 수 있게 한다.

사용 시점

replica가 source의 쓰기 속도를 따라가지 못하고 applier가 사실상 단일 스레드인 상태에서 지연이 쌓일 때.

주의

새 worker 수는 applier가 재시작될 때 적용된다. CPU 코어보다 많은 worker를 실행하면 조정 오버헤드가 늘어나므로 8–16 범위에서 시작하고 지연과 worker 오류를 관찰한다. 하나의 거대한 트랜잭션이나 PK가 없는 테이블의 대량 DML은 병렬화할 수 없으며, 이것이 대개 지속적인 지연의 실제 원인이다. replica_preserve_commit_order=OFF는 병렬성을 높이지만 replica에서 짧은 순서 뒤바뀐 커밋을 허용하므로 읽기를 처리하는 replica에서는 ON으로 유지한다.

DBAtlas에서 열기 →

관련 항목