使用AlwaysOn可用性组时缩小事务日志


17

我们正在使用AlwaysOn Availability GroupSQL Server 2012的功能。每天在辅助数据库上进行常规的完整数据库备份和事务日志备份。

我在这里已经阅读在主副本或辅助副本上执行事务日志备份的操作,会将这两个副本的事务日志标记为可重用。无论如何,事务日志备份的大小很大,可以使用收缩文件来减小它:

在此处输入图片说明

我已在本地还原数据库并执行收缩操作。日志文件大小减少到160 MB。

我的问题是我应该在哪个数据库上对事务日志文件(主,次或两者)执行收缩操作?


我猜过去几年没有备份日志文件,因此它是如此之大。执行中,DBCC SQLPERF (LOGSPACE)我可以看到仅使用0.06%了该文件-对于我而言,保留如此大的日志文件毫无意义。在[sys].[database_files]我检查其max_size设置为-1growth65536,所以我想,当它需要更多的空间,它会得到。无论如何,为了防止将来的增长,我可以将其缩小到例如5%。我试图找到一些确认,我认为这样做不是一个坏主意。


实际上,备份(在数据库和日志文件上)仅在辅助数据库上执行,因此对它们执行收缩文件会更容易,但是主日志文件的大小也会减少吗?

Answers:


21

在AG中,只能在主数据库上进行写操作。收缩操作是写操作。因此,您必须缩小主数据库。请注意,收缩可能不会像您预期的那样收缩,对还原的数据库的测试可能利用了简单的恢复模型。请参阅如何缩小SQL Server日志以获取更多信息。

不要缩小到160MB。确定为什么日志增长到121Gb,所以它不再重复(您怀疑,如果可能的话,很高兴确认一下)。将日志调整为适合您的操作需求的大小。日志增长是一个严重的问题,它无法使用即时文件初始化,并且在日志增长并进行0初始化时,所有数据库活动都将冻结。用户和应用程序讨厌它。如果你理解了影响和您的用户都OK,你可以收缩一次,以少量(160MB可能太小虽然),让它生长,直到其稳定。


7

你可以试试:

  1. 可用性组中所有服务器上的数据库应处于同步状态。
  2. 在收缩之前,将使用过的页面移动到事务日志的开头。
  3. 有时日志的可用空间为99%,但是SQL Server无法释放未使用的空间。尝试依次重新启动可用性组中的每个服务器。
  4. 有时,您需要在MS SQL Server释放可用空间之前先备份和收缩事务日志2次(由于正在使用位于文件末尾的逻辑日志文件,因此无法收缩日志文件(DB_Log)。)。

试试这个脚本:

    -在作业步骤或脚本中设置当前数据库
    -检查仅在主要执行
    如果(SELECT角色
        从sys.dm_hadr_availability_replica_states AS作为
        加入sys.availability_replicas AS b
            开启b.replica_id = a.replica_id
    其中b.replica_server_name = @@ SERVERNAME)= 1
    开始
        -使用[test_db]-不适用于MS SQL 2014,只需注释此行并在作业步骤或脚本中设置当前数据库
        -1)Bakup Trn
        备份日志[test_db]到磁盘= N'D:\ MSSQL \ Backup \ test_db.trn',带有NOFORMAT,INIT,NAME = N'Trn备份',跳过,NOREWIND,NOUNLOAD,COM​​PRESSION,STATS = 10
        -2)移动使用过的页面
        DBCC SHRINKFILE(N'test_db_log',3000,NOTRUNCATE)
        -3)SHRINKFILE日志
        DBCC SHRINKFILE(N'test_db_log',3000)
    结束
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.