首頁  >  文章  >  資料庫  >  看看MySQL並發參數調整

看看MySQL並發參數調整

coldplay.xixi
coldplay.xixi轉載
2021-02-03 09:22:412357瀏覽

看看MySQL並發參數調整

免費學習推薦:mysql影片教學

Mysql並發參數調整

從實作上來說,MySQL Server 是多執行緒結構,包括後台執行緒和客戶服務執行緒。多執行緒可以有效利用伺服器資源,提高資料庫的並發效能。在Mysql中,控制並發連線和執行緒的主要參數包括 max_connections、back_log、thread_cache_size、table_open_cahce。

1、max_connections

採用max_connections 控制允許連接到MySQL資料庫的最大數量,預設值為 151如果狀態變數 connection_errors_max_connections 不為零,並且一直增長,則表示不斷有連接請求因資料庫連接數已達到允許最大值而失敗,這是可以考慮增大max_connections 的值。
說明:當同時連線的請求超過151個之後,就沒有可用的連線來處理客戶端的請求了。後面進來的這些連結都會處於等待狀態。等待MySQL連線被釋放,如果沒有空閒的連接,就會要求逾時

Mysql 最大可支援的連接數,取決於許多因素,包括給定作業系統平台的執行緒庫的品質、記憶體大小、每個連線的負載、CPU的處理速度,期望的反應時間等。在Linux 平台下,效能好的伺服器,支援 500-1000 個連線不是難事,需要根據伺服器效能進行評估設定

2、back_log

back_log 參數控制MySQL監聽TCP埠時設定的積壓請求堆疊大小。如果MySql的連線數達到max_connections時,新來的請求將會被存在堆疊中,以等待某一連線釋放資源,該堆疊的數量即back_log,如果等待連線的數量超過back_log,將不會被授予連線資源,將會報錯。 5.6.6 版本之前預設值為 50 , 之後的版本預設為 50 (max_connections / 5), 但最大不超過900。
說明:當客戶端同時發過來的請求並發量大於151,後面過來的請求處於等待的狀態。那麼等待的連線數可以達到back_log。這些新來的請求就會被儲存在堆疊當中。以等待某個連線被釋放。該堆疊的數量就透過back_log來設定。

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

3、table_open_cache

此參數用來控制所有SQL語句執行緒可開啟表格快取的數量, 而在執行SQL語句時,每一個SQL執行緒至少要開啟1 個表格快取。此參數的值應該根據設定的最大連接數max_connections 以及每個連接執行關聯查詢中涉及的表的最大數量來設定

## max_connections x N ; 說明:這個不是針對某個會話的,這個是針對於所有客戶端執行執行緒。表格快取的數量,也就是每個SQL語句中操作表的個數,例如一條SQL語句一般至少操作一張表。操作一張表,就有1個表緩存,操作多張表,就有多個表緩存。

mysql> show variables like 'table_open_cache%';+----------------------------+-------+| Variable_name              | Value |+----------------------------+-------+| table_open_cache           | 431   || table_open_cache_instances | 16    |+----------------------------+-------+2 rows in set (0.06 sec)

4、thread_cache_size

為了加快連接資料庫的速度,MySQL 會快取一定數量的客戶服務執行緒以備重複使用,透過參數thread_cache_size 控制MySQL 快取客戶服務執行緒的數量。 說明:這就等於在MySQL的服務端開啟了一個執行緒池,客戶端有請求過來,我們在執行緒池中拿出一個執行緒來執行任務處理。

mysql> show variables like 'thread_cache_size%';+-------------------+-------+| Variable_name     | Value |+-------------------+-------+| thread_cache_size | 8     |+-------------------+-------+1 row in set (0.00 sec)
總共快取了8個執行緒資訊。

5、innodb_lock_wait_timeout

此參數是用來設定InnoDB 交易等待行鎖的時間,預設值為50ms , 可以根據需要進行動態設定。對於需要快速回饋的業務系統來說,可以將行鎖的等待時間調小,以避免事務長時間掛起; 對於後台運行的批量處理程序來說, 可以將行鎖的等待時間調大, 以避免發生大的回滾操作。

說明:如果在比較快速回應的業務系統中,如果沒有拿到行鎖,就直接報錯即可,不需要讓交易長時間回應。

可以看到,預設逾時時間為50ms

mysql> show variables like 'innodb_lock_wait_timeout%';+--------------------------+-------+| Variable_name            | Value |+--------------------------+-------+| innodb_lock_wait_timeout | 50    |+--------------------------+-------+1 row in set (0.01 sec)
   

     | Value | ------------------------- - ------- | innodb_lock_wait_timeout | 50    | -------------------------- ------- 1 row in set (0.01 sec)

更多相關免費學習推薦:mysql教學(影片)

以上是看看MySQL並發參數調整的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除