您好,登錄后才能下訂單哦!
這篇文章主要講解了“mysql undo存儲管理的原理”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql undo存儲管理的原理”吧!
一.undo存儲管理
1.innodb存儲引擎對undo的管理同樣采用段的方式。
每個rollback segment 包含1024個undo log segment,事務(wù)再每個undo log segment中進行undo頁的申請。
2.innodb1.2開始,可以通過下面參數(shù)對rollback segment做進一步的設(shè)置:
innodb_undo_directory #undo表空間存放目錄
innodb_undo_logs #設(shè)置rollback segment的個數(shù)
innodb_undo_tablespaces #設(shè)置構(gòu)成rollback segment文件的數(shù)量,這樣可以較為平均的分布在多個文件中
innodb_undo_log_truncate #參數(shù)設(shè)置為1,即開啟在線回收(收縮)undo log日志文件,支持動態(tài)設(shè)置
innodb_max_undo_log_size #當undo表空間超過該參數(shù)設(shè)定時,會標記為truncation,選擇一個undo表空間進行截斷
innodb_purge_rseg_truncate_frequency #undo 表空間一般不能直接truncate,需要在所有回滾段釋放完后,才能truncate, purge system每128次釋放一次回滾段,可以通過參數(shù)
3.事務(wù)在undo log segment分配頁寫入undo log的過程同樣需要寫入重做日志,當事務(wù)提交時,innodb會做以下兩件事:
-將undo log放入列表,以供以后的purge操作
-判斷undo log 所在頁是否可以重用,若可以則分配給下個事務(wù)使用
二.undo log格式
1.insert undo log
指在insert操作中產(chǎn)生的undo log,因為insert操作的記錄只對事務(wù)本身可見。因此該undo log在事務(wù)提交后直接刪除,不需要進行purge操作。
2.update undo log
記錄的是對delete和update操作產(chǎn)生的undo log,該log需要提供mvcc機制,因此不能在事務(wù)提交時就進行刪除。提交時放入undo log鏈表,等待purge線程進行清除。
三.查看undo信息
1.查看rollback segment所在頁
select segment_id,space,page_no from information_schema.innodb_trx_rollback_segment;
2.記錄事務(wù)對應(yīng)的undo log信息
select * from information_schema.INNODB_TRX_UNDO\G;
四.purge 機制
purge用來最終完成delete和update操作。
全局動態(tài)參數(shù)innodb_purge_batch_size用來設(shè)置每次purge操作需要清理的undo page數(shù)量。默認值為300
全局動態(tài)參數(shù)innodb_max_purge_lag用來控制history list的長度,若大于該參數(shù)時,其會延緩DML的操作
全局動態(tài)參數(shù)innodb_max_purge_lag_delay,用來控制DML操作每行數(shù)據(jù)的最大延緩時間,單位為毫秒。
感謝各位的閱讀,以上就是“mysql undo存儲管理的原理”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對mysql undo存儲管理的原理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。