리플리케이션을 최근 적용했습니다..

뭐 좋더군요.. 좋긴 좋은데...

근데 일반적으로 인터넷에 보이는 글들에서 말하는

MySQL 리플리케이션의 활용 권장안이란게 이렇더군요.

 

A (마스터) -> B(슬레이브) 의 1:1 구조

 

A는 Insert/Update/Delete 전용

B는 Select 전용

 

이렇게 해서 부하를 분산시킨다고 하는데..

이거 부하가 진짜 분산되기는 분산되나요...??

그냥 말로만 부하가 분산된다고 하지 벤치마크 자료 하나 없고...

 

이론적으로 생각해봐도...

리플리케이션이라는게 결국 마스터에서 발생했던 쿼리를

바이너리 로그 형태로 가져와서 슬레이브에서도 그대로 똑같이

실행해서 같은 상태를 유지한다는 건데...

 

즉 A에서 이뤄진 Insert/Update/Delete 쿼리들은 B에서도

똑같이 발생합니다. 

뭐 쿼리를 그대로 가져와서 실행하는 경우도 있고 변화된 값만

가져오는 경우도 있고 나름대로 경우에 따라 최적화를 하긴

하는거 같더군요.

하지만 그런 수준의 최적화가 얼마나 의미가 있을지...

어차피 바이너리 로그를 생성하고, 그걸 네트웍으로 실시간으로

옮겨서 다시 처리하는데 걸리는 부하를 생각하면 그게 그거라고 치고

DB서버가 달랑 1대 있어서 그 1대로 Select/Insert/Update/Delete를

모두 하는 경우와 슬레이브B에 걸리는 부하에 있어서

차이가 그다지 나지 않을거란거죠... 슬레이브B도 Select만 한다고

하지만 사실은 Select/Insert/Update/Delete 모두 하고 있으니까요..

저런 식이 실제 무슨 의미가 있을지 모르겠습니다.

그나마 부하 분산 효과를 누릴려면 마스터와 슬레이브 양쪽 모두에게

Select를 걸어서 Select를 분산시키면.. 좀 효과가 나긴 하겠네요

  • profile
    insert/update/delete 쿼리가 얼마 되지 않는다면 select를 분산시키는 것만으로도 효과를 볼 수 있지요. 저번에 말씀하신 테이블 압축 기능도 그렇고, 이런 기본적인 부하 감소 또는 분산 기법들은 대부분 insert/update/delete 쿼리보다 select 쿼리가 압도적으로 많다는 가정 하에 이루어집니다.

    요즘 MariaDB에서 밀어주고 있는 Galera multi-master 리플리케이션 기능도 마찬가지예요. insert/update/delete 쿼리가 많으면 클러스터 내의 서버들이 모두 처리할 때까지 클러스터 전체가 굼벵이가 되어 버립니다. ㅋㅋㅋ