MYSQL實戰-1.mysql基本架構

 

一、mysql可分爲server層和存儲引擎
         1.1 server層:
鏈接器、查詢緩存、分析器、優化器 、執行器、包含全部內置函數(日期,時間,數學、加密函數),全部跨存儲引擎的功能都在此層,好比存儲過程、觸發器、視圖等
1.1.1 鏈接器:
負責跟客戶端創建鏈接、獲取權限、維持和管理鏈接
mysql -h$host -P$port -u$user -p$password
備註:
 a、sleep狀態是鏈接完成,但沒有後續操做,此鏈接就會處於空閒狀態;
 b、若是在鏈接過程當中對當前用戶的權限作了修改,也須要在斷開從新鏈接以後此權限才生效;
 c、長鏈接與短鏈接:長鏈接使用過多會出現mysql內存佔用太高致使mysql異常重啓的狀況,解決方法能夠是:按期斷開長鏈接,5.7及以上,則能夠經過mysql_reset_connection來從新初始化鏈接緩存,這個過程不會重連和從新作權限驗證,但會恢復到剛剛建立完的狀態;    
1.1.2 查詢緩存:
a. 創建鏈接以後便會去查詢緩存,緩存會以key-value對的形式保存,key是查詢語句,value是查詢結果。若查詢命中緩存,則不須要後續複雜的邏輯。
b. 但查詢緩存的失效特別頻繁,只要有對一個表的更新,那麼此表的緩存就會所有清空,所以不建議使用查詢緩存。除非是表的數據變更頻率不高的,如系統配置表
c.5.8.0已徹底將查詢緩存模塊刪掉
1.1.3 分析器:內建解析樹,數據表和數據列是否存在, 別名是否有歧義,若是經過創建一個新的解析樹,再提交給優化器
a.詞法分析、語法分析
1.1.4 優化器
優化器決定最優sql執行順序,如最優索引,join表的順序等
1.1.5 執行器
查詢對當前表是否有執行權限,如有權限,打開表,根據表引擎接口執行sql
1.2 存儲引擎負責數據的存儲和提取,包含InnoDB,MyISAM,Memry等,mysql5.5.5版本以上默認InnoDB

備註:
一、wait_timeout針對非交互式鏈接;
     interaction_timeout針對交互式鏈接;
     經過mysql客戶端鏈接數據庫是交互式鏈接,經過jdbc鏈接數據庫是非交互式鏈接;
二、執行完成後寫入緩存

問題:
一、爲何對權限的檢查不在優化器以前作?
答:觸發器是在執行器階段肯定的
二、我建立了一個沒有select權限的用戶,執行select * from T where k=1,報錯「select command denied」,並無報錯「unknown column」,是否是能夠說明是在打開表以後才判斷讀取的列不存在?
答:這是一個安全問題,當既沒有查詢權限,where條件的字段不存在時,未避免泄露太多信心,會直接判斷無權限
三、分析器到查詢緩存的那個箭頭表示什麼意思?
答:更新完回來失效緩存;
四、基本架構圖中,分析器指向了查詢緩存,是這時候把KEY放入緩存的嗎?執行器不指向緩存Value是何時放入緩存的?
答:其實執行完會寫入,避免圖亂,箭頭去掉了,文中:執行完成後,結果寫入查詢緩存;

學習筆記:非原著mysql

相關文章
相關標籤/搜索