MySQL 8.0.2 新特性 UNDO表空間管理的靈活性提升
一篇自己翻譯的文章,原文來自MySQL Server官方團隊部落格:
原文連結:
同時也釋出在了老葉茶館:
https://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653930802&idx=1&sn=db6c9acab8fb41da004f36ff90355258&chksm=bd3b5f588a4cd64e25e1beeac66d6a71beaa2ff0617ea8e46d3af5f9a3aecb4ff744b8d06b26&scene=38#wechat_redirect
在MySQL 8.0.2 DMR版本中,我們將提高InnoDB的UNDO表空間易管理性。
〇 主要有幾點提升:
1、可以隨時自由地建立或刪除UNDO表空間;
2、無論是否需要進行InnoDB恢復,也可以在啟動前更改相關設定;
3、即便InnoDB引擎處於繁忙狀態時,也可以增加或減少UNDO表空間的數量。
〇 innodb_undo_tablespaces:
UNDO表空間包括回滾段,而回滾段又包括UNDO日誌。UNDO日誌用於'回滾'事務和建立MVCC所需要的舊版本資料,以便在一個事務中保證資料庫快照的一致性。
以前,當資料庫初始化時,InnoDB的UNDO表空間的數量是確定的。而現在可以隨時將其值設定為0~127之間的任意值,並可透過啟動時讀取的配置檔案,或者命令列,或者透過線上‘SET GLOBAL INNODB_UNDO_TABLESPACES=n’進行修改。
當UNDO表空間數量設定為0時(不使用獨立UNDO表空間),所有的回滾段將儲存在系統表空間中。這是在 5.6版本之前,無法支援獨立UNDO表空間儲存回滾段情景下的舊模式。我們嘗試透過這種方式儘量不使用系統表空間,所以預設值不會設定為2。在將來的版本中該選項最小值是2,這表明系統表空間將不會被用作任何回滾段。所以請不要在你的配置檔案中設定innodb_undo_tablespaces=0。
〇 innodb_undo_log_truncate:
我們將UNDO表空間的最小值設為2,因為當一個UNDO表空間被清空時,至少還需要有另一個UNDO表空間。InnoDB將在大事務結束後進行UNDO清除操作以收縮UNDO表空間大小。以前,innodb_undo_log_truncate的預設值為OFF,而在8.0.2版本該值預設為ON。
〇 innodb_rollback_segments:
選擇可以隨時設定為1~128之間的任何值。可透過啟動時讀取的配置檔案,或直接在命令列中傳遞引數,或者啟動後線上執行命令‘SET GLOBAL INNODB_ROLLBACK_SEGMENTS=n’。
這個選項曾是用於整個伺服器可以支援的回滾段數。現在為每一個UNDO表空間的回滾段數,允許併發事務使用更多的回滾段數,該選項預設值仍為128。
〇 innodb_undo_logs:
該選項在5.6中作為innodb_rollback_segments的替代或者別名所引入。在InnoDB中術語有一點兒混亂,‘Undo Logs’儲存在回滾段中,這是UNDO表空間的檔案段。在8.0.2版本,我們打算棄用該選項改用Innodb_rollback_segments選項。在最新的釋出的5.7.19版本中將增加這個不建議使用的warnings提示。
〇 UNDO表空間命名和位置:
UNDO表空間位於innodb_undo_directory所指定的目錄中。如果該選項沒有被使用,則放在‘datadir’中。以前,他們被命名為‘undo001’, ‘undo002’。在8.0.2 DMR版本,他們被稱作‘undo_001’, ‘undo_002’等。改名的原因是在新的UNDO表空間中包含了一個新的頭頁面,其對映了每一個回滾段的位置。而在5.6版本中,當使用獨立UNDO表空間時,其回滾段頭頁面號由系統表空間所跟蹤,並且限制整個例項的回滾段數為128。
由於每個UNDO表空間可以使用這個新頁來跟蹤自己的回滾段,這些是真正新的UNDO表空間型別,並需要有不同的命名約定。這也是innodb_rollback_segments現在定義每個UNDO表空間回滾段數量而不是整個MySQL例項數量的原因。
〇 自動升級:
在此更變之前,系統表空間會跟蹤所有回滾段,無論他們位於系統表空間還是UNDO表空間。如果現在在一個使用系統表空間跟蹤回滾段的已經存在了的資料庫上啟動MySQL 8.0.2,將自動生成至少兩個新的UNDO表空間。這將是很正常的,因為innodb_undo_tablespaces之前的預設值為0。MySQL 5.7資料庫將直接透過升級程式,其中包括從舊的FRM檔案建立新的DD。作為此程式的一部分,還將建立至少兩個新的UNDO表空間。已經存在於系統表空間中的回滾段和UNDO表空間,如果尚有未清除的undo log,則它們仍然會被InnoDB識別並使用。但是InnoDB不會將這些老的回滾段分配給任何新的事務。所以一旦UNDO恢復完成,並不再需要這些UNDO日誌,舊的UNDO表空間也將被刪除。
〇 更多好處:
此新特性允許你在資料庫規模增長時,動態地新增更多的UNDO表空間和回滾段。使用更多的UNDO表空間,可以更輕鬆地透過UNDO表空間清除來減少用於存放回滾段的磁碟空間消耗。此外,更多的回滾段意味著併發事務可儘可能的使用單獨的回滾段,以減少相同資源的爭用。
Thanks for using MySQL!
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}
原文連結:
同時也釋出在了老葉茶館:
https://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653930802&idx=1&sn=db6c9acab8fb41da004f36ff90355258&chksm=bd3b5f588a4cd64e25e1beeac66d6a71beaa2ff0617ea8e46d3af5f9a3aecb4ff744b8d06b26&scene=38#wechat_redirect
在MySQL 8.0.2 DMR版本中,我們將提高InnoDB的UNDO表空間易管理性。
〇 主要有幾點提升:
1、可以隨時自由地建立或刪除UNDO表空間;
2、無論是否需要進行InnoDB恢復,也可以在啟動前更改相關設定;
3、即便InnoDB引擎處於繁忙狀態時,也可以增加或減少UNDO表空間的數量。
〇 innodb_undo_tablespaces:
UNDO表空間包括回滾段,而回滾段又包括UNDO日誌。UNDO日誌用於'回滾'事務和建立MVCC所需要的舊版本資料,以便在一個事務中保證資料庫快照的一致性。
以前,當資料庫初始化時,InnoDB的UNDO表空間的數量是確定的。而現在可以隨時將其值設定為0~127之間的任意值,並可透過啟動時讀取的配置檔案,或者命令列,或者透過線上‘SET GLOBAL INNODB_UNDO_TABLESPACES=n’進行修改。
當UNDO表空間數量設定為0時(不使用獨立UNDO表空間),所有的回滾段將儲存在系統表空間中。這是在 5.6版本之前,無法支援獨立UNDO表空間儲存回滾段情景下的舊模式。我們嘗試透過這種方式儘量不使用系統表空間,所以預設值不會設定為2。在將來的版本中該選項最小值是2,這表明系統表空間將不會被用作任何回滾段。所以請不要在你的配置檔案中設定innodb_undo_tablespaces=0。
〇 innodb_undo_log_truncate:
我們將UNDO表空間的最小值設為2,因為當一個UNDO表空間被清空時,至少還需要有另一個UNDO表空間。InnoDB將在大事務結束後進行UNDO清除操作以收縮UNDO表空間大小。以前,innodb_undo_log_truncate的預設值為OFF,而在8.0.2版本該值預設為ON。
〇 innodb_rollback_segments:
選擇可以隨時設定為1~128之間的任何值。可透過啟動時讀取的配置檔案,或直接在命令列中傳遞引數,或者啟動後線上執行命令‘SET GLOBAL INNODB_ROLLBACK_SEGMENTS=n’。
這個選項曾是用於整個伺服器可以支援的回滾段數。現在為每一個UNDO表空間的回滾段數,允許併發事務使用更多的回滾段數,該選項預設值仍為128。
〇 innodb_undo_logs:
該選項在5.6中作為innodb_rollback_segments的替代或者別名所引入。在InnoDB中術語有一點兒混亂,‘Undo Logs’儲存在回滾段中,這是UNDO表空間的檔案段。在8.0.2版本,我們打算棄用該選項改用Innodb_rollback_segments選項。在最新的釋出的5.7.19版本中將增加這個不建議使用的warnings提示。
〇 UNDO表空間命名和位置:
UNDO表空間位於innodb_undo_directory所指定的目錄中。如果該選項沒有被使用,則放在‘datadir’中。以前,他們被命名為‘undo001’, ‘undo002’。在8.0.2 DMR版本,他們被稱作‘undo_001’, ‘undo_002’等。改名的原因是在新的UNDO表空間中包含了一個新的頭頁面,其對映了每一個回滾段的位置。而在5.6版本中,當使用獨立UNDO表空間時,其回滾段頭頁面號由系統表空間所跟蹤,並且限制整個例項的回滾段數為128。
由於每個UNDO表空間可以使用這個新頁來跟蹤自己的回滾段,這些是真正新的UNDO表空間型別,並需要有不同的命名約定。這也是innodb_rollback_segments現在定義每個UNDO表空間回滾段數量而不是整個MySQL例項數量的原因。
〇 自動升級:
在此更變之前,系統表空間會跟蹤所有回滾段,無論他們位於系統表空間還是UNDO表空間。如果現在在一個使用系統表空間跟蹤回滾段的已經存在了的資料庫上啟動MySQL 8.0.2,將自動生成至少兩個新的UNDO表空間。這將是很正常的,因為innodb_undo_tablespaces之前的預設值為0。MySQL 5.7資料庫將直接透過升級程式,其中包括從舊的FRM檔案建立新的DD。作為此程式的一部分,還將建立至少兩個新的UNDO表空間。已經存在於系統表空間中的回滾段和UNDO表空間,如果尚有未清除的undo log,則它們仍然會被InnoDB識別並使用。但是InnoDB不會將這些老的回滾段分配給任何新的事務。所以一旦UNDO恢復完成,並不再需要這些UNDO日誌,舊的UNDO表空間也將被刪除。
〇 更多好處:
此新特性允許你在資料庫規模增長時,動態地新增更多的UNDO表空間和回滾段。使用更多的UNDO表空間,可以更輕鬆地透過UNDO表空間清除來減少用於存放回滾段的磁碟空間消耗。此外,更多的回滾段意味著併發事務可儘可能的使用單獨的回滾段,以減少相同資源的爭用。
Thanks for using MySQL!
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2144625/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 5.7新特性之線上收縮undo表空間MySql
- 自動undo表空間模式下切換新的undo表空間模式
- Oracle undo 表空間管理Oracle
- oracle undo表空間管理Oracle
- MySQL8.0 · 引擎特性 · 關於undo表空間的一些新變化MySql
- MySQL InnoDB Undo表空間配置MySql
- Oracle的UNDO表空間管理總結Oracle
- MySQL 8.0表空間新特性簡單實驗MySql
- 10.管理UNDO表空間.(筆記)筆記
- Oracle Database 10g新特性-改善的表空間管理OracleDatabase
- oracle undo 表空間Oracle
- 理解UNDO表空間
- 監控和管理Oracle UNDO表空間的使用Oracle
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- MySQL UNDO表空間獨立和截斷MySql
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- 如何計算自動管理的UNDO表空間大小
- oracle重建UNDO表空間Oracle
- undo表空間總結
- mysql 查詢undo空間MySql
- undo表空間中常用的操作
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- Oracle 18c新特性詳解 - 表和表空間相關的新特性Oracle
- undo表空間故障處理
- Oracle - 回滾表空間 Undo 的整理Oracle
- UNDO表空間損壞的處理
- 有關UNDO表空間的學習:
- 10G 新特性系列: SYSAUX 表空間UX
- ORACLE線上切換undo表空間Oracle
- UNDO表空間不足解決方法
- Oracle undo表空間切換(ZT)Oracle
- Undo表空間與redo日誌
- oracle回滾段 undo 表空間Oracle
- ORACLE撤銷表空間(Undo Tablespaces)Oracle
- Oracle 12c 新特性 - 臨時表undo(TEMP UNDO)Oracle
- undo 表空間滿了的處理方法
- undo表空間不能回收的解決方法
- Oracle undo表空間爆滿的解決Oracle