sql-server – 缩小SQL Server日志文件如何影响性能?

我有一个sql Server 2008数据库,其数据大小约为2GB,但日志文件超过8GB.对于2008年之前的数据库,我可以使用“备份日志”和TruncATE_ONLY选项,但2008和更高版本的数据库不再提供此选项.

我有一个截断日志文件的脚本:

USE [MyDatabase]
GO
ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC shrinkfile('MyDatabase_log',1)
ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT
GO

这会完全截断日志文件,但我的问题是:这会影响性能吗?

我每天执行两次完整备份,因此就数据前滚而言,日志实际上并不是必需的.

解决方法

我真的推荐Paul S. Randal阅读 Importance of proper transaction log size management.

实际情况是,只有两种非常好的方法来处理事务日志:

>使用常规LOG文件备份,LOG文件将在每次LOG备份后重复使用它的空间,并且不会无限增长,或者
>使用SIMPLE恢复模型,而不必关心您的LOG文件大小,因为您定期进行完全备份.

关于LOG文件截断和性能的问题在于,当要增加LOG文件时,您将始终获得性能损失(来自上述链接博客文章的引用):

If you shrink the log,then it’s going to grow again – possibly causing VLF fragmentation,and definitely causing your workload to pause while the log grows,as the log can’t use instant initialization […]

更新:不要将LOG文件截断误认为是DATA文件收缩.数据文件缩小真的很糟糕.详情请见Why you should not shrink your data files.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...