MySQL服務器整體架構如下:
連接層:
連接層的作用是處理客戶端的連接,如何管理連接的。
網絡端口和連接管理線程:
網絡端口:一臺服務器可以連接網絡上多個端口的客戶連接,只需要開放多個端口,只需要在選項文件中指定多個端口號即可。
連接管理線程:用來處理客戶端連接的請求。一個連接管理線程可以處理所有的TCP/IP請求。
客戶端連接線程管理:每一個客戶端請求都會對應一個執行線程,用于處理身份驗證和具體請求,執行線程也通過池化技術進行了緩存。用于提高線程的復用,避免頻繁創建銷毀線程。
系統變量thread_cache_size決定了線程緩存的大小,這個值在服務器啟動的時候會自動的設置,單頁可以通過選項文件指定大小,如果設置為0禁用緩存。
還可以通過設置thread_stack來調整堆棧大小,因為會設計到一些遞歸的原因。
還可以查看線程池中的線程數量和新創建的線程數:Theads_cached和Theads_created
鏈接量管理:
系統變量:max_connections控制服務器可以允許客戶端連接的最大請求數,當達到man_connections后,多余的請求就會拒絕,同時會增加Connection_errors_max_connections的值。
實際上mtysqld允許最大連接數是max_connections+1,多余那個是給CONNECTION_ADMIN用的。即使普通連接達到了max_connections,但是管理員也可以連接到服務器進行管理操作。
服務層:是整個服務器服務的核心,主要包括服務管理和公共組件,noSQL和SQL接口,解析器和查詢優化器,還有緩存等。
nosql和sql接口:用于接受客戶端發送的各種SQL語句和命令,然后發送給其他部分,最后將收到的結果返回給客戶端。
Paster(語法分析器):主要作用是將收到的sql語句中的關鍵字和自定義字段進行語法分析和詞法分析,最終使其轉化成一課解析樹,詞法分析就是對關鍵字進行提取,比如select、update、delete等,語法解析就是判斷sql語句是否滿足語法規則,如果不滿足救會報錯。
Optimizer(查詢優化器):作用將解析樹進行優化,將優化后的結果交給儲存引擎api,然后進行查詢,優化前后的查詢結果一樣,但是效率不一樣。