본문 바로가기
MySQL HA & DR/Replication

Multi-Threaded Slave Replication를 위한 variable slave_parallel_workers

by 모모레 2014. 3. 24.

MySQL Ver.5.6.3 부터 추가된 Multi-Threaded Slave Replication을 사용하기 위해서는 slave_parallel_workers variable을 사용해야 한다.

이 variable은 Ver.5.6.3에 추가되었으며, 다이나믹하게 수정이 가능하다. 기본값은 0 이고, 0 에서 1024까지 중의 값으로 설정이 가능하다.

 

--- 아래의 내용은 variable에 대한 레퍼런스 부분을 번역한 것입니다.

이 variable은 병렬적으로 replication events(transaction단위로)를 실행하기 위한 slave worker thread의 수를 설정한다. 기본값은 parallel execution을 실행하지 않는 0 값으로 설정된다.

parallel execution을 enable할 때, slave SQL thread는 slave worker thread를 위한 coordinator로서 동작하게 되고, 이 worker thread들은 각 database를 하나씩 맡아서 처리하는 방식으로 동작한다. 이것은 다른 database의 작업이 완료되지 않아도, 다른 database의 작업을 진행할 수 있다는 것을 의미한다. 현재 multi-thread의 동작 방식은 database별로 작업을 나누어서 처리하는 방식으로 동작한다. 즉, 하나의 데이터베이스에서 실행하는 쿼리는 master와 동일한 순서로 진행된다. 그러나, 두 데이터베이스 사이에는 coordinate를 할 필요가 없다.

 

다른 데이터베이스를 하나의 트랜잭션 안에서 접근하여 사용하는 경우에는 master와 slave사이의 작업 순서로 인한 문제가 발생할 수 있다. 이런 경우에는 잘못된 데이터가 DB에 저장될 수가 있다. 이것은 multi-threaded slave를 사용할때 복구와 로깅을 위한 의미를 가지고 있다. (복구나 바이너리 로깅 작성 시 문제가 된다는 것을 의미한다고 생각한다. ) 이것에 대한 자세한 내용은 다음의 url에서 확인해 보도록 한다.

http://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html

 

추가적으로, START SLAVE UNTIL 은 multi-threaded slave상에서 사용할 수 없고, multi-threadting이 enable된 상태에서 slave_transaction_retries 는 무조건 0이 된다. 이것은 변경할 수 없다. (즉, 현재 트랜잭션을 재 시도 하는 것은  multi-threaded slave 상에서는 사용할 수 없다.)