MySQL 복제는 얼마나 빠릅니까?


19

각 지점에 로컬 슬레이브를 가질 수 있도록 mysql db의 복제를 설정하고 본사의 마스터가 지점의 응용 프로그램 성능을 크게 향상시키는 것을 고려하고 있습니다.

db 자체는 그다지 크지 않지만 (<1gb) 궁금합니다. 200-300 레코드 업데이트 / 최소한도 고려 : 복제 속도 (먼저 5mb 일반 dsl 연결을 가정하고 필요한 경우 더 빠름-가능한 한 저렴한 비용을 유지하려고 노력하지만 더 많은 돈이 있습니다)

전체 테이블이 일괄 복제됩니까? 테이블의 각 레코드가 업데이트됨에 따라 요청에 따라 복제가 수행됩니까 (문서에서 구성 가능함).

노트:

  • 나는 웹 클라이언트가 아닌 응용 프로그램 인 것을 제외하고 여기 의 문서 에서 와 같이 마스터 1, 슬레이브 2 (현재 지점 2 개) 설정 을 생각하고 있습니다.
  • 마스터에서 수행 된 모든 업데이트는 10 분 이내에 다른 슬레이브로 복제해야합니다.
  • 이 모든 것은 슬레이브에서 읽고 마스터에 쓰는 개념에 ORM (DevExpress XPO)을 만족시킬 수 있다고 가정합니다.

답변:


21

MySQL 복제는 디스크 및 네트워크 I / O에 의해 가능한 한 실시간에 가깝게 발생합니다. 슬레이브는 마스터에 대한 소켓을 열고 소켓은 열린 상태로 유지됩니다. 트랜잭션이 마스터에서 발생하면 binlog에 기록되고 단순히 슬레이브에서 재생됩니다. 마스터와 슬레이브 사이의 소켓이 중단되면 다음에 성공적으로 연결되면 슬레이브에 대해 binlog가 재생됩니다.

다중 마스터 복제는 동일한 작업을 수행하지만 양방향으로 수행됩니다.

일부 기본 계산은 대역폭 요구를보다 잘 판단하는 데 도움이됩니다.

Average transaction size * number of slaves * updates/minute = bandwidth needed

도움이 되었기를 바랍니다.


4

슬레이브 측의 복제는 두 개의 독립적 인 스레드에 의해 처리됩니다.

  • 마스터에 연결되는 로그 리더 프로세스는 각 데이터 수정 명령문을 수신하여 릴레이 로그에 씁니다.
  • 릴레이 로그에서 새 항목을 가져 오는 sql writer 프로세스는 슬레이브 데이터베이스에서 명령문을 커밋 한 다음 해당 명령문을지나 슬레이브 포인터를 이동하여 쿼리 수신을 나타냅니다.

복제 대기 시간은 IO, 즉 슬레이브 데이터베이스의 IO에 의해 릴레이 로그 (복잡한 SQL 쿼리를 포함 할 수 있음)의 트랜잭션을 적용하고 두 번째로 마스터의 IO에 의해 binlog를 읽고 각 슬레이브로 전송하는 IO에 의해 제한됩니다.

MySQL 복제는 읽기 쿼리 용량을 증가 시키지만 쿼리 쓰기 성능을 향상 시키지는 않습니다. IO는 마스터 및 슬레이브의 binlog로 플러시 될 수있는 속도로 게이트됩니다


3

MySQL은 복제 빨리 당신이 실행 할 수 있습니다보다 (슬레이브에 데이터를 얻기 위해 매우 빠르게 UPDATE마스터에, 또 다른 창으로 전환은 실행하기 위해 SELECT, 슬레이브에 있는 경우네트워크 연결이 모두 설정되어 있고 모든 것이 제대로 실행되고 있습니다. 일반적인 소규모 쿼리의 경우 모든 DSL 클래스 연결은 양호해야하지만 복제 삽입이 발생할 경우 대규모 삽입 / 업데이트 쿼리를 복사하고 재 동기화하는 데 약간의 시간이 걸릴 수 있습니다 (그리고 MySQL은 악의적으로 불행히도 그것들은 다소 시간이 걸릴 것입니다 (마스터에서 전체 데이터베이스를 다시 복사하십시오). 매우 빠른 잠금 / 스냅 샷을 수행하고 스냅 샷 내용을 슬레이브로 재 동기화 할 수 있도록 MySQL을 LVM에 배치하는 것과 같이 마스터에 재 동기화의 영향을 제한하는 트릭이 있지만 궁극적으로 재 동기화가 빨라질 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.