データベースの圧縮

このトピックでは、SQL Server Management Studio または Transact-SQL から SQL Server 2012 のオブジェクトを使用して、データベースを圧縮する方法について説明します。

ファイルの末尾にあるデータのページを、ファイルの先頭に近い占有されていない領域に移動することにより、データ ファイルが圧縮され、領域が回復されます。 ファイル末尾に十分な空き領域が作成された場合は、ファイル末尾のデータ ページの割り当てを解除して、ファイル システムに戻すことができます。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    推奨事項

    セキュリティ

  • 以下を使用してデータベースを圧縮するには:

    SQL Server Management Studio

    Transact-SQL

  • 補足情報: データベースの圧縮

作業を開始する準備

制限事項と制約事項

  • データベースは、そのデータベースの最小サイズより小さくすることはできません。 最小サイズは、データベースが最初に作成されたときに指定されたサイズか、DBCC SHRINKFILE などのファイル サイズ変更操作によって最後に明示的に設定されたサイズのいずれかになります。 たとえば、作成時にサイズを 10 MB に指定したデータベースが 100 MB まで拡張した場合、データベース内のすべてのデータを削除したとしても、縮小できる限界は 10 MB までです。

  • データベースのバックアップ中、データベースを圧縮することはできません。 逆に、データベースの圧縮操作の進行中、データベースをバックアップすることはできません。

  • DBCC SHRINKDATABASE は、xVelocity メモリ最適化列ストア インデックスを検出すると失敗します。 列ストア インデックスを検出する前に完了した処理は成功するので、データベースが小さくなる場合があります。 DBCC SHRINKDATABASE を完了するには、DBCC SHRINKDATABASE を実行する前にすべての列ストア インデックスを無効にし、後で列ストア インデックスを再構築します。

推奨事項

  • データベース内にある現在の空き (未割り当て) 領域の大きさを確認します。 詳細については、「データベースのデータ領域とログ領域情報の表示」を参照してください。

  • データベースを圧縮する場合は次のことを考慮してください。

    • 圧縮操作は、テーブルの切り捨てやテーブルの削除操作など、大きな未使用領域を生成する操作の後に実行すると最も効果的です。

    • ほとんどのデータベースでは、毎日の定期的操作で使用するための空き領域が必要です。 データベースを何度圧縮しても、データベースのサイズが大きくなってしまう場合は、通常の操作にそれだけの領域が必要であることを示しています。 このような場合、繰り返しデータベースを圧縮することは無意味です。

    • 圧縮操作では、データベース内のインデックスの断片化状態は保持されず、一般に、断片化の程度が大きくなります。 この理由からも、データベースを繰り返し圧縮することはお勧めできません。

    • 特別な要件がない限り、AUTO_SHRINK データベース オプションを ON に設定しないでください。

セキュリティ

権限

固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバーシップである必要があります。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

SQL Server Management Studio の使用

データベースを圧縮するには

  1. オブジェクト エクスプローラーで、SQL Server データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. [データベース] を展開し、圧縮するデータベースを右クリックします。

  3. [タスク][圧縮] の順にポイントし、[データベース] をクリックします。

    • [データベース]
      選択されているデータベースの名前を表示します。

    • [現在割り当てられている領域]
      選択されているデータベースの使用済み領域と未使用領域の合計を表示します。

    • [使用可能な空き領域]
      選択されているデータベースのログ ファイルおよびデータ ファイル内の空き領域の合計を表示します。

    • [未使用領域の解放前にファイルを再構成する]
      このオプションをオンにすることは、目的のパーセント オプションを指定して DBCC SHRINKDATABASE を実行することと同じです。 このオプションをオフにすると、TRUNCATEONLY オプションを使用して DBCC SHRINKDATABASE を実行するのと同じ効果があります。 既定では、ダイアログが開いたときに、このオプションはオフに設定されます。 このオプションをオンにした場合、ユーザーは目的のパーセント オプションを指定する必要があります。

    • [圧縮後のファイルの最大空き領域]
      データベースを圧縮した後に、データベース ファイル内に残す空き領域の最大パーセンテージを入力します。 0 ~ 99 の値を指定できます。

  4. [OK] をクリックします。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

Transact-SQL の使用

データベースを圧縮するには

  1. データベース エンジンに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例では、DBCC SHRINKDATABASE を使用して、UserDB データベース内のデータ ファイルとログ ファイルのサイズを圧縮し、データベースの空き領域が 10% になるようにします。

DBCC SHRINKDATABASE (UserDB, 10);
GO

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

補足情報: データベースを圧縮した後

ファイルを圧縮するために移動されたデータは、ファイル内のあらゆる使用可能な場所に分散される場合があります。 これにより、インデックスの断片化が発生し、広範なインデックスを検索するクエリのパフォーマンスが低下する場合があります。 断片化を解消するには、圧縮後にファイルのインデックスを再構築することを検討してください。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

参照

sys.databases (Transact-SQL)

sys.database_files (Transact-SQL)

DBCC (Transact-SQL)

DBCC SHRINKFILE (Transact-SQL)

概念

ファイルの圧縮

データベース ファイルとファイル グループ