SQL 服务器日志文件很大
SQL Server Log File Is Huge
目前我的生产数据库日志 SQL Server 2008 R2 服务器增长失控:
- DATA 文件:D:\Data...\MyDB.mdf = 磁盘上 278859 MB
- 日志文件:L:\Logs...\MyDB_1.ldf = 磁盘上 394542 MB
上面提到的服务器在凌晨 1 点安排了每日备份,并且每 15 分钟进行一次 translog 备份。
数据库以完全恢复模式复制到订阅者。从上面的节点(发布者)推送复制。订阅服务器上的同一个数据库日志文件在磁盘上的大小为 ~< 100 GB。
我尝试修复的内容:
- 运行 数据库的完整备份(需要 1h:47m)
- 运行 每 15 分钟运行一次的 translog 备份作业。 (需要 1m:20s)
- 运行 数据库的另一个完整备份
以上均无效,因此我尝试使用 DBCC SHRINKFILE 缩小无效的日志文件。大小永远不会改变。
任何人都可以告诉我哪里出了问题,或者我作为 SQL 服务器 DBA 需要做什么来解决上述问题?
可能会阻止您缩小 translog 文件的事情:
- 长 运行 事务正在您的数据库中进行
- 您的复制分发代理运行相当频繁
看你的translog文件大小,估计是第二种可能造成的。
您的复制分发代理运行相当频繁
SQL 服务器日志 reader 代理将translog 文件标记为正在使用并防止它们被缩小,这是SQL 服务器在备份translog 文件后所做的。如果此过程频繁发生且时间足够长,这可能会阻止您的 translog 文件在 translog 计划备份时被缩小。
看看这个MSDN transactional explaination以及如何修改日志reader代理。
还有一个thread in MSDN forum that describe similar problem, there is DBCC query here that helps you identify running transaction that may be blocking the translog file (DBCC OPENTRAN).
长 运行 事务正在您的数据库中进行
您可以使用 DBCC OPENTRAN 检查是否有任何长 运行 事务正在发生,运行 是什么进程,然后决定如何处理它。一旦长 运行 事务完成,您应该能够收缩日志文件。
在 运行 sp_who2 之后,我注意到日志中有一个很长的 运行 事务正在不受控制地增长。我在该 SPID 上使用了 kill 而不是我继续缩小日志文件。
您应该使用相同的 table 创建空白数据库,并将旧数据库数据从迁移脚本迁移到空白数据库。
例如:
INSERT INTO 客户(cust_id,姓名,地址)
SELECT cust_id、姓名、地址
来自 olddb.customers
--这个脚本应该 运行 在新的空白数据库中
您可以手动缩小日志文件
1.right 单击您的数据库 > 任务 > 收缩 > 文件 > 文件类型=日志
还好
目前我的生产数据库日志 SQL Server 2008 R2 服务器增长失控:
- DATA 文件:D:\Data...\MyDB.mdf = 磁盘上 278859 MB
- 日志文件:L:\Logs...\MyDB_1.ldf = 磁盘上 394542 MB
上面提到的服务器在凌晨 1 点安排了每日备份,并且每 15 分钟进行一次 translog 备份。
数据库以完全恢复模式复制到订阅者。从上面的节点(发布者)推送复制。订阅服务器上的同一个数据库日志文件在磁盘上的大小为 ~< 100 GB。
我尝试修复的内容:
- 运行 数据库的完整备份(需要 1h:47m)
- 运行 每 15 分钟运行一次的 translog 备份作业。 (需要 1m:20s)
- 运行 数据库的另一个完整备份
以上均无效,因此我尝试使用 DBCC SHRINKFILE 缩小无效的日志文件。大小永远不会改变。
任何人都可以告诉我哪里出了问题,或者我作为 SQL 服务器 DBA 需要做什么来解决上述问题?
可能会阻止您缩小 translog 文件的事情:
- 长 运行 事务正在您的数据库中进行
- 您的复制分发代理运行相当频繁
看你的translog文件大小,估计是第二种可能造成的。
您的复制分发代理运行相当频繁
SQL 服务器日志 reader 代理将translog 文件标记为正在使用并防止它们被缩小,这是SQL 服务器在备份translog 文件后所做的。如果此过程频繁发生且时间足够长,这可能会阻止您的 translog 文件在 translog 计划备份时被缩小。
看看这个MSDN transactional explaination以及如何修改日志reader代理。
还有一个thread in MSDN forum that describe similar problem, there is DBCC query here that helps you identify running transaction that may be blocking the translog file (DBCC OPENTRAN).
长 运行 事务正在您的数据库中进行
您可以使用 DBCC OPENTRAN 检查是否有任何长 运行 事务正在发生,运行 是什么进程,然后决定如何处理它。一旦长 运行 事务完成,您应该能够收缩日志文件。
在 运行 sp_who2 之后,我注意到日志中有一个很长的 运行 事务正在不受控制地增长。我在该 SPID 上使用了 kill 而不是我继续缩小日志文件。
您应该使用相同的 table 创建空白数据库,并将旧数据库数据从迁移脚本迁移到空白数据库。 例如: INSERT INTO 客户(cust_id,姓名,地址) SELECT cust_id、姓名、地址 来自 olddb.customers
--这个脚本应该 运行 在新的空白数据库中
您可以手动缩小日志文件 1.right 单击您的数据库 > 任务 > 收缩 > 文件 > 文件类型=日志 还好