http://www.mysqlperformanceblog.com/2013/03/16/simcity-outages-traffic-control-and-thread-pool-for-mysql/
這篇文章生動的描述了線程池的妙處,它可以解決高並發資料庫效能下降。
試想著如果不設定交通號誌,沒有交警的指揮,讓其車輛肆意行駛,那麼造成的後果就是交通癱瘓,誰都搶行,結果誰都過不去,堵死了。那麼就必須採取一定的措施,先允許存取一部分車輛,後續的就排隊等待,直到交通暢通。——這就是線程池的作用。
每個用戶端串連MySQL執行SQL語句會建立一個線程。一旦串連數量的增加超過某特定點效能將會下降。該特性使伺服器保持最佳效能,即使大量的用戶端串連,通過使用線程池伺服器線程的數量將減少,這將減少CPU環境切換和熱鎖的競爭。
下面我用虛擬機器做了一次壓力測試。
虛擬機器設定:
root@percona1:~/percona-toolkit-2.2.4# pt-summary # Percona Toolkit System Summary Report ###################### Date | 2014-02-04 01:51:35 UTC (local TZ: CST +0800) Hostname | percona1 Uptime | 1:48, 3 users, load average: 0.62, 9.56, 17.38 System | VMware, Inc.; VMware Virtual Platform; vNone (Other) Service Tag | VMware-56 4d 4e ce 5e 61 55 0d-cb 94 85 3f 9e 9a 3e 79 Platform | Linux Release | Debian GNU/Linux 7.3 (wheezy) (wheezy) Kernel | 3.2.0-4-amd64 Architecture | CPU = 64-bit, OS = 64-bit Threading | NPTL 2.13 SELinux | No SELinux detected Virtualized | VMWare # Processor ################################################## Processors | physical = 2, cores = 4, virtual = 4, hyperthreading = no Speeds | 4x1895.729 Models | 4xIntel(R) Core(TM) i3-3227U CPU @ 1.90GHz Caches | 4x3072 KB # Memory ##################################################### Total | 996.0M Free | 69.8M Used | physical = 926.2M, swap allocated = 1.3G, swap used = 439.8M, virtual = 1.3G Buffers | 2.4M Caches | 20.0M Dirty | 384 kB UsedRSS | 810.2M Swappiness | 60 DirtyPolicy | 20, 10 DirtyStatus | 0, 0 |
壓力測試參數:
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --max-requests=10000 --num-threads=1000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-db=test --mysql-socket=/tmp/mysql.sock run
並發1000個串連,最大請求數為10000。
結果
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140209/235532HR-0.jpg" title="線程池.jpg" alt="wKiom1Lw7iLSeWNIAAENKPBSU0I517.jpg" />
很明顯開啟了線程池TPS要好於未開啟的。
註:MySQL5.5和5.6隻有在企業版付費)才支援,社區版是沒有這個功能的。
參考:http://www.percona.com/doc/percona-server/5.5/performance/threadpool.html
附Percona官方測試:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140209/23553252I-1.jpg" title="thread_pool.p2.io_bound.jpg" alt="wKioL1LzpqnznG4yAAG4a-mK3oQ663.jpg" />
http://www.mysqlperformanceblog.com/2014/02/04/16000-active-connections-percona-server-continues-work-others-die/
附MySQL官方測試:
MySQL線程池
(僅適用於商業版)
為滿足不斷增長的使用者、查詢和資料通訊量對效能和擴充性的持續需求,MySQL企業版提供了MySQL線程池。線程池提供了一種具有高度擴充性的線程處理模型,旨在減少管理客戶串連和語句執行線程的開銷。服務不斷增長的使用者串連數量及大通訊量的線上應用效能和擴充性持續改善效果如所示:
60倍提高擴充性:讀/寫650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140209/2355325106-2.jpg" title="1.JPG" alt="wKiom1Lx2EOCsPSEAAFBVnRIscw183.jpg" />
與MySQL社區版伺服器相比,帶MySQL線程池的MySQL企業版可提供60倍的擴充性.
18倍提高擴充性:唯讀
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140209/2355321Z2-3.jpg" title="2.JPG" alt="wKiom1Lx2HSj7KypAAFOgnMvtAk532.jpg" />
與MySQL社區版伺服器相比,帶MySQL線程池的MySQL企業版可提供18倍的擴充性.
配置:
MySQL 5.6.11
Oracle Linux 6.3, Unbreakable Kernel 2.6.32
4 sockets, 24 cores, 48 Threads
Intel(R) Xeon E7540 2GHz CPUs
512GB DDR RAM
http://www.mysql.com/products/enterprise/scalability.html
本文出自 “賀春暘的技術專欄” 部落格,請務必保留此出處http://hcymysql.blog.51cto.com/5223301/1356326