データベーススペースの使用状況に関するMDWデータコレクターからいくつかの優れた情報を出力する次のクエリがあります。次の列(データベースサイズ、予約済みスペース、未使用スペース、未割り当てスペース、収集日)でデータベースの増加傾向を適切に計算するにはどうすればよいですか?私はデータベースが縮小するか成長するかを考慮に入れようとしているので、単に「最大サイズ」を取得してそこから進むことはできません。これまでの完全なクエリは次のとおりです...
DECLARE @ServerName VARCHAR(MAX);
DECLARE @SelectedDatabaseName VARCHAR(MAX);
DECLARE @snapshot_id INT;
SELECT TOP 1
@snapshot_id = snapshot_id
FROM ( SELECT DISTINCT TOP 100
d.snapshot_id
FROM snapshots.disk_usage d ,
core.snapshots ss
--WHERE ss.instance_name = @ServerName
--AND ss.snapshot_id = d.snapshot_id
ORDER BY d.snapshot_id DESC
) AS q
ORDER BY snapshot_id ASC;
SELECT database_name ,
ss.instance_name ,
CONVERT (DATETIME, SWITCHOFFSET(CAST (d.collection_time AS DATETIMEOFFSET),
'+00:00')) AS collection_time ,
d.snapshot_id ,
( ( CONVERT(DEC(15, 2), d.dbsize) + CONVERT(DEC(15, 2), d.logsize) )
* 8192 / 1048576.0 ) AS 'database_size_mb' ,
'reserved_mb' = ( d.reservedpages * 8192 / 1048576.0 ) ,
'data_mb' = CONVERT(DEC(15, 2), d.pages) * 8192 / 1048576.0 ,
'index_mb' = ( d.usedpages - d.pages ) * 8192 / 1048576.0 ,
'unused_mb' = ( ( CONVERT(DEC(15, 2), d.reservedpages)
- CONVERT(DEC(15, 2), d.usedpages) ) * 8192
/ 1048576.0 ) ,
'unallocated_space_mb' = ( CASE WHEN d.dbsize >= d.reservedpages
THEN ( CONVERT (DEC(15, 2), d.dbsize)
- CONVERT (DEC(15, 2), d.reservedpages) )
* 8192 / 1048576.0
ELSE 0
END )
FROM snapshots.disk_usage d ,
core.snapshots ss
WHERE --database_name =@SelectedDatabaseName
/*AND*/ d.snapshot_id >= @snapshot_id
--AND ss.instance_name = @ServerName
AND d.snapshot_id = ss.snapshot_id
ORDER BY d.database_name ASC ,
collection_time;
うまくいけば、それが終わると、今後1年で、すべてのインスタンス、データベース、およびサーバーが年間どれだけ成長するかを確認できるようになります。
方法1:費用がかかります
データの収集とデータベースの成長に関するレポートの提示に関してすべてを実行し、説明されているように収集されたデータに応じて同じことを予測するサードパーティのソフトウェアを使用できます here
方法2:テーブルを作成し、SQLエージェントジョブを使用してストアドプロシージャを実行し、作成されたテーブルのデータを収集して一定期間クエリするようにスケジュールされます何が収集されたかを確認し、便利な計算で予測できます。
説明されているようにこれを使用できます ここ
方法3:手動側ではもう少しですが、うまく機能します。デフォルトのトレースを使用しています。デフォルトトレースを使用して、データの増加イベントをキャプチャし、そのデータベースのログを記録します。これは、デフォルトトレースファイルがそこに留まってロールオーバーされない頻度または長さに応じて異なります。
方法4私の個人的なお気に入りと私が使用してきたもの:
Chad Millerによるこの優れた記事 データベース容量計画 は、T-SQLとPowershellをSSRSレポートと共に使用して、一定の期間にわたる望ましいデータベースの成長を提供します。
私はこのトピックを扱っている記事を読んだだけで、あなたは興味があると思います:
SQL Serverデータベースの成長率を特定 by Marios Philippopoulos
作成者は、LAG
ウィンドウ関数を使用して次のスクリプトを作成しました。
SELECT DISTINCT A.[database_name] , AVG( A.[Backup Size (MB)] - A.[Previous Backup Size (MB)] ) OVER ( PARTITION BY A.[database_name] ) AS [Avg Size Diff From Previous (MB)] , MAX( A.[Backup Size (MB)] - A.[Previous Backup Size (MB)] ) OVER ( PARTITION BY A.[database_name] ) AS [Max Size Diff From Previous (MB)] , MIN( A.[Backup Size (MB)] - A.[Previous Backup Size (MB)] ) OVER ( PARTITION BY A.[database_name] ) AS [Min Size Diff From Previous (MB)] , A.[Sample Size] FROM ( SELECT s.[database_name] --, s.[backup_start_date] , COUNT(*) OVER ( PARTITION BY s.[database_name] ) AS [Sample Size] , CAST ( ( s.[backup_size] / 1024 / 1024 ) AS INT ) AS [Backup Size (MB)] , CAST ( ( LAG(s.[backup_size] ) OVER ( PARTITION BY s.[database_name] ORDER BY s.[backup_start_date] ) / 1024 / 1024 ) AS INT ) AS [Previous Backup Size (MB)] FROM [msdb]..[backupset] s WHERE s.[type] = 'D' --full backup --ORDER BY -- s.[database_name] --, s.[backup_start_date] ) AS A ORDER BY [Avg Size Diff From Previous (MB)] DESC;