SQLskills SQL101: Why does my heap have a bunch of empty pages?
SQLskills SQL101: Why does my heap have a bunch of empty pages? - Paul S. Randal
概要
- SQL Serverのヒープから、全行deleteされたページが開放されずに残っているのはなぜか? インデックスなら全行削除されたページは開放されるのに。
- その理由は、ヒープから空のページを開放するには、テーブル全体の排他ロックが必要だから。
- ロックエスカレーションが発動するとか、TABLOCKヒントを使うとか、そういうことをしない限り、テーブル全体が排他ロックされることはないので、大量delete後にヒープには空のページが残ってしまうのだ。
- もっというと、SNAPSHOP ISOLATIONの下では、TABLOCKヒントを使っても空ページは開放されない。
- データベースのshrinkをすれば空ページは回収できるが、インデックスの断片化を起こすのと、重い処理なのとで、shrinkはお勧めできない。
語彙
- caveat: 警告。