查詢SQL執行流程
流程圖
流程說明
- 客戶端通過同步半雙工的長鏈發送查詢sql語句到Connectors。鏈接器進行庫權限校驗。
- 通過之後請求緩存,命中緩存則直接返回,未命中則轉給解析器。
- 解析器經過詞法和語法解析生成解析樹。
- 經預處理器進行權限校驗和語義解析重新生成解析樹。
- 優化器將解析的語法樹轉換成最優的執行計劃。
- 通過執行器調用存儲引擎的API,API會調用存儲引擎查詢數據。
更新SQL執行流程
- update操作包括insert、update、delete等。
- update操作必須先拿到數據,才能操作,更新之前先要做查詢
流程圖
流程說明
- 先從內存或者磁盤拿到這條數據。
- 更新數據,然後調用存儲引擎的API接口,寫入這一行數據到內存,同時記錄redo log。這時redo log進入prepare狀態,然後告訴執行器,執行完成了,可以隨時提交。
- 執行器收到通知後記錄binlog
- 然後調用存儲引擎接口,設置redo log爲commit狀態。更新完成。
說明
- 先記錄到內存(buffer pool),再寫日誌文件。
- 記錄redo log分爲兩個階段(prepare和commit)。
- 存儲引擎和server分別記錄不同的日誌。
- 先記錄redo,再記錄binlog。