使用MariaDB Thread Pool實現DB端的連接池

Views: 2702

前兩篇分別講到MaxScalekingshard,但各有其優缺點
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過於頻繁導致系統負載拉高及執行效率變差。

使用ELK觀察在高併發模式下使用one-thread-per-connection模式

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維持在一定的性能上

使用ELK觀察在高併發模式下使用thread pool模式

one-thread-per-connection   VS   Thread Pool

Thread類型 適用場景Thread執行單位
one-thread-per-connectionDB連線數穩定connection
Thread PoolDB面臨高併發及短連接sql statement

Connection Pool  VS  Thread Pool

Pool類型主要優化功用
Connection Poolclient端減少建立connection的時間及佔用的連線資源
Thread Poolserver端減少Thread重覆建立及降低context-switch

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *