調整 MySQL 併發相關的引數

2021-09-14 08:21:06 字數 1536 閱讀 1834

mysql server 是多執行緒結構,包括後台執行緒和客戶服務執行緒。多執行緒可以有效利用伺服器資源,提高資料庫的併發效能。在 mysql 中,控制併發連線和執行緒的主要引數包括 max_connections、back_log、thread_cache_size 以及 table_open_cache 等。

引數 max_connections 控制允許連線到 mysql 資料庫的最大數量。如果狀態變數 connection_errors_max_connections 不為零,並且一直增長,就說明不斷有連線請求因資料庫連線數已達到最大允許的值而失敗,應考慮增大max_connections 的值。

mysql 最大可支援的資料庫連線取決於很多因素,包括給定作業系統平台執行緒庫的質量、記憶體大小、每個連線的符合以及期望的響應時間等。在 linux 平台下,mysql 支援 500~1000 個連線不是難事,如果記憶體足夠,不考慮響應時間,甚至能達到上萬個連線。而在 windows 平台下,受其所用執行緒庫的影響,最大連線數有以下限制:

(open tables * 2 + open connections) < 2048

每個session 操作 mysql 資料庫表都需要占用檔案描述符,資料庫連線本身也要占用檔案描述符,因此,在增大 max_connections 時,也要注意評估 open-files-limit (檔案描述符)的設定是否夠用。

back_log 引數控制 mysql 監聽 tcp 埠時設定的積壓請求棧大小,5.6.6版本以前的預設值是 50,5.6.6 版本以後的預設值是 50 + (max_connections/5),但最大不能超過 900。

如果需要資料庫在較短時間內處理大量連線請求,可以考慮適當增大 back_log 的值。

每乙個 sql 執行執行緒至少都要開啟乙個表快取,引數 table_open_cache 控制所有 sql 執行執行緒可開啟表快取的數量。這個引數的值應根據最大連線數 max_connections 以及每個連線執行關聯查詢中所涉及表的最大個數(用 n 表示)來設定:

max_connection * n

在未執行 flush tables 命令的情況下,如果 mysql 狀態值 opened_tables 的值較大,就說明 table_open_cache 設定的太小,應適當增大。增大 table_open_cache 的值,會增加 mysql 對檔案描述符的使用量,因此,也要注意評估 open-files-limit 的設定是或否夠用。

為加快連線資料庫的速度,mysql 會快取一定數量的客戶服務執行緒以備重用,通過引數 thread_cache_size 可控制 mysql 快取客戶端執行緒的數量。

可以通過計算執行緒 cache 的失效率 threads_created / connections 來衡量 thread_cahce_size 的設定是否合適,該值越接近 1,說明執行緒 cache 命中率越低,應考慮適當增加 thread_cahce_size 的值。

引數 innodb_lock_wait_timeout 可以控制 innodb 事務等待行鎖的時間,預設值是 50ms,可以根據需要動態設定。對於需要快速反饋的互動式應用,可以將行鎖等待超時時間調大,以避免發生大的回滾操作。

mysql 優化 調整mysql 併發相關引數

引數控制允許連線到mysql 資料庫的最大數量.預設值151.如果狀態變數connection errors max connections 不為零,並且一直在增長,說明不斷有連線請求因資料庫已達到最大允許的值而失敗.應考慮增大max connections 值.在增大max connections...

MySQL併發相關的引數

1 max connections 這個引數可提高併發連線數,即允許連線到mysql資料庫的最大數量。如果實驗mysql過程中遇到too many connections等問題,可提高這個值,此外我們還可以檢視 connection errors max connections 狀態變數值不為0,並...

13 MySql高階之併發引數調整

從實現上來說,mysql server 是多執行緒結構,包括後台執行緒和客戶服務執行緒。多執行緒可以有效利用伺服器資源,提高資料庫的併發效能。在mysql中,控制併發連線和執行緒的主要引數包括 max connections back log thread cache size table open...