MySQL提高篇(二)--- MySQL的邏輯架構和物理結構

MySQL的邏輯架構

在這裏插入圖片描述
從上圖可以看到,MySQL從邏輯上可以由這些部分組成:
一、連接池組件
  管理數據庫連接,包括權限認證、連接限制等功能。
二、管理服務和工具組件
  系統管理和控制工具
三、SQL接口組件
  接收用戶的SQL命令,返回sql執行結果。
四、解析器組件
  對SQL語句進行語法和語義解析,形成語法樹。
五、優化器組件
  對SQL語句進行優化,如:選擇合適的索引、多表關聯時決定表關聯順序等,最終決定SQL的執行計劃。
六、緩衝組件
  將SQL語句作爲key,sql語句查詢結果作爲value進行緩存。但是它對內存損耗較爲嚴重,且緩存在一些情況下被清空:
       1、SQL語句變化
       2、被查詢的表數據變化
因此MySQL8.0版本開始不支持緩存。
七、存儲引擎組件
MySQL的存儲引擎是基於表層面的,即可以爲每一張表使用不同的存儲引擎。經常使用的存儲引擎還是InnoDB。

MySQL中的執行流程

而MySQL的一條SQL的執行流程就可以表述如下:
在這裏插入圖片描述

MySQL的物理存儲分析

實際上,MySQL數據庫可以被看作是一個由MySQL軟件管理的文件系統。其從物理層面來說,其內部不同的數據都被存儲爲不同格式的文件,而對於不同的存儲引擎數據存儲方式也是不一樣的。
  瞭解MySQL物理文件結構之前先介紹兩個概念:順序IO隨機IO
什麼是順序IO呢?我們知道在程序讀取磁盤上的數據時需要經過一個尋址的過程,順序IO就是讀寫數據時都是在連續的存儲區域內進行,這樣就節約了尋址時間,其優點就是讀寫速度快但是消耗更多的存儲空間,因爲磁盤上不一定總是有那麼多連續的存儲空間供程序使用;而隨機IO是在磁盤上尋找合適的位置存放數據,它的優點就是節約存儲空間,但是需要更多的時間進行IO操作
  MySQL重要的文件可以分爲日誌文件和數據索引文件,在linux系統上被保存在/var/lib/mysql目錄下,在MySQL中,其日誌文件是採用順序IO的方式進行讀寫操作,而數據索引文件是採用隨機IO的方式進行讀寫操作。至於爲什麼採用這種方式其實設計到MySQL實現持久性機制的Write-ahead-log機制,後面寫事務相關知識時候會講到。

MySQL日誌文件分類:

  通過show variables like 'log_%'命令查看MySQL中的日誌使用信息:
在這裏插入圖片描述
錯誤日誌: 錯誤日誌中記錄了MySQL啓動及運行時發生的錯誤的信息。通過上面的log_error 的value可以看到錯誤日誌的位置。在我的雲服務器上它就是/var/log位置的mysqld.log文件。/etc/my.cnf中的log-error可以設置錯誤日誌的位置。
在這裏插入圖片描述
二進制日誌(bin log):它記錄了MySQL客戶端所有的DDL和DML操作,所以很明顯其作用就可以用來做主從複製、數據備份、數據恢復等。可以看到它默認沒有開啓,可以通過在/etc/my.cnf文件中來設置log_bin=mysql-bin來開啓。值得注意的是,每一條DDL語句執行完畢後都會寫到bin_log中,但是DML語句只有在事務提交後才寫入。
在這裏插入圖片描述
慢查詢日誌(slow query log):這個就很重要了,因爲我們可以通過它去定位系統中查詢慢的sql語句,它默認是關閉的,我們去開啓它需要在/etc/my.cnf文件中添加如下設置:它的含義就是當查詢超過10s時,它就會被記錄在慢查詢日誌log_filename中。

slow_query_log=on
slow_query_time=10
slow_query_log_file=log_filename

事務日誌(redo log / undo log):這兩個日誌的功能有很多,後面需要慢慢講。這裏先理解redo log的作用是保證事務的持久性,即事務提交過程中服務器崩潰,事後仍然可以通過redo log去恢復。而undo log的作用就是事務提交失敗作回滾操作,還有一個作用是實現MySQL的MVVC(多版本併發控制)機制,這些都需要後面詳細說明。

MySQL數據索引文件:

  除了上面重要的日誌文件,還有很重要的文件自然是保存在MySQL數據庫中的數據了,在InnoDB存儲引擎中,表結構的定義信息保存在.frm文件中,而數據信息和索引信息都保存在.ibd文件中。
在這裏插入圖片描述
從上圖可以看出,在liuming這個數據庫中,我有三張表:account、table1、table2。

好記性不如爛筆頭,與諸君共勉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章