国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

PostgreSQL的vacuum流程

發(fā)布時(shí)間:2021-08-17 12:58 來(lái)源:ITPUB博客 閱讀:0 作者: 欄目: 數據庫

vacuum是一種維護過(guò)程,有助于PostgreSQL的持久運行,它的兩個(gè)主要任務(wù)是刪除死元組,以及凍結事務(wù)標識。

vacuum的作用:
1.釋放,再利用更新/刪除的行所占據的磁盤(pán)空間。
2.更新postgresql查詢(xún)計劃中使用的統計數據。
3.防止因事務(wù)ID的重置而使非常老的數據丟失。

并發(fā)清理過(guò)程為指定的表或者數據庫中的表執行以下任務(wù):

第一部分
1.從指定的表中依次處理每一張表,
2.獲取表上的ShareUpdateExclusiveLock鎖(該鎖允許其他事物對該表進(jìn)行讀?。?。
3.掃描表中的所有頁(yè)面,獲取所有的死亡元組,(死元組的列表存儲在本地內存的maintenance_work_mem里)
4.如果有必要,凍結舊的元組的事務(wù)標識
5.移除指向死亡元組的索引元組
第二部分
1.移除每一頁(yè)中的死亡元組,并對每一頁(yè)內的的活元組進(jìn)行碎片整理,重排本頁(yè)的活元組
2.更新已經(jīng)處理的空閑空間映射(FSM)和可見(jiàn)性映射(VM)
PG會(huì )不斷執行這個(gè)過(guò)程直至最后一頁(yè)
第三部分
1.如果最后一個(gè)頁(yè)面沒(méi)有任何元組,則截斷最后一頁(yè)
2.更新與凍結事務(wù)標識相關(guān)的系統視圖(pg_class與pg_database)
3.釋放ShareUpdateExclusiveLock鎖
第四部分
1.更新一些統計信息(pg_stat_all_tables等)
2.移除不必要的提交日志文件,移除CLOG(10版本及以后為xact)中的非必要文件與頁(yè)面
(當更新pg_database.datfrozenxid時(shí),會(huì )嘗試刪除不必要的CLOG)

清理過(guò)程會(huì )使用共享緩存,處理過(guò)的頁(yè)面不會(huì )緩存在共享緩存里。
為了移除死亡元組,清理過(guò)程有兩種模式,分別是并發(fā)清理與完整清理。清理過(guò)程刪除表文件每個(gè)頁(yè)面中的死元組,而其他事務(wù)可以在其運行時(shí)繼續讀取該表。相反,完整清理不僅會(huì ) 移除整個(gè)文件中所有的死元組,還會(huì )對整個(gè)文件中所有的活元組進(jìn)行碎片整理。其他事務(wù)在完整清理運行時(shí)無(wú)法訪(fǎng)問(wèn)該表。
清理過(guò)程涉及全表掃描,所以引入了可見(jiàn)性映射(Visibility Map,VM)來(lái)提高移除死元組的效率。

VM:每個(gè)表都有各自的可見(jiàn)性映射,用于保存表文件中每個(gè)頁(yè)面的可見(jiàn)性,頁(yè)面的可見(jiàn)性確定了每個(gè)頁(yè)面是否包含死亡元組。清理過(guò)程可以跳過(guò)沒(méi)有死亡元組的頁(yè)面。

如圖,假設一個(gè)表包含三個(gè)頁(yè)面,第0號頁(yè)和第2號頁(yè)包含死亡元組,但是第一號頁(yè)不包含死亡元組,在可見(jiàn)性映射中保存著(zhù)包含死亡元組的信息,則在清理過(guò)程中,會(huì )參考VM,跳過(guò)第一個(gè)頁(yè)面清理下邊的頁(yè)面。
每個(gè)VM 文件后綴_vm保存,如一個(gè)表文件的relfilenode是2612,則VM文件為2612_vm,VM在9.6版本做了加強,除了顯示頁(yè)面可見(jiàn)性,還包含了頁(yè)面中原則是否全部?jì)鼋Y的信息。

凍結過(guò)程分兩種模式:惰性模式和迫切模式。

惰性模式在開(kāi)始凍結處理時(shí),PG會(huì )計算freezelimit_txid,并凍結t_xmin小于freezelimit_txid的元組,
freezelimit_txid=(OldestXmin-vacuum_freeze_min_age)
OldestXmin是當前正在運行的事務(wù)中最早的事務(wù)標識,vacuum_freeze_min_age是一個(gè)配置參數(默認為50000000)

迫切模式 9.5版本之前會(huì )掃描所有頁(yè)以檢查表中的所有元組,更新相關(guān)的系統目錄,并在可能的情況下刪除不必要的文件和clog頁(yè)。
滿(mǎn)足pg_database.datfrozenxid <(OldestXmin-vacuum_freeze_table_age)時(shí),會(huì )觸發(fā)迫切模式,vacuum_freeze_table_age 默認值為150000000。
凍結每個(gè)表后,目標表的pg_class.relfrozenxid被更新。 在完成vacuum處理之前,必要時(shí)更新pg_database.datfrozenxid。每個(gè)pg_database.datfrozenxid列在相應的數據庫中保存最小pg_class.relfrozenxid。

9.6版本進(jìn)行了VM與凍結過(guò)程,新VM包含了每個(gè)頁(yè)面中所有元組是否被全部?jì)鼋Y的信息,在迫切模式下進(jìn)行凍結處理時(shí),可以跳過(guò)僅包含凍結元組的頁(yè)面。

帶有freeze的vacuum會(huì )強制凍結指定表中的所有事務(wù)標識,而且freezeLimit會(huì )被設置為OldestXmin而不是OldestXmin - vacuum_freezre_min_age。


免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

狠狠躁夜夜躁无码中文字幕| 亚洲性久久久影院| 无码午夜人妻一区二区三区不卡视频| 日韩欧美卡一卡二卡新区| 午夜精品久久久久久中宇| 被伴郎的内捧猛烈进出H|