2009-05-14 29 views
6

私はデータベースファイルにどれだけのスペースが残っているかを知りたいので、スペースを増やすときを知ることができ、アプリケーションの実行中にそれができないようにすることができます。SQL Serverデータベースの空き領域を見つける最も良い方法は?

私はこれをスクリプト化して、複数のデータベースにわたって定期的に実行できるようにしたいと考えています。

私はSQL Server 2000とSQL Server 2005のデータベースを持っていますが、両方で同じスクリプトを実行できるようにしたいと考えています。

私はManagement Studioを使用して、2005データベースでこれを手動で実行できますが、2000データベースでは実行できません。

+0

「ハードアウト」しているときにサーバーにそれをさせるのはどうですか? – Stu

+0

SQL Serverは基本的にファイルの拡張中に停止します。これは、情報を書く場所がないためです。 – GordyII

+0

これはSQL 2000であり、おそらく新しいバージョンのほうが良いでしょう。 – GordyII

答えて

-1

私の場合、SQL Serverはハードドライブがいっぱいになるまで常に自動的により多くの領域を割り当てていました。ハードドライブの空き領域を照会するだけです。

どのような設定を使用してデータベースの「スペース」を増やす必要がありますか?

+3

SQL Serverは、データファイル内に未使用の領域を維持します。その空き領域がなくなると、SQL Serverはファイルを拡張して対応します。データベースのパフォーマンスは、その成長中に影響を受ける可能性があります。私は通常、自動成長のサイズを妥当なものに設定し、データを与えて、それを手放す。 –

+0

ファイルシステム上の空き領域に関するクエリでは、特にSQL Serverからデータを簡単に入手できる場合には、多くの前提があります。 dbaが容量の傾向を認識している場合、成長スクリプトはperfに影響を与えないジョブを実行できます(組み込みの機能はほぼ確実にperfに影響します)。 – JGurtz

14

sp_spaceusedをお試しください:

は、行数、予約済みディスク スペース、およびディスク テーブルで使用されるスペース、インデックス付きビュー、または現在のデータベース内のサービス Brokerのキュー、 を表示するか、表示しますディスク容量は予約済み で、データベース全体で使用されます。

私はこれがSQL Server 2000に存在すると確信していますが、私はそれを証明できません。それは2005年と2008年に機能します。

サーバ側のロジックに結びつけたい場合は、sp_helptextでそれを覗くことができます。

EDIT:以下の私のコメントに拡大し、そしてhttp://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359でオリジナルの貢献のおかげで、ここではファイルによって使用状況を打破するための方法です:

select 
     name 
    , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB 
from dbo.sysfiles a 
+0

データベースファイルに空き領域を取得するのに類似したものはありますか? – GordyII

+3

必要なデータはdbo.sysfilesです。このスレッドの最後にあるステートメントを試してください:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359 –

0

それは自由をチェックするSQLスクリプトを実行することが可能ですスペースを手動で設定します。しかし、十分なスペースが残っていない場合、ジョブを作成し、アラートを割り当てて管理者に自動的に通知するほうがよい。

私が見つけたベスト記事 - Managing Database Data Usage With Custom Space Alerts(SQLServerCentralのログインが必要です)は、多くのDBA経験がないサポート担当者であっても従うことができます。

同様の記事Monitor database file sizes with SQL Server Jobsを使用することもできます。手動チェックのために、私は( http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedureからダウンロードすることができます)sp_SOSを好む

また

EXEC dbo.sp_SOS @OrderBy='T' 
0

ランどのくらいの空き領域は、SQL Server 2000で現在利用可能知るするには、以下のコマンドを実行します。

DECLARE @command VARCHAR(5000) 
DECLARE @DBInfo TABLE 
(ServerName VARCHAR(100), 
DatabaseName VARCHAR(100), 
PhysicalFileName NVARCHAR(520), 
FileSizeMB DECIMAL(10,2), 
SpaceUsedMB DECIMAL(10,2), 
FreeSpaceMB DECIMAL(10,2), 
FreeSpacePct varchar(8) 
) 

SELECT @command = 'Use [' + '?' + '] SELECT 
@@servername as ServerName, 
' + '''' + '?' + '''' + ' AS DatabaseName , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, 
    CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ') AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct 
from dbo.sysfiles a' 

INSERT INTO @DBInfo 
EXEC sp_MSForEachDB @command 

SELECT * from @DBInfo 
関連する問題