mysql連線引數配置
技術標籤:mysqlmysql連線引數配置mysql連線引數配置詳解
前言
mysql效能優化涉及到很多方面,在上一篇中通過explain打印出sql的執行計劃可以作為指導開發人員進行sql優化是一個方面,另外,mysql自身的引數配置也很多,比如連線引數(connection),查詢快取等,合理的設定mysql引數對於效能優化也是非常重要的
下面對mysql的連線引數,即connection相關的引數配置做簡單的說明
mysql引數設定的兩種方式
在實際配置mysql引數時,通常有2種做法,可以通過my.cnf(linux)進行設定(持久化設定),也可以通過命令,set global 引數名 = 引數值(只對當前連線會話生效)的方式設定
檢視當前mysql的connection資訊
show VARIABLES like '%connection%';
預設情況下,mysql的連線數量為151個,通過set的方式設定下,
set GLOBAL MAX_CONNECTIONS=200;
如果在my.cnf進行設定
配置完畢後,重啟下mysql服務,connections連線數也變成300
systemctl restart mysqld.service
總結來說:
- 對當前的連線,連線數優先順序為 ,set > 配置,值得注意的是,部分引數在set global並不會立即生效,而是需要重新建立連線後才有效
- set global 在mysql執行過程中會一直生效,直到mysql服務關閉
connection常用引數設定
-
檢視最大連線數
最大連線數,代表當前資料庫同時允許的最大連線數量,連線的狀態通常有2種,sleep / query,sleep代表處於閒置的狀態,query代表正處於任務處理的狀態
sleep + query 連線的總量不能超過 max_connections的設定值,否則會出現 : too many connections 的錯誤
-
檢視各個狀態的連線情況
-
Threads_cached:一共快取過多少連線,如果在mysql伺服器的配置檔案中設定了thread_cache_size引數,當前客戶端斷開之後,伺服器處理此客戶的執行緒將會快取起來,以備下一個連線進來的客戶而不是立即銷燬(前提是快取數量未達到上限),可以通過命令:set global thread_cache_size=50 設定或者在 my.cnf中配置
-
Threads_connected: 代表當前已經有多少個連線(sleep+query)
-
Threads_created:歷史總共建立過多少個連線
-
Threads_running:代表有幾個連線正處於"工作"狀態,也是目前的併發數
檢視mysql歷史執行過程中最大連線數以及出現的時點
這是一個很有用的引數,可以用於指導一個系統的資料庫伺服器配置比較合理的最大連線數,因為最大連線數並不是越大越好,可以在系統上線時將 max_connections的值設定的大一點,等到執行一段時間之後,通過觀察上面的這個引數值,再進行設定,這也是指導DBA或者開發人員對於mysql伺服器是否需要進行擴容或者增加節點的一個很重要的衡量引數
檢視mysql設定的連線快取佇列數
back_log:設定儲存多少個連線資料庫的請求到堆疊(緩衝區),就是說,如果mysql的當前連線數達到了max_connections的最大值時,新來的請求將會被儲存在堆疊中,以等待前面的某些連線資源釋放,該堆疊的數量即 back_log,如果等待連線的數量超過了back_log,將不會授予連線資源,報出相關的連線錯誤,back_log可以簡單理解為一個連線的緩衝佇列
如果瞭解Java中的執行緒池原理的同學就很好理解這個概念了,這個可以作為執行緒池調優引數的配置,在mysql中,也可以作為mysql伺服器效能調優的指導,假如你的伺服器配置還可以的話,可以適當的調大這個引數,以獲得更大的併發處理
wait_timeout 與 interactive_timeout
這兩個引數都是連線在超過一段時間之後,資料庫自動關閉,在這個期間持續的時間,預設是8個小時
wait_timeout :針對非互動式連線,比如Java通過JDBC進行連線
interactive_timeout:互動式連線,比如通過mysql的客戶端進行的連線
檢視當前資料庫連線詳情狀況
通過這個命令可以清楚的展現出當前資料庫連線的詳細情況,比如query對應的應用IP,sleep對應的連線客戶端資訊、連線時間等,可以在某些情況下用於監控mysql的整體連線情況
本篇主要總結了與mysql的connection相關的幾個常用配置引數的使用,在實際開發中,可以作為運維或者調優的配置進行參考和使用,本篇到此結束,最後感謝觀看!