web-dev-qa-db-ja.com

sysjobstepslogsテーブルの予約済みスペースを再利用するにはどうすればよいですか

SQL Server 2008 R2データベースサーバーに36GBのmsdbデータベースがあります。私が読んだことから、これは巨大であるという点を超えています。 msdbデータベースのテーブルを見ると、sysjobstepslogsテーブルがデータベースのスペースの97%を使用しています。原因は、いくつかのジョブに、テーブルへのログオプションが設定されたステップ+長時間実行トランザクション+ msdbデータベースのスナップショットアイソレーションが設定されていることが原因であることがわかりました。これらのジョブでは、このオプションは無効になっています。

テーブルの切り捨て、インデックスの再作成、再編成、テーブルのチェック、ファイルの圧縮、データベースの圧縮(その順序はかなり多い)を行うことでサイズを小さくしようとしましたが、sysjobstepslogsテーブルには、0行以上あり、35 GB以上が予約されており、中古。

スペースを解放するためにスナップショットアイソレーションを無効にしてから再度有効にすることをお勧めしますが、 このMSDNフォーラムのディスカッション によると、msdbデータベースでスナップショットアイソレーションを無効にすることはできません。

テーブルを削除して再作成することを検討しましたが、テーブルをシステムテーブルとして再作成するにはどうすればよいですか?

このスペースを取り戻す方法はありますか?

3

あなたは単にテーブルを再構築してみることができます:

ALTER TABLE dbo.sysjobstepslogs REBUILD;

Enterprise(またはEvaluationまたはDeveloper)を使用している場合は、次のことができます。

ALTER TABLE dbo.sysjobstepslogs REBUILD WITH (ONLINE = ON);

テーブルには単一のクラスター化インデックス(PK_SomeAwfulGUID-basedName)とこの再構築操作により、まだテーブルに関連付けられている可能性のあるすべてのページの割り当てが解除されます。

2
Aaron Bertrand