MySQL運(yùn)行機(jī)制

MySQL運(yùn)行機(jī)制

開局一張圖 內(nèi)容全靠編

本文主要說一下,應(yīng)用程序在與數(shù)據(jù)庫交互時(shí),數(shù)據(jù)庫的大概執(zhí)行流程。整體上了解一下一條SQL的流轉(zhuǎn)。

  1. 建立連接

應(yīng)用程序與MySQL各自使用線程池,來維護(hù)之間的連接。每個(gè)連接都是一個(gè)線程,從而實(shí)現(xiàn)并發(fā)訪問MySQL。

  1. 客戶端發(fā)送 SQL
  2. 查詢緩存,查詢語句與緩存中的完全一致(包括參數(shù)且不能存在不確定參數(shù)比如 now()),則將查詢到的結(jié)果返回。
  3. SQL 解析器,解析 SQL 判斷 SQL 是否合法。
  4. 查詢優(yōu)化器,根據(jù)解析器結(jié)果生成最佳的執(zhí)行計(jì)劃。
  5. 選擇合適的存儲(chǔ)引擎進(jìn)行操作數(shù)據(jù)(圖中是 InnoDB 存儲(chǔ)引擎)
    InnoDB執(zhí)行流程
    1. 將需要操作的數(shù)據(jù)從磁盤文件中查詢出來,放入緩沖池(Buffer Pool)。如果緩沖池中已經(jīng)存在則不需要查詢磁盤。(查詢SQL此時(shí)會(huì)返回結(jié)果)

    2. 將 舊數(shù)據(jù) 寫入 undo log。(undo log 用于事務(wù)回滾)

    3. 更新緩沖池中的數(shù)據(jù)。

    4. 寫入 Redo Log Buffer。(redo log 主要用于 MySQL 突然宕機(jī)的數(shù)據(jù)恢復(fù))(此時(shí)寫入的日志存儲(chǔ)于內(nèi)存中)

    5. redo log 寫入磁盤的時(shí)機(jī)。

      innodb_flush_log_at_trx_commit mysql 的這個(gè)配置來控制寫入 redo log 的時(shí)機(jī) 默認(rèn) 為 1
      0時(shí) 事務(wù)提交時(shí),不寫入redo 磁盤文件,而是由 InnoDB存儲(chǔ)引擎線程來定時(shí)寫入磁盤. 性能最好,但是宕機(jī)會(huì)丟失數(shù)據(jù)
      1時(shí) 事務(wù)提交時(shí),寫入 redo 磁盤文件。安全性最高,不會(huì)丟失數(shù)據(jù),相對性能差。
      2 事務(wù)提交時(shí),不寫入redo 磁盤文件,而是寫入 os cache。然后再從os cache 寫入 磁盤文件。性能比1好,但是比0差,如果機(jī)器宕機(jī)則會(huì)丟失數(shù)據(jù)。

    6. 寫入 binlog 日志. (用于數(shù)據(jù)庫恢復(fù)和主從復(fù)制)

      sync_binlog控制binlog寫入磁盤策略 默認(rèn)=0
      =0時(shí)先寫入 OS cache 然后寫入磁盤
      =1直接寫入磁盤

    7. redo log 與 bin log 全部寫入成功后提交事務(wù)完成

以上就是大概 SQL 的運(yùn)行流程。主要描述的是 InnoDB 存儲(chǔ)引擎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 運(yùn)行機(jī)制圖解 2. 運(yùn)行過程 2.1 建立連接(Connectors & Connection Pool) ...
    雪礪青松灬閱讀 168評論 0 0
  • 本文來自于拜讀《高性能MySQL(第三版)》時(shí)的讀書筆記作者:安明哲轉(zhuǎn)載時(shí)請注明部分內(nèi)容來自《高性能MySQL(第...
    代號027閱讀 5,606評論 0 21
  • 要理解MySQL的運(yùn)行機(jī)制,先要看一下MySQL的語句是一個(gè)基本的執(zhí)行過程,我們在客戶端寫的SQL先查緩存,緩存命...
    david161閱讀 802評論 0 0
  • SQL-運(yùn)行機(jī)制.png 查詢緩存: 解析器: 預(yù)處理器: 語義解析 生成新的解析樹 查詢優(yōu)化器: 因?yàn)橐粭lSQL...
    程序員阿奇閱讀 331評論 0 0
  • MySQL 里經(jīng)常說到的 WAL技術(shù),也就是先寫日志,再寫磁盤。 當(dāng)內(nèi)存數(shù)據(jù)頁跟磁盤數(shù)據(jù)頁內(nèi)容不一致的時(shí)候,我們成...
    如夢又似幻閱讀 17,092評論 3 6

友情鏈接更多精彩內(nèi)容