この記事では、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 共有が 1 つ以上のexplorer.exe ウィンドウで開かれている間も、ディレクトリ変更通知の登録を試行し続けます。 これらのウィンドウが閉じられると、変更通知の動作が停止します。 ディレクトリ変更通知をサポートしていないサード パーティのファイル サーバーでも、この動作が公開される場合があります。
解決方法
警告
レジストリ エディタの使用を誤ると、オペレーティング システムの再インストールが必要になるような深刻な問題を引き起こす可能性があります。 レジストリ エディターの不適切な使用によって生じた問題については、解決を保証できません。 リスクを理解した上でレジストリ エディターを使用してください。
この問題を回避するには、 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 (ゼロ) に設定します。
次のように、現在ログオンしているユーザーに対してのみ変更通知要求をオフにしてください。
[開始] をクリックし、[実行] をクリックし、[開く] ボックスに「regedit」と入力し、OK をクリックします。
次のレジストリ キーに移動してクリックします。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
[編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。
「<
NoRemoteChangeNotify 」と入力し、Enter キーを押します。[ Edit メニューの Modify をクリックします。
[値のデータ] ボックスに「1」と入力し、[OK] をクリックします。
レジストリ エディターを終了します。
すべてのユーザーの変更通知要求をオフにする
[開始] をクリックし、[実行] をクリックし、[開く] ボックスに「regedit」と入力し、OK をクリックします。
次のレジストリ キーに移動してクリックします。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
[編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。
「<
NoRemoteChangeNotify 」と入力し、Enter キーを押します。[ Edit メニューの Modify をクリックします。
[値のデータ] ボックスに「1」と入力し、[OK] をクリックします。
レジストリ エディターを終了します。