91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中InnoDB存儲引擎的示例分析

發布時間:2021-07-29 09:41:47 來源:億速云 閱讀:112 作者:小新 欄目:MySQL數據庫

這篇文章主要介紹MySQL中InnoDB存儲引擎的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、存儲引擎

SQL 的執行計劃是執行器組件調用存儲引擎的接口來完成的。
那我們可以理解為:MySQL 這個數據庫管理系統是依靠存儲引擎與存放數據的磁盤文件進行交互的。

那么 MySQL 有哪些存儲引擎呢?

主要有 MyISAM、InnoDB、Memory等等。而現在互聯網中,基本都是使用 InnoDB 存儲引擎,所以接下來我將簡單總結自己關于 InnoDB 存儲引擎的學習,比較簡單的介紹 InnoDB 存儲引擎里面的組件。

二、緩沖池

我們現在都知道了,數據庫的數據是存放在磁盤文件中的。
那么,我們每次對表的增刪改查都是直接在磁盤文件里面操作嗎?

答案:不是的!

因為磁盤文件的隨機讀寫的性能是非常差的,如果所有操作都在磁盤中進行,那么就不會有高性能 MySQL 的說法了,MySQL 也不能支持高并發,也不會在互聯網中如此的流行。

這時候要引入 InnoDB 存儲引擎最重要的一個組件,就是緩沖池(Buffer Pool),它是一個非常重要的內存結構。它是內存里面的,憑借著內存非常高性能的讀寫,使得 MySQL 能夠支持高并發。

緩沖池(Buffer Pool) 的使用原理:

我們先復習一下 MySQL 接收請求的過程。

①、MySQL 的工作線程專門監聽數據庫連接池的連接,有連接就獲取連接中的 SQL 語句。
②、然后將 SQL 語句交給 SQL 接口 去處理,SQL 接口里會進行下面的一系列流程。
③、查詢解析器 將 SQL 語句解析成 MySQL 能理解的東西。
④、接著 查詢優化器 去為 SQL 語句制定一套最優的執行計劃。
⑤、執行器 會根據執行計劃去調用存儲引擎的接口。

上面是上篇文章總結到的東西,那么存儲引擎的接口是怎么進行增刪改查的呢?以更新操作為例,其他的同理。
首先,存儲引擎會先判斷更新 SQL 對應的數據行是否在 緩沖池(Buffer Pool) 里面。如果在的話就直接在 緩沖池(Buffer Pool) 里更新數據然后返回;如果不在,則從磁盤文件里讀取數據到 緩沖池(Buffer Pool) 里,然后進行更新操作,最后再返回結果。

三、undo 日志文件

我們都知道,在事務中,事務提交前是可以隨時回滾對數據的更新的。那么是依靠什么來做的呢?

依靠的是 undo 日志文件

undo 日志文件的使用原理:

更新數據為例:
假如你更新某行 id=100 的數據,將字段 name 由原來的“張三”改為“李四”,那么此時會將 "id=10" 和 “name=張三” 這兩個關鍵信息寫入 undo 日志文件中。
當你事務提交前需要回滾,就會從 undo 日志文件 中找到這兩個關鍵字,然后進行更新操作的回滾。

四、redo log buffer

上面說到,所有的增刪改查操作其實是在緩沖池里面進行的,所以其實對數據的修改并沒有立刻落實到磁盤文件里面。

那么有一個問題:在緩沖池的臟數據刷回磁盤文件中前,MySQL 宕機了怎么辦?
此時 InnoDB 存儲引擎提供了一個非常重要的組件,就是 redo log buffer 組件.,它也是內存里的一塊緩沖區。

redo log buffer 的使用原理:

還是以上面的更新操作為例,當數據更新后,會記錄下數據更新的的關鍵信息,對應的就是 redo 日志,然后寫入 redo log buffer 里。

但是還是會有一個問題,上面說到,redo log buffer 也是在內存里的。那當 MySQL 宕機時,由于內存里的所有數據都會丟失,所以緩沖池的臟數據和 redo log buffer 的日志還是會全部丟失。
這樣會造成一種情況,客戶端收到更新成功的信息了,但是最后數據庫里頭的數據還是沒更新成功。

所以,redo log buffer 還有一個刷盤策略。正常是,當事務提交時,會將 redo log buffer 里的 redo 日志 刷回到磁盤中,這樣就不用擔心,事務提交成功,但是更新數據可能會丟失的問題了。即使在 緩沖池(Buffer Pool) 的臟數據刷回磁盤前, MySQL 宕機了,也不會丟失數據,因為 MySQL 重啟時可以根據磁盤中的 redo 日志 恢復之前所有臟數據的更新。

以上是“MySQL中InnoDB存儲引擎的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳曲县| 前郭尔| 万荣县| 衡阳市| 阿克陶县| 水城县| 宜都市| 马龙县| 夏津县| 建昌县| 渝中区| 怀宁县| 高雄市| 沂南县| 泸溪县| 乌什县| 天长市| 德州市| 思茅市| 贡嘎县| 大厂| 襄汾县| 鄂州市| 宜君县| 涞源县| 驻马店市| 阿拉善盟| 遂昌县| 灯塔市| 奉贤区| 金坛市| 长岭县| 孝昌县| 静安区| 林西县| 安顺市| 石狮市| 湾仔区| 从化市| 平遥县| 资源县|