1. Mysql的基礎架構
1.1. MySQL基礎架構示意圖
從上圖上能夠看出,mysql分爲Server層和存儲引擎兩部分mysql
Server包括鏈接器、查詢緩存、分析器、優化器、執行器等。以及全部的內置函數,還有存儲過程、觸發器視圖等。sql
存儲引擎負責數據的存儲和提早。其架構模式是插件式,支持InnoDB、MyISAM、Memory等多個存儲引擎。緩存
不一樣的存儲引擎公用一個server層。架構
1.2 server各個部分的做用
-
鏈接器函數
負責與客戶端創建連接、獲取權限、位置和管理連接優化
mysql -h$ip -P$port -u$user -p
用戶成功鏈接以後,鏈接器會到權限表裏面查出該用戶所擁有的權限。以後該鏈接以內的權限判斷都會依賴已經督導的權限。即:*若是修改已經鏈接的用戶權限須要從新鏈接以後才能生效。插件
若是鏈接以後,客戶端長時間沒有操做,鏈接器會自動斷開。這給時間是由參數wait_timeout控制的,默認時間爲8小時。3d
mysql中長鏈接是指**鏈接成功以後,若是客戶端持續有請求,則一直使用統一給鏈接。短連接則是指每次執行完不多的幾回查詢就斷開鏈接,下次查詢再從新創建一個。code
大量使用長鏈接,內存佔用過大的問題解決辦法:server
- 按期斷開長鏈接、或者在執行一個佔用較大內存查詢以後,斷開鏈接
- Mysql5.7 以後的版本,可使用
mysql_reset_connection
來從新初始化鏈接資源
-
查詢緩存
mysql執行select以前,會先從查詢緩存中判斷是否執行過該sql
只要對一個表的更新,該表上的全部查詢緩存都會被清空
若是有必要,能夠經過顯示的方式使用查詢緩存
select sql_cache * from T where id = 1;
mysql8.0版將查詢緩存刪除了
-
分析器
主要是對輸入的語句進行解析,並判斷是否知足mysql的語法要求
-
優化器
優化器是在表中存在多個索引的時候,決定使用哪一個索引;或者一個語句有奪標關聯的時候,決定各個表的鏈接數據順序。
-
執行器
判斷是否有權限對錶的操做,若是有則調用引擎接口,進行數據處理。