Umgebung: SQL Server 2008 SPK1 Enterprise Edition.
Ich habe eine große Tabelle, die varbinary
und blob
Daten speichert. Wenn ich den Speicherauslastungsbericht in SSMS ausführe, sehen wir, dass etwa ein Drittel des Speicherplatzes in unseren Datenbanken (es gibt Hunderte für diese Anwendung) als "Unbenutzter Speicherplatz" angezeigt wird (Ich meine nicht nicht allokiert.)
Ich bin auf eine Reihe von Lösungen von Leuten im Internet gestoßen, die nicht funktionieren.
dbcc cleantable
- Löschen des gruppierten Index und Neuerrichten
- Neuaufbau aller Indexe
Wenn ich select * into
eine andere Tabelle ausführe, wird die Tabelle ohne den ganzen zusätzlichen Ballast neu aufgebaut.
Wenn ich folgendes ausführe:
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');
Erhalte ich:
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
Was meiner Meinung nach zeigt, dass erheblicher Speicherplatz allokiert ist. Die Frage ist, warum kann ich diesen Speicherplatz nicht reduzieren? Über Hunderte von Datenbanken hinweg reden wir über Terabytes an verschwendetem Platz.