从 Windows 资源管理器访问 SQL Server FileTable 共享时 CPU 使用率增加

本文提供了一个解决方案,用于解决从 Windows 资源管理器访问 SQL Server FileTable 共享时导致 CPU 使用率增加的问题。

原始 KB 数: 3092936

现象

假设出现了下面这种情景:

  • 你已实现 SQL Server FileTable
  • FileTable 公开 SMB 共享。
  • 使用映射的驱动器或 UNC 路径通过 Windows 资源管理器(explorer.exe)访问 SMB 共享。

在此方案中,你可能会注意到explorer.exe以及 SQL Server 和系统进程中 CPU 使用率增加。 此症状反映 SMB 目录更改通知流量增加。

原因

SQL Server FileTable 共享不支持目录更改通知。 因此,运行 SQL Server 的服务器使用STATUS_NOT_SUPPORTED值响应这些请求。 由于explorer.exe无法同步处理此响应值,因此在 FileTable SMB 共享在一个或多个explorer.exe窗口中打开时,它将继续尝试注册目录更改通知。 关闭这些窗口后,更改通知行为应停止。 不支持目录更改通知的第三方文件服务器也可能公开此行为。

解决方法

警告

如果注册表编辑器使用不当,则可能会产生严重问题,导致重新安装操作系统。 Microsoft 无法保证可以解决因注册表编辑器使用不当而造成的问题。 请慎用注册表编辑器,风险自负。

若要防止此问题,请使用 NoRemoteChangeNotify 注册表值禁用 SMB 目录更改通知。 在将通过 Windows 资源管理器访问 FileTable 共享的任何系统上执行此操作。

  • 若要将设置应用于当前登录的用户,请将 NoRemoteChangeNotify 注册表项添加到以下注册表项:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

  • 若要将设置应用于登录到计算机的所有用户,请将 NoRemoteChangeNotify 注册表项添加到以下注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

将 NoRemoteChangeNotify 注册表项的值设置为 1 时,关闭映射网络共享文件夹中发生的文件和文件夹更改的远程更改通知请求。 若要打开远程更改通知请求,请将 NoRemoteChangeNotify 注册表项设置为 0(零)。

请确保仅对当前登录的用户关闭“更改通知”请求,如下所示:

  1. 单击“开始”,单击“运行“打开”框中键入 regedit,然后单击“确定”。

  2. 找到并单击以下注册表项:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  4. 键入 NoRemoteChangeNotify,然后按 Enter。

  5. “编辑 ”菜单上,单击“ 修改”。

  6. 在“数值数据”框中,键入 1,然后单击“确定”。

  7. 退出注册表编辑器。

关闭所有用户的更改通知请求

  1. 单击“开始”,单击“运行“打开”框中键入 regedit,然后单击“确定”。

  2. 找到并单击以下注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  4. 键入 NoRemoteChangeNotify,然后按 Enter。

  5. “编辑 ”菜单上,单击“ 修改”。

  6. 在“数值数据”框中,键入 1,然后单击“确定”。

  7. 退出注册表编辑器。