2

環境: 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

これは、かなりのスペースが割り当てられていることを示していると思います。問題は、なぜこのスペースを縮小できないのかということです。数百のデータベースの過程で、テラバイト単位の無駄なスペースについて話しています。

4

1 に答える 1

0

ファイリングシステムのようなものだと考えてください。別のテーブルを選択すると、使用されたデータが mdb 内の連続したチャンクに書き込まれます。次に、あちこちでいくつかの BLOB を変更します。DBMS は、各 BLOB を継続的に維持したいと考えています。

したがって、テーブルを四角くするコマンドがあったとしても、基本的には現在行っていることを実行し、他の何かがそれを要求することになります.

本当の答えは、この種のデータを格納するために RDBMS を使用しないことです。

于 2013-01-11T18:03:51.497 に答える