Percona 5.6 thread pool說明及使用
本文主要簡單介紹一下thread pool,因為目前網上的文章都只是針對thread pool的原理說明,沒有實際的使用示範。因此本會針對thread pool的使用做一些說明。
歡迎轉載,請註明作者、出處。
作者:張正
blog:http://space.itpub.net/26355921
QQ:176036317
如有疑問,歡迎聯絡。
Thread pool是什麼:
MySQL是每個連線上來都要建立一個執行緒來執行語句。這樣每一個新的連線進來即會建立一個新的執行緒,這種動作對MySQL本身壓力比較大。Threadpool是提供一種執行緒代理的模型執行每個連線的語句。而MySQL內部維護一個可能接受的執行緒總數,減少執行緒太多在CPU切換等方面的壓力。
使用Threadpool的好處:
1.使用執行緒代理的模型在連線數已知可控的情況下,提前建立好過執行緒並利用作業系統的threadpool技術維護,能減少很多開銷
2.儘可能的使用作業系統的執行緒方面的管理,把執行緒管理開銷降到最低
3. 利用thread_pool_max_threads控制資源使用
使用方法:
目前支援threadpool的有MariaDB, Percona, 官方MySQL 5.5的一個收費plugin功能。percona與mariadb配置啟用:
在my.cnf 中新增引數:
[mysqld]
#thread pool
thread_handling=pool-of-threads
thread_pool_max_threads=100 #設定thread pool執行緒的上限值(同時running的最大執行緒數為100)
thread_pool_size=50 #thread pool中執行緒數的下限值
mysql> show variables like 'thread%';
+-------------------------------+-----------------+
| Variable_name | Value |
+-------------------------------+-----------------+
| thread_cache_size | 28 |
| thread_concurrency | 10 |
| thread_handling |pool-of-threads |
| thread_pool_high_prio_mode | transactions |
| thread_pool_high_prio_tickets | 4294967295 |
| thread_pool_idle_timeout | 60 |
| thread_pool_max_threads | 120 |
| thread_pool_oversubscribe | 3 |
| thread_pool_size | 50 |
| thread_pool_stall_limit | 500 |
| thread_stack | 262144 |
| thread_statistics | OFF |
+-------------------------------+-----------------+
Thread_pool_stall_limit:以10ms為單位,預設60ms範圍值4-600,每個語句的時間片大小,一旦耗完則掛起將CPU交於其他執行緒
空閒時:
mysql> show global status like 'thread%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Threadpool_idle_threads | 51 |
| Threadpool_threads | 52 |
| Threads_cached | 0 |
| Threads_connected | 22 |
| Threads_created | 148 |
| Threads_running | 1 |
+-------------------------+-------+
6 rows in set (0.00 sec)
系統中22個執行緒數(Threads_connected)為zabbix的連線,雖然目前總連線數為22,但是thread pool中的執行緒數(Threadpool_threads)為52。
該值的最小值決定於引數thread_pool_size 的值。
目前running執行緒數為1,空閒執行緒數為 51.
sysbench增加連線數:
使用sysbench建立1000個執行緒進行讀寫操作,同時還有22個zabbix的連線,共1022個連線:
sysbench --num-threads=1000 --test=oltp --mysql-user=root --mysql-password=root --mysql-table-engine=innodb --init-rng=on --oltp-table-size=19390000 --max-time=$RT --max-requests=20000 --mysql-db=test --mysql-socket=/var/lib/mysql/mysql.sock run > sysbench.log
mysql> show global status like 'thread%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Threadpool_idle_threads | 46 | -->目前thread pool中還剩餘46個空閒thread
| Threadpool_threads | 120 | -->thread pool中允許同時running的最大執行緒數
| Threads_cached | 0 |
| Threads_connected | 1022 | -->目前資料庫一共有1022個連線
| Threads_created | 476 |
| Threads_running | 87 | -->目前正在執行的執行緒數為87
+-------------------------+-------+
6 rows in set (0.37 sec)
資料庫中 Threadpool_idle_threads(46) + Threads_running(87) 之和(133) 大致是與 Threadpool_threads(120) 的值相等的,
而 Threadpool_threads 的最大值是受限於 引數thread_pool_max_threads的值。
系統中總共連線數有1022,而running的執行緒數只有87,還有46空閒,是因為作業系統的CPU已經耗盡。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26355921/viewspace-1171800/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL5.6 PERFORMANCE_SCHEMA 說明MySqlORM
- mysql thread status 解釋說明MySqlthread
- MySQL 5.6 sql_mode常用值說明MySql
- Hystrix Thread Pool 解析thread
- DUBBO Thread pool is EXHAUSTED!thread
- mysql 的thread poolMySqlthread
- Kibana安裝及使用說明
- percona-tool文件說明(6)- 系統類
- Percona MySQL 5.6 HINT介紹MySql
- vue-cli@3.0 使用及配置說明Vue
- Object-c Block的使用及說明ObjectBloC
- Memcached常用命令及使用說明
- 使用說明
- ELK 之 Kibana 安裝及使用說明
- Qtum智慧合約使用方法及說明QT
- C++檔案說明及使用方法C++
- mysql常用引數使用說明及查詢MySql
- Thread類及使用thread
- percona save/restore buffer pool特性記錄REST
- 前端meta標籤內容定義及使用說明,meta詳細說明,meta標籤使用前端
- WebApiClientCore使用說明WebAPIclient
- QLExpress使用說明Express
- postman 使用說明Postman
- Sqlite使用說明SQLite
- cmake使用說明
- certbot 使用說明
- percona server5.6新功能記錄Server
- PHP CS Fixer 的使用及 PHP Storm 配置說明PHPORM
- 資料泵的TRANSFORM引數說明及使用ORM
- Thread interrupt() 執行緒中斷的詳細說明thread執行緒
- oracle asm自動儲存使用及管理說明(下)OracleASM
- oracle asm自動儲存使用及管理說明(上)OracleASM
- JavaScript介紹及說明(01)JavaScript
- PB及ASA的打包說明
- JPA EntityManager使用說明
- wc 命令使用說明
- oracle orapwd使用說明Oracle
- Jupiter 使用說明