MySQL中鏈接線程的優化

MySQL鏈接不只能經過網絡方式,還能夠經過命名管道的方式,不管是哪一種方式鏈接MySQL,在MySQL中都是經過線程的方式管理全部客戶端請求的。每個客戶端鏈接都會有一個與之對應的鏈接線程。在MySQL中實現了一個Thread Cache池,將空閒的鏈接線程存放其中,而不是完成請求後就銷燬。這樣,當有新的鏈接請求時,MySQL首先會檢查Thread Cache中是否存在空閒鏈接線程,若是存在則取出來直接使用,若是沒有空閒鏈接線程,才建立新的鏈接線程。具體參數:緩存

Thread_cache_size:Thread Cache池中應該存放的鏈接線程數。網絡

Thread_stack:每一個鏈接線程被建立時,MySQL給它分配的內存大小。當MySQL建立一個新的鏈接線程時,須要給它分配必定大小的內存堆棧空間,以便存放客戶端的請求的Query及自身的各類狀態和處理信息。ide

查看鏈接線程相關的系統變量的設置值: show   variables   like 'thread%';spa

 

如圖,系統設置了Thread Cache池最多將緩存25個鏈接線程,每一個鏈接線程建立之初,系統分配192KB的內存堆棧給它。線程

查看系統被鏈接的次數及當前系統中鏈接線程的狀態值內存

show status like 'connections';it

 

show status like '%thread%';io


系統啓動到如今共接受到客戶端的鏈接7次,共建立了1個鏈接線程,當前有1個鏈接線程處於和客戶端鏈接的狀態,而1個鏈接狀態的線程中只有一個處於 active 狀態,即只有一個正在處理客戶端提交的請求,。而在Thread Cache池中共緩存了0個鏈接線程。
class

Thread Cache 命中率:thread

Thread_Cache_Hit = (Connections - Threads_created) / Connections * 100%;

通常在系統穩定運行一段時間後,Thread Cache命中率應該保持在90%左右纔算正常。

相關文章
相關標籤/搜索