2017-06-13 417 views
1

我的事務日誌文件每天都在增長到非常大的規模。SQL事務日誌增長

這是我的一些存儲過程和我如何插入可能會造成問題的方式嗎?

有沒有辦法通過重寫查詢來最小化日誌大小?

查詢中是否存在導致日誌大小增長更快的內容?

+2

除非你將其備份或縮小的操作日誌文件將持續增長 - 它記錄在數據庫中的所有更改。您可以安排一整天的備份來重置它 – dbajtr

回答

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

0

請不要收縮事務日誌文件,除非有一個它的好理由。如果TLog日益增長,首先應該做的是增加TLog備份的頻率。如果您仍然看到TLog日益增長,您可能會遇到阻止vlog頭部回到文件頭部的問題。這通常表現爲通過運行DBCC LOGINFO狀態爲2並且狀態爲0的許多記錄返回的初始記錄。要解決此問題,可以將我的答案引用到類似的DBA.SE問題here

1

您尚未提及您的備份策略或恢復要求。如果您真的不需要能夠恢復到某個時間點,並且能夠恢復到常規備份點,那麼您也可以考慮將恢復模式設置爲簡單。

可能不推薦在大多數情況下,但它是一種可能性。

如果您確實需要詳細的日誌,那麼正如其他人所說的,您需要平衡您的tlog備份與文件增長。如果日誌文件太大,太快,然後更頻繁地備份。

文章從展鵬:https://www.simple-talk.com/sql/learn-sql-server/managing-transaction-logs-in-sql-server/