【问题标题】:SQL Server 2016 + FILESTREAM + Windows Defender = constant CPU and disk usageSQL Server 2016 + FILESTREAM + Windows Defender = CPU 和磁盘使用率恒定
【发布时间】:2017-06-22 08:17:08
【问题描述】:

我有一个问题是几周前在 Windows 更新后开始的,我在互联网上找不到有关该问题的任何信息。我在最新的 Windows 10 机器上安装了一个 SQL Server 2016 Express 实例,其数据库具有 FILESTREAM 文件组和全文搜索目录。据我所知,数据库已连接并且运行正常,Windows 事件日志中没有任何异常。然而,自从那次更新以来,SQL Server 不断地在数据库上搅动,不断地使用 CPU 和磁盘。

我将数据库存储在机械硬盘上,在我关闭 SQL 实例之前,CPU 使用率一直保持在 30% 左右。重新启动它只会暂时帮助,因为搅拌很快就会再次开始。请记住,这是在离线机器上(除了互联网连接)。起初我以为我感染了病毒或其他什么,所以我关闭了服务器,并从轨道上对其进行了核对。我得到了一个新的 SSD,安装了 Windows 10,安装了 SQL Server 2016,更新了所有内容,获取了 MDF 和 LDF(以及文件流文件夹),将它们移到了新机器上,附加了数据库。一开始没有问题。然后它再次开始,尽管现在 CPU 使用率要低得多,可能是因为存储速度要快得多。

这是它在资源监视器中的样子:

这似乎与 Windows Defender 有关,因为我可以开始扫描并查看同一数据库的 sqlservr.exe 句柄数量。

SQL Server 日志看起来像是无穷无尽的页面:

SSMS 活动监视器一直没有显示任何进程或任何可以解释活动的数据库。请记住,这是新安装的机器上的一个隔离数据库,除了我之外没有连接任何客户端。

我查看了可能导致此问题的更新,但我没有发现任何明显的问题,现在我不知道该怎么办。我看到的唯一解决方案是降级到 SQL Server 2008 SP3,因为我知道它以前运行良好。对此我将不胜感激。

【问题讨论】:

  • 只需在 Windows Defender 例外中添加数据库文件夹路径即可。
  • 我这样做了,我实际上添加了整个实例数据根,它并没有停止。
  • 我还禁用了 SQL Server CEIP 服务,删除了一些计算列(将公式设置为 NULL),检查权限等...正如我们所说,它在磁盘上以 2MB/s 的速度运行。 ..
  • 我现在已禁用所有其他 SQL 服务(VSS 编写器、全文搜索守护程序启动器、代理、浏览器......),它仍然无缘无故地搅动。没有其他人使用 SQL Server 2016 看到过这种行为吗?
  • 尝试将 Abacus 数据库的 auto close 数据库选项设置为关闭。

标签: sql-server windows performance filestream


【解决方案1】:

SQL Server 错误日志中频繁出现的“Starting up database 'Abacus'”消息表明数据库设置为AUTO_CLOSE,并且该数据库被频繁访问。数据库的这种不断打开和关闭会导致大量开销,并且可能是您看到的高资源利用率的原因。

简单的解决方法是关闭自动关闭:

ALTER DATABASE Abacus
SET AUTO_CLOSE OFF;

通常最好将AUTO_CLOSE 数据库设置保持关闭以避免不必要的开销。一个例外是托管数百或数千个数据库的 SQL 实例,其中大多数数据库并未被积极使用。

【讨论】:

  • 值得注意的是数据库根本没有被访问,与文件流相关的东西导致SQL服务器反复打开和关闭数据库。我在没有文件流的同一实例上有其他数据库,它们的行为正常。
  • @DrunkenCodeMonkey,任何接触文件表目录共享的Win32进程都会隐式打开数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2016-01-25
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多