新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Threadpool參數(shù)引起的程序連接數(shù)據(jù)庫(kù)響應(yīng)慢
數(shù)據(jù)庫(kù)版本:percona-MySQL 5.6.16
在很長(zhǎng)一段時(shí)間,都會(huì)出現(xiàn)程序連接數(shù)據(jù)庫(kù),出現(xiàn)響應(yīng)慢的情況,正常在幾到幾十毫秒之間,但是偶爾會(huì)出現(xiàn)上百毫秒的情況;
開(kāi)始由于開(kāi)發(fā)重新設(shè)置并調(diào)整過(guò)程序連接池,一直懷疑是連接池的問(wèn)題,但是問(wèn)題依舊;
因?yàn)槭褂玫陌姹臼莗ercona-mysql 5.6.16 并且使用了數(shù)據(jù)庫(kù)連接池。
Thread Pool根據(jù)參數(shù)thread_pool_size被分為若干個(gè)group,每個(gè)group維護(hù)client 發(fā)起的 connections,當(dāng)MySQL建立 connection 時(shí),
MySQL 根據(jù)connection的thread id 對(duì)thread_pool_size取模,將connection 發(fā)起的sql 語(yǔ)句分配到對(duì)應(yīng)的group。每個(gè)group的最大worker
數(shù)量為thread_pool_oversubscribe+1。若worker達(dá)到最大數(shù)量后還是不足以處理回話請(qǐng)求,則連接在本group上等待,導(dǎo)致sql 語(yǔ)句的rt 增大;
因此將thread_pool_oversubscribe參數(shù)調(diào)大,但是問(wèn)題依舊;
檢查thread_cache_size,服務(wù)器內(nèi)存大小為64G,thread_cache_size=128;
每建立一個(gè)連接,都需要一個(gè)線程來(lái)與之匹配,此參數(shù)用來(lái)緩存空閑的線程,以至不被銷(xiāo)毀,如果線程緩存中有空閑線程,這時(shí)候如果建立新連接,MYSQL就會(huì)很快的響應(yīng)連接請(qǐng)求;
show status like '%thread%';
Variable_name Value
Threads_cached 0
Threads_connected 219
Threads_created 655068
Threads_running 48
使用 show status查看當(dāng)前mysql連接情況:
SHOW STATUS WHERE Variable_name LIKE '%Thread%';
Threads_cached :代表當(dāng)前此時(shí)此刻線程緩存中有多少空閑線程。
Threads_connected :代表當(dāng)前已建立連接的數(shù)量,因?yàn)橐粋€(gè)連接就需要一個(gè)線程,所以也可以看成當(dāng)前被使用的線程數(shù)。
Threads_created :代表從最近一次服務(wù)啟動(dòng),已創(chuàng)建線程的數(shù)量。
Threads_running :代表當(dāng)前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時(shí)候連接已建立,但是連接處于sleep狀態(tài),這里相對(duì)應(yīng)的線程也是sleep狀態(tài)。
最好將thread_cache_size設(shè)置成與threads_connected一樣。
show variables like '%thread%';
+-----------------------------------------+-----------------+
| Variable_name | Value |
+-----------------------------------------+-----------------+
| innodb_purge_threads | 1 |
| innodb_read_io_threads | 4 |
| innodb_thread_concurrency | 0 |
| innodb_thread_sleep_delay | 10000 |
| innodb_write_io_threads | 4 |
| max_delayed_threads | 20 |
| max_insert_delayed_threads | 20 |
| myisam_repair_threads | 1 |
| performance_schema_max_thread_classes | 50 |
| performance_schema_max_thread_instances | -1 |
| pseudo_thread_id | 8735851 |
| thread_cache_size | 128 |
| thread_concurrency | 24 |
| 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 | 100000 |
| thread_pool_oversubscribe | 40 |
| thread_pool_size | 12 |
| thread_pool_stall_limit | 500 |
| thread_stack | 262144 |
| thread_statistics | OFF |
+-----------------------------------------+-----------------+
可以不斷刷新,如果Threads_cached = 0 且 Threads_created 不斷增大,那么當(dāng)前thread_cache_size的值設(shè)置要改大,改到 Threads_connected 值左右,
再結(jié)合物理內(nèi)存 1G —> 8;2G —> 16; 3G —> 32; >3G —> 64 二個(gè)情況綜合考慮一下值,將thread_cache_size改為512;
注譯:
Threads_cached :代表當(dāng)前此時(shí)此刻線程緩存中有多少空閑線程。
Threads_connected :代表當(dāng)前已建立連接的數(shù)量,因?yàn)橐粋€(gè)連接就需要一個(gè)線程,所以也可以看成當(dāng)前被使用的線程數(shù)。
Threads_created :代表從最近一次服務(wù)啟動(dòng),已創(chuàng)建線程的數(shù)量。
Threads_running :代表當(dāng)前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時(shí)候連接已建立,但是連接處于sleep狀態(tài),這里相對(duì)應(yīng)的線程也是sleep狀態(tài)。
修改thread_cache_size為512后,重新測(cè)試程序連接數(shù)據(jù)庫(kù)響應(yīng)時(shí)間,速度極快,不再出現(xiàn)程序連接數(shù)據(jù)庫(kù)響應(yīng)慢的情況!
新聞名稱(chēng):Threadpool參數(shù)引起的程序連接數(shù)據(jù)庫(kù)響應(yīng)慢
鏈接URL:http://fisionsoft.com.cn/article/pcjope.html
在很長(zhǎng)一段時(shí)間,都會(huì)出現(xiàn)程序連接數(shù)據(jù)庫(kù),出現(xiàn)響應(yīng)慢的情況,正常在幾到幾十毫秒之間,但是偶爾會(huì)出現(xiàn)上百毫秒的情況;
開(kāi)始由于開(kāi)發(fā)重新設(shè)置并調(diào)整過(guò)程序連接池,一直懷疑是連接池的問(wèn)題,但是問(wèn)題依舊;
因?yàn)槭褂玫陌姹臼莗ercona-mysql 5.6.16 并且使用了數(shù)據(jù)庫(kù)連接池。
Thread Pool根據(jù)參數(shù)thread_pool_size被分為若干個(gè)group,每個(gè)group維護(hù)client 發(fā)起的 connections,當(dāng)MySQL建立 connection 時(shí),
MySQL 根據(jù)connection的thread id 對(duì)thread_pool_size取模,將connection 發(fā)起的sql 語(yǔ)句分配到對(duì)應(yīng)的group。每個(gè)group的最大worker
數(shù)量為thread_pool_oversubscribe+1。若worker達(dá)到最大數(shù)量后還是不足以處理回話請(qǐng)求,則連接在本group上等待,導(dǎo)致sql 語(yǔ)句的rt 增大;
因此將thread_pool_oversubscribe參數(shù)調(diào)大,但是問(wèn)題依舊;
檢查thread_cache_size,服務(wù)器內(nèi)存大小為64G,thread_cache_size=128;
每建立一個(gè)連接,都需要一個(gè)線程來(lái)與之匹配,此參數(shù)用來(lái)緩存空閑的線程,以至不被銷(xiāo)毀,如果線程緩存中有空閑線程,這時(shí)候如果建立新連接,MYSQL就會(huì)很快的響應(yīng)連接請(qǐng)求;
show status like '%thread%';
Variable_name Value
Threads_cached 0
Threads_connected 219
Threads_created 655068
Threads_running 48
使用 show status查看當(dāng)前mysql連接情況:
SHOW STATUS WHERE Variable_name LIKE '%Thread%';
Threads_cached :代表當(dāng)前此時(shí)此刻線程緩存中有多少空閑線程。
Threads_connected :代表當(dāng)前已建立連接的數(shù)量,因?yàn)橐粋€(gè)連接就需要一個(gè)線程,所以也可以看成當(dāng)前被使用的線程數(shù)。
Threads_created :代表從最近一次服務(wù)啟動(dòng),已創(chuàng)建線程的數(shù)量。
Threads_running :代表當(dāng)前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時(shí)候連接已建立,但是連接處于sleep狀態(tài),這里相對(duì)應(yīng)的線程也是sleep狀態(tài)。
最好將thread_cache_size設(shè)置成與threads_connected一樣。
show variables like '%thread%';
+-----------------------------------------+-----------------+
| Variable_name | Value |
+-----------------------------------------+-----------------+
| innodb_purge_threads | 1 |
| innodb_read_io_threads | 4 |
| innodb_thread_concurrency | 0 |
| innodb_thread_sleep_delay | 10000 |
| innodb_write_io_threads | 4 |
| max_delayed_threads | 20 |
| max_insert_delayed_threads | 20 |
| myisam_repair_threads | 1 |
| performance_schema_max_thread_classes | 50 |
| performance_schema_max_thread_instances | -1 |
| pseudo_thread_id | 8735851 |
| thread_cache_size | 128 |
| thread_concurrency | 24 |
| 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 | 100000 |
| thread_pool_oversubscribe | 40 |
| thread_pool_size | 12 |
| thread_pool_stall_limit | 500 |
| thread_stack | 262144 |
| thread_statistics | OFF |
+-----------------------------------------+-----------------+
可以不斷刷新,如果Threads_cached = 0 且 Threads_created 不斷增大,那么當(dāng)前thread_cache_size的值設(shè)置要改大,改到 Threads_connected 值左右,
再結(jié)合物理內(nèi)存 1G —> 8;2G —> 16; 3G —> 32; >3G —> 64 二個(gè)情況綜合考慮一下值,將thread_cache_size改為512;
注譯:
Threads_cached :代表當(dāng)前此時(shí)此刻線程緩存中有多少空閑線程。
Threads_connected :代表當(dāng)前已建立連接的數(shù)量,因?yàn)橐粋€(gè)連接就需要一個(gè)線程,所以也可以看成當(dāng)前被使用的線程數(shù)。
Threads_created :代表從最近一次服務(wù)啟動(dòng),已創(chuàng)建線程的數(shù)量。
Threads_running :代表當(dāng)前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時(shí)候連接已建立,但是連接處于sleep狀態(tài),這里相對(duì)應(yīng)的線程也是sleep狀態(tài)。
修改thread_cache_size為512后,重新測(cè)試程序連接數(shù)據(jù)庫(kù)響應(yīng)時(shí)間,速度極快,不再出現(xiàn)程序連接數(shù)據(jù)庫(kù)響應(yīng)慢的情況!
新聞名稱(chēng):Threadpool參數(shù)引起的程序連接數(shù)據(jù)庫(kù)響應(yīng)慢
鏈接URL:http://fisionsoft.com.cn/article/pcjope.html