[英]How to shrink a log file where 89.5% is unused
我目前有一个 27.6GB 的日志文件,其中 89.5 未使用。 使用了 10.5%。 我不知道在下面的 DataFile1 示例之后使用什么值。 欢迎任何帮助或建议。
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
使用您要缩小的日志文件的名称,您可以像这样发现:
select file_id, type_desc, name, physical_name
from sys.database_files
一个数据库通常只有一个日志文件。 例如
file_id type_desc name
----------- ------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------
1 ROWS AdventureWorksDW2017
2 LOG AdventureWorksDW2017_log
(2 rows affected)
然后
DBCC SHRINKFILE (N'AdventureWorksDW2017_log' , 0, TRUNCATEONLY)
将尝试将日志文件缩小到其初始创建大小。 如果文件末尾附近有使用过的日志段,或者总使用空间更大,它不会缩小那么多。
但是,您不应该定期执行此操作,因为您不希望日志文件在数据库处于活动状态时增长。 日志文件增长代价高昂,因为文件必须清零,并且所有需要提交事务的会话都必须等待操作完成。
这是我用来获取日志文件大小的脚本。
IF OBJECT_ID('tempdb..#tmplogspace') IS NOT NULL DROP TABLE #tmplogspace
CREATE table #TmpLOGSPACE
(
DatabaseName varchar(100),
LOGSIZE_MB decimal(18, 9),
LOGSPACE_USED decimal(18, 9),
LOGSTATUS decimal(18, 9)
)
INSERT INTO #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS)
EXEC('DBCC SQLPERF(LOGSPACE);')
SELECT * FROM #TmpLOGSPACE
ORDER BY LOGSIZE_MB DESC
查看相关数据库的大小和百分比。 然后运行这个:
USE My_Database
GO
DBCC SHRINKFILE (2,20000) -- 2 is for log file, last number is 20G, which should be a safe start. Change as desired MB size
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.