讀高性能MySQL(第4版)筆記02_MySQL架構(下)

            發布時間:2023-08-16 07:23:37  |  來源:博客園  


            (資料圖)

            1.事務日志

            1.1.事務日志有助于提高事務的效率

            1.1.1.存儲引擎只需要更改內存中的數據副本,而不用每次修改磁盤中的表,這會非常快

            1.1.2.更改的記錄寫入事務日志中,事務日志會被持久化保存在硬盤上

            1.2.事務日志采用的是追加寫操作,是在硬盤中一小塊區域內的順序I/O,而不是需要寫多個地方的隨機I/O,所以寫入事務日志是一種相對較快的操作

            1.3.大多數使用這種技術(write-ahead logging,預寫式日志)的存儲引擎修改數據最終需要寫入磁盤兩次

            1.4.如果修改操作已經寫入事務日志,那么即使系統在數據本身寫入硬盤之前發生崩潰,存儲引擎仍可在重新啟動時恢復更改

            2.MySQL中的事務

            2.1.自動提交模式

            2.1.1.AUTOCOMMIT

            2.1.2.通過禁用此模式,可以在事務中執行一系列語句,并在結束時執行COMMIT提交事務或ROLLBACK回滾事務

            2.2.可以使用SET命令設置AUTOCOMMIT變量來啟用或禁用自動提交模式

            2.2.1.啟用可以設置為1或者ON

            2.2.2.禁用可以設置為0或者OFF

            2.3.AUTOCOMMIT=0,則當前連接總是會處于某個事務中,直到發出COMMIT或者ROLLBACK,然后MySQL會立即啟動一個新的事務

            2.4.除了在禁用AUTOCOMMIT的事務中可以使用之外,其他任何時候都不要顯式地執行LOCK TABLES,不管使用的是什么存儲引擎

            2.5.執行SET TRANSACTION ISOLATION LEVEL命令來設置隔離級別

            2.5.1.新的隔離級別會在下一個事務開始的時候生效

            2.5.2.最好在服務器級別設置最常用的隔離,并且只在顯式情況下修改

            2.6.MySQL不在服務器層管理事務,事務是由下層的存儲引擎實現的

            2.6.1.在同一個事務中,混合使用多種存儲引擎是不可靠的

            2.6.2.為每張表選擇合適的存儲引擎,并不惜一切代價避免在應用中混合使用存儲引擎是非常重要的

            2.6.3.在非事務表中執行事務相關操作的時候,MySQL通常不會發出提醒,也不會報錯

            2.6.4.最好不要在應用程序中混合使用存儲引擎

            2.6.4.1.失敗的事務可能導致不一致的結果,因為某些部分可以回滾,而其他部分不能回滾

            2.7.InnoDB使用兩階段鎖定協議

            2.7.1.two-phase locking protocol

            2.7.2.在事務執行期間,隨時都可以獲取鎖

            2.7.3.但鎖只有在提交或回滾后才會釋放,并且所有的鎖會同時釋放

            2.8.InnoDB還支持通過特定的語句進行顯式鎖定

            2.8.1.不屬于SQL規范

            2.9.支持LOCK TABLES和UNLOCK TABLES命令,這些命令在服務器級別而不在存儲引擎中實現

            2.10.應該使用支持事務的存儲引擎

            2.10.1.InnoDB支持行級鎖,所以沒必要使用LOCKTABLES

            3.多版本并發控制

            3.1.MVCC

            3.2.行級鎖的一個變種

            3.2.1.在很多情況下避免了加鎖操作,因此開銷更低

            3.2.2.不僅實現了非阻塞的讀操作,寫操作也只鎖定必要的行

            3.3.Undo日志寫入是服務器崩潰恢復過程的一部分,并且是事務性的

            3.3.1.所有Undo日志寫入也都會寫入Redo日志

            3.3.2.Redo日志和Undo日志的大小也是高并發事務工作機制中的重要影響因素

            3.4.僅適用于REPEATABLE READ和READ COMMITTED隔離級別

            3.5.READ UNCOMMITTED與MVCC不兼容

            3.5.1.查詢不會讀取適合其事務版本的行版本,而是不管怎樣都讀最新版本

            3.6.SERIALIZABLE與MVCC也不兼容

            3.6.1.讀取會鎖定它們返回的每一行

            4.復制

            4.1.一種原生方式來將一個節點執行的寫操作分發到其他節點

            4.2.對于在生產環境中運行的任何數據,都應該使用復制并至少有三個以上的副本

            4.3.理想情況下應該分布在不同的地區(在云托管環境中,稱為region)用于災難恢復計劃

            5.數據文件結構

            5.1.在8.0版本中

            5.1.1.將表的元數據重新設計為一種數據字典

            5.1.1.1.在表的.ibd文件中

            5.1.1.2.減少了I/O,非常高效

            5.1.2.刪除了基于文件的表元數據存儲

            5.2.引入了字典對象緩存

            5.2.1.基于最近最少使用(LRU)的內存緩存

            5.2.1.1.分區定義

            5.2.1.2.表定義

            5.2.1.3.存儲程序定義

            5.2.1.4.字符集

            5.2.1.5.排序信息

            5.2.2.當前訪問最活躍的那些表,在緩存中最常出現

            5.2.2.1.每個表的.ibd和.frm文件被替換為已經被序列化的字典信息(.sdi)

            5.3.原子DDL

            5.3.1.MySQL 8.0引入了原子數據定義更改

            5.3.2.數據定義語句現在要么全部成功完成,要么全部失敗回滾

            6.InnoDB引擎

            6.1.MySQL主要的改進核心在于InnoDB的演進

            6.1.1.表元數據、用戶認證、身份鑒權這些內部統計信息的管理也已經調整為使用InnoDB表來實現

            6.2.MySQL的默認事務型存儲引擎

            6.2.1.現在已經成為金標準,是推薦使用的引擎

            6.2.2.最重要、使用最廣泛的引擎

            6.2.3.為處理大量短期事務而設計的,這些事務通常是正常提交的,很少會被回滾

            6.2.4.幾乎能覆蓋每一種使用場景

            6.3.最佳實踐是使用InnoDB存儲引擎作為所有應用程序的默認引擎

            6.4.將數據存儲在一系列的數據文件中,這些文件統被稱為表空間(tablespace)

            6.4.1.表空間本質上是一個由InnoDB自己管理的黑盒

            6.5.使用MVCC來實現高并發性,并實現了所有4個SQL標準隔離級別

            6.5.1.默認為REPEATABLE READ隔離級別

            6.5.2.通過間隙鎖(next-key locking)策略來防止在這個隔離級別上的幻讀

            6.5.2.1.不只鎖定在查詢中涉及的行,還會對索引結構中的間隙進行鎖定,以防止幻行被插入

            6.6.InnoDB表是基于聚簇索引構建的

            6.6.1.聚簇索引提供了非常快速的主鍵查找

            6.7.通過一些機制和工具支持真正的在線“熱”備份

            6.7.1.Oracle專有的MySQL Enterprise Backup

            6.7.2.開源的Percona XtraBackup

            6.8.引入了SQL函數來支持在JSON文檔上的豐富操作

            關鍵詞:

             

            關于我們 - 聯系我們 - 版權聲明 - 招聘信息 - 友鏈交換

            2014-2020  電腦商網 版權所有. All Rights Reserved.

            備案號:京ICP備2022022245號-1 未經過本站允許,請勿將本站內容傳播或復制.

            聯系我們:435 226 40@qq.com

            亚洲精品天堂在线观看| 亚洲国产成人综合| 无码亚洲成a人在线观看| 亚洲国产成人99精品激情在线| 亚洲高清日韩精品第一区| 久久精品国产亚洲| 亚洲av片劲爆在线观看| 亚洲AV午夜福利精品一区二区| 亚洲va久久久噜噜噜久久天堂| 亚洲国产成人精品无码区在线观看| 亚洲精品国产字幕久久不卡| 亚洲精品成人片在线观看精品字幕| 中文字幕一精品亚洲无线一区| 亚洲中文字幕无码久久精品1| 亚洲人成中文字幕在线观看| 亚洲精品国产美女久久久| 亚洲AV无码一区二区乱孑伦AS| 亚洲成色WWW久久网站| 久久久久亚洲精品成人网小说| 亚洲欧洲免费视频| 亚洲最大中文字幕| 亚洲av无码一区二区三区天堂古代| 激情亚洲一区国产精品| 亚洲色www永久网站| 亚洲日韩在线中文字幕综合| 亚洲国产综合无码一区二区二三区| 亚洲午夜福利精品久久| 国产亚洲成AV人片在线观黄桃| 久久精品国产96精品亚洲| 亚洲酒色1314狠狠做| 精品亚洲AV无码一区二区三区 | 2020国产精品亚洲综合网 | 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲A丁香五香天堂网| 日本亚洲国产一区二区三区| 亚洲AV日韩精品久久久久久久| 亚洲色av性色在线观无码| 亚洲精品123区在线观看| 亚洲av无码av在线播放| 亚洲一本大道无码av天堂| 久久精品国产亚洲av四虎|