データベースで固定トランザクションログサイズを使用しています。アプリケーションをまとめてログサイズを監視し、状況が厳しすぎて固定trnログを拡張する必要がある場合を確認したいと思います。
トランザクションログの現在のサイズとトランザクションログの固定制限を通知する実行可能なTSQLコマンドはありますか?
あなたのコードを使用しましたが、intへの変換中にエラーが発生しました。 「メッセージ8115、レベル16、状態2、行1数式をデータ型intに変換する算術オーバーフローエラー。」したがって、「* 8」がある場所はどこでも* 8.0に変更し、コードは完全に機能します。
SELECT (size * 8.0)/1024.0 AS size_in_mb
, CASE
WHEN max_size = -1
THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8.0)/1024.0 END AS max_size_in_mb
FROM YOURDBNAMEHERE.sys.database_files
WHERE data_space_id = 0
簡単なグーグル検索はこれを明らかにしました:
DBCC SQLPERF ( LOGSPACE )
トランザクションログで自動拡張を使用しないのはなぜですか?これはより信頼できる解決策のようです。
Sys.database_filesを使用すると、ログファイルのサイズのみが提供され、その中のログのサイズは提供されません。とにかくファイルが固定サイズの場合、これはあまり役に立ちません。 DBCC SQLPERF(LOGSPACE)は少し古い学校ですが、SQL Serverの古いバージョンをサポートする必要がある場合はうまく機能します。
代わりに、次のようにdm_os_performance_countersテーブルを使用できます。
SELECT
RTRIM(instance_name) [database],
cntr_value log_size_kb
FROM
sys.dm_os_performance_counters
WHERE
object_name = 'SQLServer:Databases'
AND counter_name = 'Log File(s) Used Size (KB)'
AND instance_name <> '_Total'
これは私の頭の上にあるので、あなたは数学を再確認したいかもしれません...
SELECT
(size * 8)/1024.0 AS size_in_mb,
CASE
WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8)/1024.0
END AS max_size_in_mb
FROM
MyDB.sys.database_files
WHERE
data_space_id = 0 -- Log file
ログが自動拡張に設定されているかどうか、ログが特定の量または割合で増加するように設定されているかどうかなど、増加の増分など、そのシステムビューから得られるものは他にもあります。
HTH!
固定サイズのトランザクションログに固執する必要がある場合は、妥当なサイズに設定し、ある程度のマージンを確保してから、次の2つのいずれかを実行することをお勧めします。
OR
また、おそらく次の記事が役立つかもしれません: SQL Serverデータベースのトランザクションログが予期せず大きくなるのを防ぐ方法 。
SQL 2008以降の場合、FILEPROPERTY
はファイル内で使用されているスペースの量も公開し、他のすべての回答よりもはるかに複雑ではありません。
select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,'SpaceUsed') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes]
from sys.database_files