Mysql 一 mysql執行機制

2021-08-31 00:20:23 字數 2968 閱讀 6938

全面了解mysql的執行機制,從而了解當前系統的瓶頸,找到優化方案。

借用一張圖

從上圖可以清晰看出mysql的內部架構,可以清楚的看到mysql是由連線池connection pool,sql介面,解析器,優化器,快取,儲存引擎組成的。

connectors

指的是不同語言中與sql的互動

management serveices & utilities:

系統管理和控制工具

connection pool: 連線池

管理緩衝使用者連線,執行緒處理等需要快取的需求。

負責監聽對 mysql server 的各種請求,接收連線請求,**所有連線請求到執行緒管理模組。每乙個連線上 mysql server 的客戶端請求都會被分配(或建立)乙個連線線程為其單獨服務。而連線線程的主要工作就是負責 mysql server 與客戶端的通訊,

接受客戶端的命令請求,傳遞 server 端的結果資訊等。執行緒管理模組則負責管理維護這些連線線程。包括執行緒的建立,執行緒的 cache 等。

sql inte***ce: sql介面

接受使用者的sql命令,並且返回使用者需要查詢的結果。比如select from就是呼叫sql inte***ce

parser: 解析器。

sql命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由lex和yacc實現的,是乙個很長的指令碼。

在 mysql中我們習慣將所有 client 端傳送給 server 端的命令都稱為 query ,在 mysql server 裡面,連線線程接收到客戶端的乙個 query 後,會直接將該 query 傳遞給專門負責將各種 query 進行分類然後**給各個對應的處理模組。

主要功能:

a . 將sql語句進行語義和語法的分析,分解成資料結構,然後按照不同的操作型別進行分類,然後做出針對性的**到後續步驟,以後sql語句的傳遞和處理就是基於這個結構的。

b. 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

optimizer: 查詢優化器

sql語句在查詢之前會使用查詢優化器對查詢進行優化。就是優化客戶端請求的 query(sql語句) ,根據客戶端請求的 query 語句,和資料庫中的一些統計資訊,在一系列演算法的基礎上進行分析,得出乙個最優的策略,告訴後面的程式如何取得這個 query 語句的結果

他使用的是「選取-投影-聯接」策略進行查詢。

用乙個例子就可以理解: select uid,name from user where gender = 1;

這個select 查詢先根據where 語句進行選取,而不是先將表全部查詢出來以後再進行gender過濾

這個select查詢先根據uid和name進行屬性投影,而不是將屬性全部取出以後再進行過濾

將這兩個查詢條件聯接起來生成最終查詢結果

cache和buffer: 查詢快取。

他的主要功能是將客戶端提交 給mysql 的 select 類 query 請求的返回結果集 cache 到記憶體中,與該 query 的乙個 hash 值 做

乙個對應。該 query 所取資料的基表發生任何資料的變化之後, mysql 會自動使該 query 的cache 失效。在讀寫比例非常高的應用系統中, query cache 對效能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。

如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,key快取,許可權快取等

儲存引擎介面

儲存引擎介面模組可以說是 mysql 資料庫中最有特色的一點了。目前各種資料庫產品中,基本上只有 mysql 可以實現其底層資料儲存引擎的外掛程式式管理。這個模組實際上只是 乙個抽象類,但正是因為它成功地將各種資料處理高度抽象化,才成就了今天 mysql 可插拔儲存引擎的特色。

從圖2還可以看出,mysql區別於其他資料庫的最重要的特點就是其外掛程式式的表儲存引擎。mysql外掛程式式的儲存引擎架構提供了一系列標準的管理和服務支援,這些標準與儲存引擎本身無關,可能是每個資料庫系統本身都必需的,如sql分析器和優化器等,而儲存引擎是底層物理結構的實現,每個儲存引擎開發者都可以按照自己的意願來進行開發。

注意:儲存引擎是基於表的,而不是資料庫

讀寫鎖

在處理併發讀或寫時,可以通過實現乙個由兩種型別的鎖組成的鎖系統來解決問題。這兩種型別的鎖通常被稱為共享鎖或和排他鎖,也叫讀鎖和寫鎖

讀鎖是共享的,或者說是相互不阻塞的。多個客戶在同一時刻可以同時讀取同乙個資源而不相互干擾

寫鎖是排他的,乙個寫鎖會阻塞其他的寫鎖和讀鎖,

mysql鎖的內部管理是透明的

鎖粒度

一種提高共享資源併發性的方式就是讓鎖定物件更有選擇性。盡量只鎖定需要修改的部分資料,而不是所有的資源。更理想的方式是,只對會修改的資料片進行精確的鎖定。在給定的資源上,鎖定的資料量越少,則系統的併發程度越高。所謂的鎖策略,就是在鎖的開銷和資料的安全性之間尋求平衡。下面將介紹兩種最重要的鎖策略。

表鎖

表鎖的mysql中最基本的鎖策略,並且是開銷最小的策略。它會鎖定整張表,乙個使用者在對錶進行寫操作前,需要先獲取寫鎖,這會阻塞其他使用者對該錶的所有讀寫操作。

行級鎖行級鎖可以最大程度地支援併發處理(同時也帶來了最大的鎖開銷),行級鎖只在儲存引擎層實現,而mysql伺服器層沒有實現。

事務事務就是一組原子性的sql查詢,事務內的語句,要麼全部執行成功,要麼全部執行失敗

MySQL執行機制

建立連線 connectors connection pool 通過客戶端 伺服器通訊協議與mysql建立連線。mysql 客戶端與服務端的通訊方式是 半雙工 對於每乙個 mysql 的連線,時刻都有乙個執行緒狀態來標識這個連線正在做什麼。id 執行緒id,可以使用kill xx user 啟動這個...

mysql結構及sql執行機制

資料庫通常不會被直接使用,而是由其他程式語言通過sql語句呼叫mysql,由mysql處理並返回執行結果。那麼mysql接受到sql語句後,又是如何處理的呢?首先程式的請求會通過mysql的connectors與其進行互動,請求到處後,會暫時存放在連線池 connection pool 中並由處理器...

MySql執行機制原理和架構

主要補充了一些事務隔離級別會帶來的問題以及可以避免什麼問題,還有就是mysql內部優化語法樹的規則。目錄 一 mysql知識普及 二 mysql邏輯架構 三 併發控制和鎖的概念 四 事務 五 mysql儲存引擎及應用方案 mysql是乙個開放源 的關聯式資料庫管理系統。mysql架構可以在多種不同場...