2017-10-13 115 views
0

編輯:感謝您的所有提示。同時,這個問題已經解決了。 我不知道爲什麼,但它現在有效。奇怪...MSSQL數據庫:日誌沒有清除後提交交易

我有一個MSSQL數據庫這是恢復模式簡單並有此存儲過程:

BEGIN TRY 
    BEGIN TRANSACTION; 

    exec prcDownSyncOrganisationalUnit; 
    exec prcDownSyncOrganisationalUnitPeriod; 
    exec prcDownSyncPerson; 
    exec prcUpSyncPersonLogin; 
    exec prcDownSyncOrganisationalUnitPerson; 
    exec prcDownSyncAddress; 
    exec prcDownSyncLocation; 
    exec prcDownSyncLocationAddress; 
    exec prcDownSyncOrganisationalUnitLocation; 
    exec prcDownSyncTour; 
    exec prcDownSyncDisplayType; 
    exec prcDownSyncOperator; 
    exec prcDownSyncList; 
    exec prcDownSyncListEntry; 
    exec prcDownSyncQuestionnaire; 
    exec prcDownSyncOrganisationalUnitQuestionnaire; 
    exec prcDownSyncQuestionnaireGroup; 
    exec prcDownSyncQuestionnaireGroupQuestion; 
    exec prcDownSyncExpressionGroup; 
    exec prcDownSyncExpressionGroupMember; 
    exec prcDownSyncExpressionAssignment; 
    exec prcDownSyncQuestionnaireGroupQuestionExpression; 
    exec prcDownSyncQuestionnaireGroupQuestionMapping; 
    exec prcBiSyncAppointment; 
    exec prcBiSyncAppointmentStatus; 
    exec prcDownSyncAppointmentStatusEvent; 
    exec prcDownSyncAppointmentAssignment; 
    exec prcBiSyncAppointmentQuestionnaireResult; 
    exec prcBiSyncAppointmentQuestionnaireResultAnswer; 
    exec prcBiSyncAppointmentQuestionnaireResultAnswerHistory; 
    --exec prcBiSyncDocument; 
    exec prcDownSyncAppointmentXmlValue; 
    exec prcDownSyncPromoter; 
    --exec prcRemoveDeletedData; 

    COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION; 

    EXEC prcErrorRaise; 
    THROW; 

END CATCH 

這個程序運行,每5分鐘,強制日誌由增長500MB每一次執行。該過程成功完成後,日誌不會被清除。所以在一段時間之後,Log真的很大並影響性能。

任何想法我可以做什麼?爲什麼日誌不清除?

+0

嘗試並強制日誌截斷了檢查點 – RegBes

+0

日誌文件不自動收縮自己。擴展日誌文件是一項昂貴的操作。如果這種情況經常發生,文件將會再次增長,所以你不會通過收縮日誌文件來幫助解決問題。但是日誌文件的大小如何影響性能? –

+0

@SeanLange因爲每次執行日誌文件都會增加500MB。一天後,磁盤已滿,我認爲整個磁盤對性能有影響(我應該在開頭提到)。所以Log中有一些數據永遠不會被清除。但在簡單恢復模式下,應在交易完成後進行。 – OPunktSchmidt

回答

1

我想說我們需要更多的信息。如果你有一個非生產環境鏡像生產運行這些測試,但在任何情況下:

運行DBCC SQLPERF(日誌空間)查看當前日誌狀態 運行(在一個事務中)每個proc列在你的包裝腳本。 提交 重新運行DBCC SQLPERF(日誌空間)

日誌文件大小在這些調用之一後跳轉嗎?如果是這樣,那麼您的開發人員需要提出一個話題。

這可能是幫助也: https://www.mssqltips.com/sqlservertip/1178/monitoring-sql-server-database-transaction-log-space/

+0

感謝您的提示。但問題現在已經在週末自行解決了。奇怪...。所以日誌文件大小在DBCC SQLPERF(日誌空間)調用後不會改變。 – OPunktSchmidt