mysql 基本架構示意圖:
負責跟客戶端建立連線、獲取許可權、維持和管理連線。
平常使用中要盡量使用長連線,但是當全部使用長連線後,mysql占用記憶體會漲的特別快,原因是mysql在執行過程中臨時使用的記憶體是管理在連線 物件裡面的,這些資源會在連線斷開的時候才釋放,大量長連線積累下來會導致記憶體占用太大,會被系統強行殺掉oom,從現象看就是mysql異常重啟了。
解決方案:
1.定期斷開長連線。一段時間後斷開連線,會程式裡面判斷執行乙個占用記憶體的大查詢後,斷開連線,之後查詢再重連。
2.mysql5.7以上,可以在每次執行乙個比較大的操作後,通過執行mysql_reset_connection 來重新初始化連線資源,這個過程不需要重連和重新許可權驗證,但會將連線恢復到剛剛建立完的狀態
執行過的語句和結果 會以key-value形式存在記憶體中,如何能命中key,value會直接返回
但是查詢快取往往利大於弊,大多數情況下不被建議使用,因為查詢快取的失效非常頻繁,只要對該錶有更新,這個表上的查詢快取都會被清空,對於更新壓力大的資料來說,查詢快取命中率會非常低,如果對於業務是一張靜態表,很長時間才會更新就比較適合。
mysql也提供了按需使用的方式,引數 query_cache_type 設定成 demand,這樣的sql語句預設不適用查詢快取,只有當確認要使用查詢快取的語句是,可以用sql_cache指定(該功能在mysql8.0版本去除了)
mysql> select sql_cache * from t where id=10;
對sql語句進行詞法分析,然後進行語法分析
當表裡有多個索引的時候,會決定使用哪個索引,在多表關聯的時候,決定各個表的連線順序,優化器作用是決定選擇使用具體的乙個方案達到效率最大化
會先判斷你對語句是否有許可權,有許可權才會繼續去執行,執行器會遍歷所有滿足條件的行組成記錄作為結果集返回給客戶端。
慢日誌中的rows_examined可以表示語句執行過程中掃瞄了多少行,該值是執行器每次呼叫引擎獲取資料行累加的。
在一些特定的場景下,執行器每呼叫一次,在引擎內部會掃瞄多行,所以rows_examined有時候並不是完全相同的
mysql架構 MySQL的基礎架構
mysql是關聯式資料庫,關聯式資料庫,顧名思義,是建立在關係模型基礎上的資料庫,我們現實世界中的各種實體以及實體之間的各種聯絡一般可用關係模型來表示。經過數十年的發展,關聯式資料庫在理論和工業實踐中都已經發展到很成熟的地步,可以說,目前的絕大部分應用,使用mysql都有成熟的解決方案。資料庫的架構...
MySQL 基礎架構
mysql 架構分為兩部分,server層與儲存引擎。其中 server 包含 聯結器 查詢快取 分析器 優化器 執行器。儲存引擎架構模式為外掛程式式的,支援 innodb myisam memory 等多個儲存引擎,最常用的是 innodb。建立資料庫連線,驗證使用者名稱密碼是否匹配。讀取使用者許...
MySQL基礎架構
mysql可以被分為server層和儲存引擎層兩個部分。server層包括聯結器 查詢快取 分析器 優化器 執行器等,涵蓋mysql的大多數核心服務功能,以及所有的內建函式 如日期 時間 數學和加密函式等 所有跨儲存引擎的功能都在這一層實現,比如儲存過程 觸發器 檢視等。儲存引擎層直接處理資料。其架...