

以下の動画の6:00〜によると、不要領域が増えるとメモリにキャッシュされにくくなるとのことです。  
一方、7:30〜によるとFULLでないVACUUMは不要領域をFSMに登録するだけと言われています。  
これではVACUUM後も相変わらず、ディスクの半分が不要領域だとするとキャッシュ用メモリが１GBあっても0.5GB分のレコードしかキャッシュできないのではないでしょうか？

[今、改めて学ぶVACUUM 佐藤 友章
(YouTube)](https://www.youtube.com/watch?v=TMAWwonPGmU&t=2230s)


CC BY-SA 4.0
2022-09-15T11:23:53.810
91121
2022-09-16T05:22:33.940
2022-09-15T11:42:11.723
3060
13882
question
postgresql
PostgreSQLで（FULLでない）VACUUMするとメモリにキャッシュされやすくなりますか？


文言「不要領域」が何なのかわかりませんが、データーベースファイルのうち今この瞬間には読み書きしなくて事足りる領域のことなら、そこは読み書きされないのだからキャッシュメモリを使いません。


CC BY-SA 4.0
2022-09-16T02:48:03.093
91129
2022-09-16T02:48:03.093
8589
91121
answer


> 以下の動画の6:00〜によると、不要領域が増えるとメモリにキャッシュされにくくなるとのことです。

ここでいうキャッシュとはPostgreSQLが管理するもので、ディスクから読んだデータをメモリ上に保持しているようです。  
不要領域とはUPDATE時の旧データやDELETEされた行のデータのことで内部的に削除フラグが立つだけの論理削除のようです。キャッシュされた８KB単位のページには不要領域も含まれるためキャッシュに占める有効なデータ(不要領域でないデータ)が少なくなります。

> 一方、7:30〜によるとFULLでないVACUUMは不要領域をFSMに登録するだけと言われています。  
>
> これではVACUUM後も相変わらず、ディスクの半分が不要領域だとするとキャッシュ用メモリが１GBあっても0.5GB分のレコードしかキャッシュできないのではないでしょうか？

FULLでないVACUUM直後は不要領域が再利用されていないので状況に変わりないと思います。その後のUPDATEやINSERTで不要領域は再利用されるので有効なキャッシュのデータの比率は増えていきます。


CC BY-SA 4.0
2022-09-16T05:21:23.957
91134
2022-09-16T05:22:33.940
2022-09-16T05:22:33.940
3060
35558
91121
answer