PostgreSQL 可見(jiàn)性映射

2021-09-15 14:07 更新

每一個(gè)堆關(guān)系都有一個(gè)可見(jiàn)性映射(VM)用來(lái)跟蹤哪些頁(yè)面 只包含已知對(duì)所有活動(dòng)事務(wù)可見(jiàn)的元組,它也跟蹤哪些頁(yè)面只包含 未被凍結(jié)的元組。它伴隨著主關(guān)系數(shù)據(jù)被存儲(chǔ)在一個(gè)獨(dú)立的關(guān)系分支中, 以該關(guān)系的文件節(jié)點(diǎn)號(hào)加上一個(gè)_vm后綴來(lái)命名。例如, 如果一個(gè)關(guān)系的文件節(jié)點(diǎn)為12345,其VM被存儲(chǔ)在名為12345_vm的文件中, 該文件域主關(guān)系文件在同一個(gè)目錄中。注意索引沒(méi)有VM。

可見(jiàn)性映射僅為每個(gè)堆頁(yè)面存儲(chǔ)兩個(gè)位。第一位如果被設(shè)置, 表示該頁(yè)面上的元組都是可見(jiàn)的,或者換句話說(shuō)該頁(yè)面不含有 任何需要被清理的元組。這些信息也可以被index-only scans用來(lái)只依靠索引元組回答查詢。第二位如果 被設(shè)置,表示該頁(yè)面上的元組都已經(jīng)被凍結(jié)。這也意味著防回卷 清理操作也不需要重新訪問(wèn)該頁(yè)面。

該映射是保守的,我們可以確定不論何時(shí)一個(gè)位被設(shè)置,那就說(shuō)明條件為真,但是如果一個(gè)位沒(méi)有被設(shè)置,它可能為真也可能不為真??梢?jiàn)性映射的位只會(huì)被清理操作設(shè)置,但是可以被任何在頁(yè)面上進(jìn)行的數(shù)據(jù)修改操作清除。

pg_visibility模塊可以被用來(lái)檢查存儲(chǔ)在可見(jiàn)性 映射中的信息。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)