我们在数据库上使用固定的事务日志大小,并且我想组建一个应用程序来监视日志大小,这样我们就可以看到事情变得太紧,我们需要增加固定的trn登录。
我是否可以运行任何TSQL命令,它会告诉我当前事务日志的大小以及事务日志的固定限制?
答案 0 :(得分:30)
我使用了你的代码,但转换为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
答案 1 :(得分:20)
快速谷歌搜索显示:
DBCC SQLPERF ( LOGSPACE )
为什么不在事务日志中使用自动增长?这似乎是一个更可靠的解决方案。
答案 2 :(得分:13)
使用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'
答案 3 :(得分:7)
这是我的头脑,所以你可能想要仔细检查数学......
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!
答案 4 :(得分:1)
如果您确实需要坚持使用固定大小的事务日志,我建议将其设置为合理的大小,允许一些余量,然后执行以下两种操作之一:
OR
此外,您可以找到以下文章:How to stop the transaction log of a SQL Server database from growing unexpectedly。
答案 5 :(得分:1)
对于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