MySQL高级 - 并发参数调整
Mysql并發(fā)參數(shù)調(diào)整
從實(shí)現(xiàn)上來說,MySQL Server 是多線程結(jié)構(gòu),包括后臺(tái)線程和客戶服務(wù)線程。多線程可以有效利用服務(wù)器資源,提高數(shù)據(jù)庫(kù)的并發(fā)性能。在Mysql中,控制并發(fā)連接和線程的主要參數(shù)包括 max_connections、back_log、thread_cache_size、table_open_cahce。
- max_connections
采用max_connections 控制允許連接到MySQL數(shù)據(jù)庫(kù)的最大數(shù)量,默認(rèn)值是 151。如果狀態(tài)變量 connection_errors_max_connections 不為零,并且一直增長(zhǎng),則說明不斷有連接請(qǐng)求因數(shù)據(jù)庫(kù)連接數(shù)已達(dá)到允許最大值而失敗,這是可以考慮增大max_connections 的值。
Mysql 最大可支持的連接數(shù),取決于很多因素,包括給定操作系統(tǒng)平臺(tái)的線程庫(kù)的質(zhì)量、內(nèi)存大小、每個(gè)連接的負(fù)荷、CPU的處理速度,期望的響應(yīng)時(shí)間等。在Linux 平臺(tái)下,性能好的服務(wù)器,支持 500-1000 個(gè)連接不是難事,需要根據(jù)服務(wù)器性能進(jìn)行評(píng)估設(shè)定。
- back_log
back_log 參數(shù)控制MySQL監(jiān)聽TCP端口時(shí)設(shè)置的積壓請(qǐng)求棧大小。如果MySql的連接數(shù)達(dá)到max_connections時(shí),新來的請(qǐng)求將會(huì)被存在堆棧中,以等待某一連接釋放資源,該堆棧的數(shù)量即back_log,如果等待連接的數(shù)量超過back_log,將不被授予連接資源,將會(huì)報(bào)錯(cuò)。5.6.6 版本之前默認(rèn)值為 50 , 之后的版本默認(rèn)為 50 + (max_connections / 5), 但最大不超過900。
如果需要數(shù)據(jù)庫(kù)在較短的時(shí)間內(nèi)處理大量連接請(qǐng)求, 可以考慮適當(dāng)增大back_log 的值。
- table_open_cache
該參數(shù)用來控制所有SQL語(yǔ)句執(zhí)行線程可打開表緩存的數(shù)量, 而在執(zhí)行SQL語(yǔ)句時(shí),每一個(gè)SQL執(zhí)行線程至少要打開 1 個(gè)表緩存。該參數(shù)的值應(yīng)該根據(jù)設(shè)置的最大連接數(shù) max_connections 以及每個(gè)連接執(zhí)行關(guān)聯(lián)查詢中涉及的表的最大數(shù)量來設(shè)定 :
? max_connections x N ;
- thread_cache_size
為了加快連接數(shù)據(jù)庫(kù)的速度,MySQL 會(huì)緩存一定數(shù)量的客戶服務(wù)線程以備重用,通過參數(shù) thread_cache_size 可控制 MySQL 緩存客戶服務(wù)線程的數(shù)量。
- innodb_lock_wait_timeout
該參數(shù)是用來設(shè)置InnoDB 事務(wù)等待行鎖的時(shí)間,默認(rèn)值是50ms , 可以根據(jù)需要進(jìn)行動(dòng)態(tài)設(shè)置。對(duì)于需要快速反饋的業(yè)務(wù)系統(tǒng)來說,可以將行鎖的等待時(shí)間調(diào)小,以避免事務(wù)長(zhǎng)時(shí)間掛起; 對(duì)于后臺(tái)運(yùn)行的批量處理程序來說, 可以將行鎖的等待時(shí)間調(diào)大, 以避免發(fā)生大的回滾操作。
總結(jié)
以上是生活随笔為你收集整理的MySQL高级 - 并发参数调整的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL高级 - 内存优化 - Inn
- 下一篇: MySQL高级 - 锁 - 锁的概述及分