Views: 2702
前兩篇分別講到MaxScale及kingshard,但各有其優缺點
MaxScale : 支援Replication及Galera Cluster,但不支援Connection Pool
kingshard : 支援Replication及Connection Pool,但不支援Galera Cluster
如果今天我們想使用Galera Cluster又希望有Connection Pool呢? 那就使用MariaDB的Thread Pool。MariaDB從5.5版本開始支援Thread Pool,在MariaDB 5.5以前,MariaDB採用的是one-thread-per-connection模式,讓我們來看看主要的差異吧。
one-thread-per-connection
one-thread-per-connection採用的是一條connection對應一條thread,在一個運作穩定的production中,並不會碰到太大的問題,但在DB面臨高併發(瞬間的高流量)及短連接的情況下, MariaDB會因為Threads_cached不足而導致新的Threads不斷被建立, 因此會造成context-switch過於頻繁導致系統負載拉高及執行效率變差。

Thread Pool
Thread Pool採用的是事先建立一定數量的Thread,當有connection請求時,Thread Pool分配一條Thread處理連線請求,請求結束後,這條Thread又被分配處理其它的連線請求,這種方式減少了Thread不斷被建立,也避免了一條Thread對應一條connection的連線狀況,因此能減少context-switch,進而提升執行效率,但Thread Pool的設定值要避免過大,過大就等於one-thread-per-connection,合理的Thread Pool設定值應該是比client端的連線數量少一點,這樣才能使DB維持在一定的性能上

one-thread-per-connection VS Thread Pool
Thread類型 | 適用場景 | Thread執行單位 |
one-thread-per-connection | DB連線數穩定 | connection |
Thread Pool | DB面臨高併發及短連接 | sql statement |
Connection Pool VS Thread Pool
Pool類型 | 主要優化 | 功用 |
Connection Pool | client端 | 減少建立connection的時間及佔用的連線資源 |
Thread Pool | server端 | 減少Thread重覆建立及降低context-switch |