真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

深入淺析MySQL數(shù)據(jù)庫(kù)當(dāng)中的undo日志-創(chuàng)新互聯(lián)

這篇文章給大家介紹深入淺析MySQL數(shù)據(jù)庫(kù)當(dāng)中的undo日志,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供德州網(wǎng)站建設(shè)、德州做網(wǎng)站、德州網(wǎng)站設(shè)計(jì)、德州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、德州企業(yè)網(wǎng)站模板建站服務(wù),十年德州做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

概念介紹:

我們知道,MySQL中的redo日志記錄了事務(wù)的行為,在服務(wù)器宕機(jī)的時(shí)候,可以通過重做事務(wù)來達(dá)到恢復(fù)數(shù)據(jù)的目的,然而,有的時(shí)候,事務(wù)還有回滾的需求,也就是說,我們需要知道某條在變成當(dāng)前情況之前的樣子,這種情況下,undo日志就派上用場(chǎng)了。也就是說,undo日志是為了將數(shù)據(jù)恢復(fù)到修改之前的樣子,因此在對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改的時(shí)候,我們需要知道,這個(gè)過程中會(huì)產(chǎn)生redo日志和undo日志。

存儲(chǔ)位置:

我們還知道,redo日志一般情況下放在redo日志文件中,也就是常說的ib_log中,而undo日志存放在數(shù)據(jù)庫(kù)內(nèi)部的一個(gè)"段"中,這個(gè)概念,我們?cè)?月21號(hào)的文章中有講過,忘記的同學(xué)可以回去看看,undo日志的段位于共享表空間內(nèi)。

回滾操作:

現(xiàn)在,我們已經(jīng)知道了undo的概念,其實(shí)就是共享表空間中的一塊區(qū)域,它的主要作用是將事務(wù)恢復(fù)到執(zhí)行修改之前的樣子,但是,恢復(fù)的情況一般分為兩種,一種是邏輯恢復(fù),一種是物理恢復(fù),這里需要非常強(qiáng)調(diào)的是,undo的恢復(fù)是邏輯恢復(fù),也就是說,如果你插入了100w條數(shù)據(jù),導(dǎo)致innodb分配了一個(gè)新的數(shù)據(jù)頁(yè)來存儲(chǔ)這些數(shù)據(jù),那么在事務(wù)進(jìn)行回滾的時(shí)候,undo的功能并不是回收這個(gè)數(shù)據(jù)頁(yè),而是將這些insert的操作,改變成delete的操作從而執(zhí)行回滾。在這個(gè)過程中,共享表空間的大小并不會(huì)發(fā)生改變。除此之外,undo日志會(huì)將delete操作轉(zhuǎn)化為insert操作,update操作轉(zhuǎn)化為反向的update操作。

刪除方式:

還有一點(diǎn)需要注意,事務(wù)共享表空間中寫入undo日志的過程同樣需要寫入redo日志,事務(wù)一旦提交,也就意味著事務(wù)的持久性生效,那么undo日志則不被需要,但是innodb并不會(huì)把這個(gè)undo日志直接刪除,而是放在一個(gè)undo日志的鏈表中,到底什么時(shí)候刪除取決于mysql的purge線程,這樣做是為了避免其他的事務(wù)需要通過undo日志來得到這條記錄之前的版本。

空間分配:

在實(shí)際操作中,一個(gè)數(shù)據(jù)庫(kù)實(shí)例上可能會(huì)進(jìn)行很多事務(wù),如果我們?yōu)槊恳粋€(gè)事務(wù)都分配單獨(dú)的日志數(shù)據(jù)頁(yè)來保存undo將會(huì)非常的浪費(fèi)存儲(chǔ)空間,我們簡(jiǎn)單算一算,假設(shè)一個(gè)應(yīng)用的TPS為1000,為每個(gè)事務(wù)分配一個(gè)undo頁(yè),我們之后到一個(gè)數(shù)據(jù)頁(yè)的大小是16kb,1分鐘將會(huì)產(chǎn)生60*1000個(gè)數(shù)據(jù)頁(yè),那么一分鐘大約需要的空間就是960M的磁盤空間,這樣顯然是不合理的,因此,在innodb中,對(duì)于undo頁(yè)可以進(jìn)行重用,具體的方法是,事務(wù)提交的時(shí)候,現(xiàn)將undo頁(yè)放入鏈表中,然后判斷這個(gè)undo頁(yè)的使用空間是否小于75%,如果是的話,那么這個(gè)undo頁(yè)就可以被重用,之后的undo日志就可以追加在當(dāng)前undo日志的后面。當(dāng)然,我們可以通過show engine innodb status來查看鏈表中undo log 的數(shù)量

關(guān)于深入淺析MySQL數(shù)據(jù)庫(kù)當(dāng)中的undo日志就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


新聞名稱:深入淺析MySQL數(shù)據(jù)庫(kù)當(dāng)中的undo日志-創(chuàng)新互聯(lián)
標(biāo)題來源:http://weahome.cn/article/dedjdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部