Mysql查看狀態,連接數,線程數以及Mysql性能監控工具doDBA的使用以及優化


解決問題:

  • 怎樣查看Mysql最大連接數(max_connections)?怎樣修改max_connections?
  • 怎樣查看Mysql線程緩存池數量(thread_cache_size)?thread_cache_size的作用?優化?
  • 怎樣查看Mysql線程的狀態(Threads_cached/Threads_connected/Threads_running/Threads_running)?
  • 怎樣理解Threads_cached/Threads_connected/Threads_running/Threads_running?以及它們和並發量的關系?
  • 怎樣使用doDBA工具?

 

1. 怎樣查看Mysql最大連接數?怎樣修改?

1.1 查看MySQL最大連接數?

登錄Mysql:mysql -u username -p password

show variables like '%max_connections%';

 

1.2 修改MySQL最大連接數?

修改mysql的配置文件。

vi /etc/my.cnf

修改或添加:max_connections=1000(需要的值)

重啟mysql:systemctl restart mysqld

如果修改失敗,參見博客:MySQL 修改最大連接數(max_connections)失效,上限214問題

 

2.怎樣查看Mysql線程緩存池數量(thread_cache_size)?thread_cache_size的作用?優化?

2.1 查看

登錄mysql

show variables like '%thread_cache_size%';

 

2.2 理解

“每個Mysql客戶端連接都會在服務器進程中擁有一個線程,這個連接的查詢只會在這個單獨的線程中執行,該線程只能輪流在某個CPU核心或者CPU中運行。服務器會負責緩存線程,因此不需要為每一個新建的連接創建或者銷毀線程。”(來着《高性能MySQL》)

意思是如果Mysql客戶端新建一個連接,那么Mysql服務器就需要為這個連接創建一個線程。如果Mysql線程緩存池中有線程,那么就直接從緩存區刪除這個線程,並且把它分配給這個新的連接使用。節省了創建連接的開銷。當連接關閉時,如果線程緩存還有空間的話,MySQL又會把線程返回緩存。如果沒有空間,Mysql會銷毀這個線程。

 

2.3 修改

修改mysql的配置文件。

vi /etc/my.cnf

修改或添加:thread_cache_size=300(需要的值)

重啟mysql:systemctl restart mysqld

 

2.4 優化建議(優化建議來自《高性能MySQL》)

thread_cache_size變量指定了MySQL可以保持在緩存中的線程數。一般不需要配置這個值,除非服務器有很多連接請求。如果我們觀察到很少有每秒創建的新線程數少於10個的時候,通常應該嘗試保持線程緩沖足夠大,但是實際上經常可能看到每秒少於1個新線程的情況。

一個好的辦法是觀察Threads_connected變量並且嘗試設置thread_cache_size足夠大以便能處理業務壓力正常的波動。如果它保持在100-120,則可以設置為20;如果保持在500-700,200的線程緩存應該足夠大了。

 

3.怎樣查看Mysql線程的狀態?

登錄mysql

show status like 'thread%';

Threads_cached:當前線程緩存還有多少線程。

Threads_connected:當前已連接的MySQL線程數。這個值不會超過max_connections,也許會超過1或2個,不用管它。

Threads_created:這個值是個累加值,表示MySQL服務器為連接創建的線程數?有待考證!

Threads_running:表示當前正在運行的連接數,這個數會遠小於Threads_connected,這是正常情況。

 

4. 怎樣理解Threads_cached/Threads_connected/Threads_running/Threads_running?以及它們和並發量的關系?

沒有高並發時,這四個狀態為:

1000並發時,這四個狀態為:(參考)

當高並發開始時,Threads_cached的值會減少,Threads_created值幾乎不變,Threads_connected值持續增加;當Threads_cached的值減少為0后,Threads_createds值增加(波動會大於10),Threads_connected值持續增加;直到Threads_connected值穩定,這個值和max_connections有關系,此時Threads_cached值為0,Thread_created值不變,Threads_connected值不變。

當高並發結束后,Threads_connected值會減少,Threads_cached值會恢復成最初值(thread_cache_size配置決定。)

以上就是高並發時,MySQL線程的變化情況。

 

優化建議:(以下建議,來自踩坑)

合理的Threads_cached值,能在高並發開始時,讓MySQL更快的進入狀態,因為它會節省很多創建線程的開銷。Threads_connected值上不去,首先看看max_connections的值是多少,如果有連接池,看看連接池配置的最大連接數是多少,如果數據庫連接池(比如Druid)最大Active連接數只有500,那Threads_connected最多只能到501(用MySQL性能檢測工具可以看到),如果還是上不去,就需要具體分析了。

 

5. 怎樣使用doDBA工具?

5.1 在linux上部署doDBA

安裝:

wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA --no-check-certificate
wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA.conf --no-check-certificate
chmod +x doDBA

修改配置文件:

運行:

監控Mysql:./doDBA -h 192.168.43.167 -mysql

監控系統:./doDBA -h 192.168.43.167 -sys

 

 (轉載請標明出處)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM