我最近检查了一个 SQL Server 2012 实例,结果发现硬盘已满,调查后发现,每分钟都有全文搜索信息行填满日志文件和磁盘空间。它加起来有几 GB 的日志信息,如下行:
2015-01-26 14:08:58.40 spid42s Informational: Resuming full-text population for table or indexed view '[db].[dbo].[table]' in database 'db' (table or indexed view ID '690817523', database ID '5'). Prior number of documents processed: 0, error encountered: 0.
我的问题是如何防止 SQL Server 通过全文搜索引擎将任何“信息”详细信息写入其日志文件,或者(不太推荐的方法)如何完全禁用其日志记录?
答案1
如果无法重新启动实例,可以使用 sp_fulltext_recycle_crawl_log 安排日志清理。更多信息:http://www.ruben-j.com/microsoft/t-sql/sql-fulltext-crawl-log/或者https://social.msdn.microsoft.com/Forums/windowsapps/en-US/b9420843-666e-4f33-b987-2624cdfa7acd/sql-server-2008r2-fulltext-logfile-sqlftlog-maintenance?forum=sqlkjmanageability或者将问题发布到 dba.stackexchange。
答案2
最后的解决方案是向任务计划程序添加一个简单的单行 powershell 脚本,该脚本将清除超过 30 天的 SQL Server 日志,每天执行:
Get-ChildItem "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\*" -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item
更改 MSSQL11.MSSQLSERVER 以匹配您的 SQL Server 版本和实例名称。