
image.png
server層
包括 連接器,查詢緩存,分析器,優(yōu)化器,執(zhí)行器等,所有內置函數(shù),所有跨存儲引擎的功能(存儲過程,視圖,觸發(fā)器)
連接器
負責跟客戶端建立連接,維持連接,管理連接,獲取權限。
命令:
mysql -h
port -u$user -p
命令執(zhí)行流程:
- 創(chuàng)建tcp連接
- 輸入用戶名密碼(密碼也可以直接跟在-p后面,不推薦)
- 認證不通過執(zhí)行結束;通過則讀取用戶權限(從權限表查詢,后續(xù)該連接的權限判斷都依賴此時讀取的權限。即使權限被修改,對此連接來說,不會生效,需要重新建立連接才能使用新的權限)
- 連接超時后會自動斷開由參數(shù)wait_timeout控制默認8小時
- 數(shù)據(jù)庫一般使用長連接,SQL在執(zhí)行過程中臨時使用的內存是管理在連接對象里面的。這些資源會在連接斷開的時候才釋放,所以長連接可能會出現(xiàn)oom
可以定時斷開連接。進行大內存大查詢后斷開連接。
MySQL 5.7或更新版本,可以在每次執(zhí)行一個比較大的操作后,通過執(zhí)行
mysql_reset_connection來重新初始化連接資源。這個過程不需要重連和重新做權限驗證,
但是會將連接恢復到剛剛創(chuàng)建完時的狀態(tài)
查詢緩存
- 上次查詢執(zhí)行后會將sql語句和查詢結果以k-v的形式存在緩存中,每次表更新會清除緩存。
- 適用于不常更新的表使用??梢燥@式指定使用緩存
mysql> select SQL_CACHE * from T where ID=10;
- MySQL 8.0版本直接將查詢緩存的整塊功能刪掉
分析器
分析是否滿足sql語法,不滿足則報錯并提示首次出現(xiàn)錯誤的地方。
優(yōu)化器
從多個可選的執(zhí)行方案中選擇最優(yōu)的執(zhí)行方案
執(zhí)行器
- 校驗對表是否有權限
- 如果有,繼續(xù)執(zhí)行,操作引擎,返回結果
存儲引擎
負責存取數(shù)據(jù),插件式的架構,支持innodb(5.5之后默認的),myisam,memory等;建表時可以通過engine=memory指定。