MySQL 的 replication 一直都是 single thread。即使 slave 有能力同時跑多個 SQL query 也必須是 single thread,這是為了資料的正確性而考量,但產生了一些缺點:
- 負荷量大的時候容易產生 replication lag。
- replication thread 只能用一顆 CPU resource。
現在在 MySQL 5.1 上有放出 patch 讓大家測試 multi-thread replication 了:「Feature Preview: Multi-threaded Slave」,雖然有不少限制,但是總是個開始。
依照文件,主要的限制包括:
- 只支援 transaction storage engine (像是 InnoDB)。
- 只有 row-based events 才有辦法平行化。
- isolation level 必須是 SERIALIZABLE。
另外,目前主要的限制還包括:(未來有機會移除)
- 目前 table 的 primary key 必須是 integer。
- 目前只有 INSERT 與 DELETE 能被平行處理。
- 當 slave 在 commit 時 crash 不能保證全部都會恢復。(喂喂 XD)
有興趣的人可以測測效能,看起來還要花一段時間開發。