[英]What is the reason that the LOG file size of the SQL Server database does not decrease?
我使用以下查詢來查看數據庫日志文件。
declare @templTable as table
( DatabaseName nvarchar(50),
LogSizeMB nvarchar(50),
LogSpaceUsedPersent nvarchar(50),
Statusee bit
)
INSERT INTO @templTable
EXEC('DBCC SQLPERF(LOGSPACE)')
SELECT * FROM @templTable ORDER BY convert(float , LogSizeMB) desc
DatabaseName LogSizeMB LogSpaceUsedPersent
===============================================
MainDB 6579.93 65.8095
我還使用以下代碼查看主數據庫文件使用的空間量。
with CteDbSizes
as
(
select database_id, type, size * 8.0 / 1024 size , f.physical_name
from sys.master_files f
)
select
dbFileSizes.[name] AS DatabaseName,
(select sum(size) from CteDbSizes where type = 1 and CteDbSizes.database_id = dbFileSizes.database_id) LogFileSizeMB,
(select sum(size) from CteDbSizes where type = 0 and CteDbSizes.database_id = dbFileSizes.database_id) DataFileSizeMB
--, (select physical_name from CteDbSizes where type = 0 and CteDbSizes.database_id = dbFileSizes.database_id) as PathPfFile
from sys.databases dbFileSizes ORDER BY DataFileSizeMB DESC
DatabaseName LogFileSizeMB DataFileSizeMB
===============================================
MainDB 6579.937500 7668.250000
但無論我做什么,數據庫日志空間的數量都不小於 6 GB。 您認為有一個多月沒有更改數據庫日志的原因嗎? 有沒有辦法減少這個數量? 我還使用了不同的方法和查詢來減小日志文件的大小。 我在其他數據庫上得到了很好的答案。 像下面這樣:
use [master];
GO
USE [master]
GO
ALTER DATABASE [MainDB] SET RECOVERY SIMPLE WITH NO_WAIT
GO
USE [MainDB]
GO
DBCC SHRINKDATABASE(N'MainDB')
GO
DBCC SHRINKFILE (N'MainDB_log' , EMPTYFILE)
GO
ALTER DATABASE [MainDB] SET RECOVERY FULL WITH NO_WAIT
GO
但是在這個特定的數據庫中,數據庫日志仍然不少於6GB。 請幫忙。 謝謝。
正如我在主要帖子中所告知的那樣,一段時間后,我們的數據庫文件日志的大小達到了大約 25 個 gig,我們甚至無法再壓縮數據庫文件。 經過一番搜索,我得出的結論是我應該備份日志文件,然后壓縮日志文件。 為此,我定義了一個幾乎每 30 分鍾從一個日志備份文件准備一個文件的作業,這些文件的大小通常不超過 150 MB。 然后,在每次備份日志文件后,我運行一次日志壓縮命令。 使用這種方法,日志文件的大小大大減少,現在我們有大約 500 MB 的日志文件。 當然,由於數據庫上有大量事務,提到的作業必須始終處於活動狀態。 如果作業不活躍,我會再次增加日志量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.