2017-09-15 167 views
0

我有max_connections = 1000的mariadb。應用程序堆棧打開450個連接到數據庫,它被設計爲高度併發。工作量主要是INSERT/UPDATEs。當通過show processlist進行監控時,我注意到同時在數據庫中執行的活動查​​詢不超過11​​個。我認爲在我的情況下,一些mysql設置阻止了更多的併發性,但我無法弄清楚它們是什麼。控制併發性的mysql參數集是完全混淆的,很難看到其中的清晰度。我有這個:在MySQL中如何控制會話併發性?

MariaDB [(none)]> show variables like '%concurr%'; 
+----------------------------+--------+ 
| Variable_name    | Value | 
+----------------------------+--------+ 
| concurrent_insert   | ALWAYS | 
| innodb_commit_concurrency | 0  | 
| innodb_concurrency_tickets | 5000 | 
| innodb_thread_concurrency | 32  | 
| thread_concurrency   | 10  | 
+----------------------------+--------+ 

24個緩衝池實例,每個實例2GB和慢速GCP SSD永久磁盤。

最後一個參數折舊(基於我的研究)。應該改變什麼來提高mysql的併發性?

回答

1

重新thread_concurrency:

此變量已被棄用,在MySQL 5.7被去除。除非它們適用於Solaris 8或更早版本,否則只要您看到它,就應該從MySQL配置文件中刪除它。

所以,不要打擾改變它。

同時,我會說你的觀察結果是'正常的'。也就是說,你的450個連接的查詢速度非常快,所以當你看時,你碰巧看到的只有11個。

您是否在應用程序中看到任何意外的延遲?我懷疑不是。

你是否比別人更頻繁地看到一些特定的查詢?是否有任何一個出現在Time以上,比如說「2」?如果兩者之一出現,我們來看看查詢,再加上SHOW CREATE TABLE

是否有任何PROCESSLIST條目說Locked。如果是這樣,請查找最大的Time而不是Locked,並調查爲什麼它運行這麼久。

+0

有意想不到的延遲(我有單獨的問題在這裏:https://stackoverflow.com/questions/45764963/table-update-on-pk-and-otherother-field-in-mysql-is-sporadically-slow) 。但我很少看到時間> 0。它大多數很快。沒有狀態顯示鎖定,只有初始化或NULL –

+0

你經常看到超過11個非睡眠狀態嗎? –