2016-04-28 8 views
1

SQL Serverがデータを格納するためにディスクスペースを消費する方法を確認したいと思います。私は最近、約100GBのテーブルをドロップし、ハードディスクは同じままです(ドロップ前のサイズは30GB、ドロップ操作後、サイズは130GBになるはずです)。 Webからのチェックの後、SQL Serverが自動的にそれを処理しないことに気付き、SQL Serverリリースのハードディスクブロックを解放するには、縮小操作が必要です。私が間違っているなら私を訂正してください。SQL Server 2014がディスクスペースを消費してデータを格納する方法

私の質問は30GBのデータを削除した後、SQL Serverは今後の使用のためにこれを元に戻します。これは、SQL ServerがOSからの要求ブロックではなく新しいデータに対してこの予約済みブロックを使用することを意味します。私が間違っているなら私を訂正してください。

ここで私がデータベースから得た情報です。正しく理解されていれば、SQL Serverは約308GBのデータファイルが予約されており、すでに約196GBを使用しています。新しいデータがこのデータファイルに来ると、SQL Serverは予約されたブロックを使用してサイズが308GBに達すると、OSから追加のブロックを要求します。私は正しい?

enter image description here

;with db_file_cte as 
(
select 
    name, 
    type_desc, 
    physical_name, 
    size_mb = 
     convert(decimal(11, 2), size * 8.0/1024), 
    space_used_mb = 
     convert(decimal(11, 2), fileproperty(name, 'spaceused') * 8.0/1024) 
from sys.database_files 
) select 
name, 
type_desc, 
physical_name, 
size_mb, 
space_used_mb, 
space_used_percent = 
    case size_mb 
     when 0 then 0 
     else convert(decimal(5, 2), space_used_mb/size_mb * 100) 
    end 
from db_file_cte; 
+0

これは実際には**プログラミング**とは関係ありませんが(このサイトは*すべてです)、DB管理がありますので、ここで話題にはならず[dba.stackexchange.com] (http://dba.stackexchange.com) - 移動する投票。 –

答えて

1

私が正しく理解していた場合は、SQL Serverが このデータファイル用に308ギガバイト程度に確保し、我々はすでに196ギガバイト程度使用されています。したがって、新しいデータはこのデータファイルに となります.SQL Serverは サイズ308GBに達するまで予約ブロックを使用し、OSから追加のブロックを要求します。私は正しい?

はい、正しいです。 SQL Serverデータベースはディスク上のファイル上に作成されます。デフォルトでは、データベース内の領域を解放してもファイルのサイズは変更されません。

ただし、個々のファイルの自動拡張の設定を確認することができます。 "sp_helpfile"を実行し、結果セットのmaxsizeとgrowthカラムを確認します。

必要に応じて、データベース(または特定のファイル)を縮小して未使用のディスク領域を解放することができます。 (データベースを自動縮小に設定することもできますが、これはお勧めしません)。しかし、パフォーマンス上の理由から、データベースには十分な空き領域を残すことが一般的に推奨されています。データが不安定になればなるほど、空き容量が増えます。