環境: SQL Server 2008 spk1 Enterprise エディション。
データを格納する大きなテーブルがvarbinary
ありblob
ます。SSMS でディスク使用状況レポートを実行すると、データベース内の約 3 分の 1 のスペース (このアプリケーションには数百あります) が「未使用スペース」として表示されます (未割り当てという意味ではありません)。
私は、インターウェブ上で機能しない人々からの多くの解決策に出くわしました。
dbcc cleantable
- クラスター化インデックスを削除して再構築する
- すべてのインデックスの再構築
別のテーブルの場合select * into
、余分な手間をかけずにテーブルを再構築します。
私が実行した場合:
SELECT alloc_unit_type_desc, avg_page_space_used_in_percent, record_count,
ghost_record_count FROM sys.dm_db_index_physical_stats
(DB_ID(N'Test_dbname'), OBJECT_ID(N'table_name'), NULL, NULL , 'DETAILED');
私は受け取ります:
alloc_unit_type_desc avg_page_space_used_in_percent record_count ghost_record_count
IN_ROW_DATA 66.7239065974796 12404285 0
IN_ROW_DATA 0.850741289844334 333460 0
IN_ROW_DATA 44.903076352854 80002 0
IN_ROW_DATA 78.5273041759328 374 0
LOB_DATA 64.0441438102298 62248788 0
これは、かなりのスペースが割り当てられていることを示していると思います。問題は、なぜこのスペースを縮小できないのかということです。数百のデータベースの過程で、テラバイト単位の無駄なスペースについて話しています。