我的交易日志文件每天都在增长,非常大。
这是我的一些存储过程以及我如何插入可能会产生问题的方式吗?
有没有办法通过重写查询来最小化日志大小?
查询中是否存在导致日志大小增长更快的内容?
答案 0 :(得分:2)
当日志文件变大时,需要考虑各种因素。我会遵循逐步明智的清单
1)查找影响较大的查询,使用以下SQL
SELECT TOP 5 t.TEXT AS 'SQL Text'
,st.execution_count
,ISNULL(st.total_elapsed_time / st.execution_count, 0) AS 'AVG Excecution Time'
,st.total_worker_time / st.execution_count AS 'AVG Worker Time'
,st.total_worker_time
,st.max_logical_reads
,st.max_logical_writes
,st.creation_time
,ISNULL(st.execution_count / DATEDIFF(second, st.creation_time, getdate()), 0) AS 'Calls Per Second'
FROM sys.dm_exec_query_stats st
CROSS APPLY sys.dm_exec_sql_text(st.sql_handle) t
ORDER BY st.total_elapsed_time DESC
2)一旦你知道了逻辑读/写,就可以跟进sp或查询的影响来优化它。
3)你总是可以缩小日志文件,但我会说缩小日志文件中的注意事项(Prod环境,执行时间,对其他用户的影响)
4)如果您认为它对收缩日志文件的影响微乎其微
使用这个sql
DBCC SHRINKFILE (N'My DB_Log' , 1000)
请检查日志文件大小,我不会缩小到1。
阅读此博客了解更多信息
DBCC SHRINKFILE on log file not reducing size even after BACKUP LOG TO DISK
答案 1 :(得分:1)
您尚未提及备份策略或恢复要求。如果您真的不需要能够恢复某个时间点,并且对能够恢复到常规备份点感到满意,您还可以考虑将恢复模式设置为简单。
可能在大多数情况下都不推荐,但这是可能的。
如果您确实需要详细日志,那么正如其他人所说,您需要平衡tlog备份与文件增长。如果日志文件过大,过快,请更频繁地备份。
来自RedGate的文章:https://www.simple-talk.com/sql/learn-sql-server/managing-transaction-logs-in-sql-server/
答案 2 :(得分:0)
请不要缩小交易日志文件,除非有充分的理由。如果TLog每天都在增长,那么您应该做的第一件事就是增加TLog备份的频率。如果您仍然看到TLog每天都在增长,则可能会遇到阻止vlog标头回到文件头部的问题。这通常表现为通过运行状态为2的DBCC LOGINFO
返回的初始记录,然后是大量状态为0的记录。要解决此问题,您可以参考我对类似DBA.SE问题的回答, here