Percona 的人寫了一篇「Percona Server: Improve Scalability with Percona Thread Pool」,提到關於 MySQL 在連線數很多時的效能。
傳統的作法是一個連線使用一個 thread,這種方法實做起來很簡單,但當連線數超過一定程度時就會因為共用資源的限制而變慢。
其中一種解決方法是引入 Thread Pool 架構,也就是 M 個 thread 處理 N 個連線。
Oracle 有提供商用版本叫做 Thread Pool Plugin,就如同名字,是以 plugin 形式存在。這個功能在 5.5 與 5.6 都有。
MariaDB 也有 open source 實做的 Thread pool。
而 Percona 則是使用 MariaDB 的版本。(原文是說有改善,不過 benchmark 並沒有列出來,我「猜」其實沒什麼改善...)
可以看到在多連線數時的效果相當好。在 MariaDB 的文件裡有提到會有改善的時機:
Threadpools are most efficient in situations where queries are relatively short and the load is CPU bound (OLTP workloads). If the workload is not CPU bound, you might still want to limit the number of threads to save memory for the database memory buffers.
query 相對短,而且是 CPU bound。
回頭看的時候發現 Percona Server 5.5 就有支援 Thread Pool 了,應該來測試看看效果如何...
One thought on “MySQL 上的 Thread Pool...”