2 Stimmen

SQL 2008 BLOB-Daten ungenutzter Speicherplatz kann nicht freigegeben werden

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.

0voto

Tony Hopkinson Punkte 19841

Denken Sie daran wie ein Dateisystem. Indem Sie in eine andere Tabelle auswählen, werden die verwendeten Daten hoffentlich in einem zusammenhängenden Bereich im MDB geschrieben. Dann ändern Sie hier und da ein paar Blobs, das DBMS möchte vernünftigerweise jeden Blob zusammenhängend halten....

Auch wenn es einen Befehl gäbe, um die Tabelle anzupassen, würde es im Grunde genommen das tun, was Sie jetzt tun, alles andere wäre ein Risiko.

Die eigentliche Antwort lautet: Verwenden Sie kein RDBMS, um diese Art von Daten zu speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X