溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL 8.0.2 新特性 UNDO表空間管理的靈活性提升

發(fā)布時(shí)間:2020-08-09 14:53:54 來(lái)源:ITPUB博客 閱讀:249 作者:神諭丶 欄目:MySQL數(shù)據(jù)庫(kù)
一篇自己翻譯的文章,原文來(lái)自MySQL Server官方團(tuán)隊(duì)博客:
原文鏈接:http://mysqlserverteam.com/mysql-8-0-2-more-flexible-undo-tablespace-management/

同時(shí)也發(fā)布在了老葉茶館:
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表空間易管理性。

〇 主要有幾點(diǎn)提升:

1、可以隨時(shí)自由地創(chuàng)建或刪除UNDO表空間;
2、無(wú)論是否需要進(jìn)行InnoDB恢復(fù),也可以在啟動(dòng)前更改相關(guān)設(shè)置;
3、即便InnoDB引擎處于繁忙狀態(tài)時(shí),也可以增加或減少UNDO表空間的數(shù)量。


innodb_undo_tablespaces:
UNDO表空間包括回滾段,而回滾段又包括UNDO日志。UNDO日志用于'回滾'事務(wù)和創(chuàng)建MVCC所需要的舊版本數(shù)據(jù),以便在一個(gè)事務(wù)中保證數(shù)據(jù)庫(kù)快照的一致性。

以前,當(dāng)數(shù)據(jù)庫(kù)初始化時(shí),InnoDB的UNDO表空間的數(shù)量是確定的。而現(xiàn)在可以隨時(shí)將其值設(shè)置為0~127之間的任意值,并可通過(guò)啟動(dòng)時(shí)讀取的配置文件,或者命令行,或者通過(guò)在線‘SET GLOBAL INNODB_UNDO_TABLESPACES=n’進(jìn)行修改。

當(dāng)UNDO表空間數(shù)量設(shè)置為0時(shí)(不使用獨(dú)立UNDO表空間),所有的回滾段將存儲(chǔ)在系統(tǒng)表空間中。這是在 5.6版本之前,無(wú)法支持獨(dú)立UNDO表空間存儲(chǔ)回滾段情景下的舊模式。我們嘗試通過(guò)這種方式盡量不使用系統(tǒng)表空間,所以默認(rèn)值不會(huì)設(shè)置為2。在將來(lái)的版本中該選項(xiàng)最小值是2,這表明系統(tǒng)表空間將不會(huì)被用作任何回滾段。所以請(qǐng)不要在你的配置文件中設(shè)置innodb_undo_tablespaces=0。


〇 innodb_undo_log_truncate:
我們將UNDO表空間的最小值設(shè)為2,因?yàn)楫?dāng)一個(gè)UNDO表空間被清空時(shí),至少還需要有另一個(gè)UNDO表空間。InnoDB將在大事務(wù)結(jié)束后進(jìn)行UNDO清除操作以收縮UNDO表空間大小。以前,innodb_undo_log_truncate的默認(rèn)值為OFF,而在8.0.2版本該值默認(rèn)為ON。



〇 innodb_rollback_segments:
選擇可以隨時(shí)設(shè)置為1~128之間的任何值??赏ㄟ^(guò)啟動(dòng)時(shí)讀取的配置文件,或直接在命令行中傳遞參數(shù),或者啟動(dòng)后在線執(zhí)行命令‘SET GLOBAL INNODB_ROLLBACK_SEGMENTS=n’。


這個(gè)選項(xiàng)曾是用于整個(gè)服務(wù)器可以支持的回滾段數(shù)?,F(xiàn)在為每一個(gè)UNDO表空間的回滾段數(shù),允許并發(fā)事務(wù)使用更多的回滾段數(shù),該選項(xiàng)默認(rèn)值仍為128。


〇 innodb_undo_logs:
該選項(xiàng)在5.6中作為innodb_rollback_segments的替代或者別名所引入。在InnoDB中術(shù)語(yǔ)有一點(diǎn)兒混亂,‘Undo Logs’存儲(chǔ)在回滾段中,這是UNDO表空間的文件段。在8.0.2版本,我們打算棄用該選項(xiàng)改用Innodb_rollback_segments選項(xiàng)。在最新的發(fā)布的5.7.19版本中將增加這個(gè)不建議使用的warnings提示。



〇 UNDO表空間命名和位置:
UNDO表空間位于innodb_undo_directory所指定的目錄中。如果該選項(xiàng)沒(méi)有被使用,則放在‘datadir’中。以前,他們被命名為‘undo001’, ‘undo002’。在8.0.2 DMR版本,他們被稱作‘undo_001’, ‘undo_002’等。改名的原因是在新的UNDO表空間中包含了一個(gè)新的頭頁(yè)面,其映射了每一個(gè)回滾段的位置。而在5.6版本中,當(dāng)使用獨(dú)立UNDO表空間時(shí),其回滾段頭頁(yè)面號(hào)由系統(tǒng)表空間所跟蹤,并且限制整個(gè)實(shí)例的回滾段數(shù)為128。


由于每個(gè)UNDO表空間可以使用這個(gè)新頁(yè)來(lái)跟蹤自己的回滾段,這些是真正新的UNDO表空間類型,并需要有不同的命名約定。這也是innodb_rollback_segments現(xiàn)在定義每個(gè)UNDO表空間回滾段數(shù)量而不是整個(gè)MySQL實(shí)例數(shù)量的原因。


〇 自動(dòng)升級(jí):
在此更變之前,系統(tǒng)表空間會(huì)跟蹤所有回滾段,無(wú)論他們位于系統(tǒng)表空間還是UNDO表空間。如果現(xiàn)在在一個(gè)使用系統(tǒng)表空間跟蹤回滾段的已經(jīng)存在了的數(shù)據(jù)庫(kù)上啟動(dòng)MySQL 8.0.2,將自動(dòng)生成至少兩個(gè)新的UNDO表空間。這將是很正常的,因?yàn)閕nnodb_undo_tablespaces之前的默認(rèn)值為0。MySQL 5.7數(shù)據(jù)庫(kù)將直接通過(guò)升級(jí)進(jìn)程,其中包括從舊的FRM文件創(chuàng)建新的DD。作為此進(jìn)程的一部分,還將創(chuàng)建至少兩個(gè)新的UNDO表空間。已經(jīng)存在于系統(tǒng)表空間中的回滾段和UNDO表空間,如果尚有未清除的undo log,則它們?nèi)匀粫?huì)被InnoDB識(shí)別并使用。但是InnoDB不會(huì)將這些老的回滾段分配給任何新的事務(wù)。所以一旦UNDO恢復(fù)完成,并不再需要這些UNDO日志,舊的UNDO表空間也將被刪除。



更多好處:
此新特性允許你在數(shù)據(jù)庫(kù)規(guī)模增長(zhǎng)時(shí),動(dòng)態(tài)地添加更多的UNDO表空間和回滾段。使用更多的UNDO表空間,可以更輕松地通過(guò)UNDO表空間清除來(lái)減少用于存放回滾段的磁盤(pán)空間消耗。此外,更多的回滾段意味著并發(fā)事務(wù)可盡可能的使用單獨(dú)的回滾段,以減少相同資源的爭(zhēng)用。



Thanks for using MySQL!


p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'}

作者微信公眾號(hào)(持續(xù)更新)
MySQL 8.0.2 新特性 UNDO表空間管理的靈活性提升



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI