這篇文章主要講解了“MySQL undo存儲管理的原理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“mysql undo存儲管理的原理”吧!
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),德清企業(yè)網(wǎng)站建設(shè),德清品牌網(wǎng)站建設(shè),網(wǎng)站定制,德清網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,德清網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
一.undo存儲管理
1.innodb存儲引擎對undo的管理同樣采用段的方式。
每個rollback segment 包含1024個undo log segment,事務(wù)再每個undo log segment中進(jìn)行undo頁的申請。
2.innodb1.2開始,可以通過下面參數(shù)對rollback segment做進(jìn)一步的設(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 #當(dāng)undo表空間超過該參數(shù)設(shè)定時,會標(biāo)記為truncation,選擇一個undo表空間進(jìn)行截斷
innodb_purge_rseg_truncate_frequency #undo 表空間一般不能直接truncate,需要在所有回滾段釋放完后,才能truncate, purge system每128次釋放一次回滾段,可以通過參數(shù)
3.事務(wù)在undo log segment分配頁寫入undo log的過程同樣需要寫入重做日志,當(dāng)事務(wù)提交時,innodb會做以下兩件事:
-將undo log放入列表,以供以后的purge操作
-判斷undo log 所在頁是否可以重用,若可以則分配給下個事務(wù)使用
二.undo log格式
1.insert undo log
指在insert操作中產(chǎn)生的undo log,因為insert操作的記錄只對事務(wù)本身可見。因此該undo log在事務(wù)提交后直接刪除,不需要進(jìn)行purge操作。
2.update undo log
記錄的是對delete和update操作產(chǎn)生的undo log,該log需要提供mvcc機(jī)制,因此不能在事務(wù)提交時就進(jìn)行刪除。提交時放入undo log鏈表,等待purge線程進(jìn)行清除。
三.查看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 機(jī)制
purge用來最終完成delete和update操作。
全局動態(tài)參數(shù)innodb_purge_batch_size用來設(shè)置每次purge操作需要清理的undo page數(shù)量。默認(rèn)值為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)過本文的學(xué)習(xí)后,相信大家對mysql undo存儲管理的原理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!