特定のモジュールまたはフィルター ドライバーが読み込まれるときのパフォーマンスと整合性の問題
元の製品バージョン: SQL Server
元の KB 番号: 2033238、2454053
現象
次のいずれかのシナリオを検討してください。
- 特定のモジュールは、SQL Server プロセス アドレス空間 (Sqlservr.exe) に読み込まれます。
- 特定のフィルター ドライバーは、SQL Server コンポーネントを実行しているシステムに読み込まれます。
このシナリオでは、SQL Server データベース エンジンのパフォーマンスの低下と整合性の問題が発生する可能性があります。
- 応答しないさまざまなエラー メッセージと条件 ( 17883、アプリケーションタイムアウト メッセージ、SQL Server 内での重大なブロックなど、SQL Server スケジューラ メッセージ) のレポート。
- 負荷またはアクティビティの同時実行量が異常に大きくない場合でも、SQL Server からの応答が遅くなります。
- 例外 (アクセス違反など)、データベースの整合性に関する重大なエラー メッセージ、アサーション メッセージ、または予期しないプロセスの終了。
- SQL Server でインメモリ OLTP テーブルを使用する場合、100% の CPU 使用率と長いデータベース復旧時間。
- SQL Server プロセスの CPU 使用率が高く、特に特権プロセッサ時間です。
- SQL Server プロセスが Windows API 呼び出しを行うときの予期しないエラーまたは原因不明のエラー。
- SQLDumper.exeに対してトリガーされたメモリ ダンプは、トラブルシューティング アクティビティの妨げとなる可能性があります。
これらの問題の性質上、根本原因の特定には、多くの場合、トラブルシューティングの時間とレベルの低いトレースが必要です。
原因
これらの問題は、モジュールとフィルター ドライバーの次の原因が原因で発生します。
モジュール (DLL または EXEs)
これらの問題は、SQL Server を実行しているサーバーにインストールされているアプリケーションまたはその他のソフトウェアが、特定のモジュールを SQL Server プロセス (Sqlservr.exe) に読み込むことができるために発生します。 これは、特定のビジネス ロジック要件、強化された機能、または侵入の監視を実現するために行うことができます。 これらのモジュールでは、重要な Win32 API と SQL Server ルーチンの迂回、危険な API の呼び出しなど、サポートされていないアクティビティが実行される場合があります。 さらに、これらのモジュール内の一部の組み込み問題により、SQL Server プロセスが正しく機能するために必要なさまざまなメモリ構造が破損する可能性があります。
特定のプロセスで読み込まれたモジュール (DLL) の一覧は、 ListDlls Process Explorer など、さまざまなツールを使用して取得できます。
フィルター ドライバー
フィルター ドライバー は、特定の種類の機能を提供するアプリケーションのセットアップ プログラムの一部としてシステムにインストールできます。 たとえば、ウイルス対策保護、オンライン バックアップ、暗号化サービス、データ圧縮または最適化機能などがあります。 これらのフィルター ドライバーは、ファイル システム要求の動作を強化または変更するために、Windows ファイル I/O スタックに自身を挿入します。
一部の条件下では、これらの要求の完了または過剰なリソースの消費に時間がかかる場合があります。 また、同じドライバー スタックに存在する異なるフィルター ドライバーの間には、何らかの形式の非互換性がある可能性があります。
SQL Server は通常、多数のファイルシステム I/O を出力します (その一部は平均よりも大きいものがあります)。 そのため、I/O 強度が低い他の実行中のアプリケーションと比較して、フィルター ドライバーの問題は SQL Server に深刻な影響を与えます。
Note
挿入された DLL とは異なり、フィルター ドライバー (通常は.sys拡張機能) は、カーネル エンティティであるため、ユーザー プロセスの詳細には表示されません。 Windows 組み込みの fltmc.exe などのツールを使用して、インストールされているミニフィルターを検出できます。
回避策
警告
この回避策によって、コンピューターやネットワークが、悪意のあるユーザーやウイルスなどの悪質なソフトウェアからの攻撃を受けやすくなる場合があります。 この回避策はお勧めしませんが、独自の判断でこの回避策を実装できるように、この情報を提供しています。 この回避策は、自己の責任において使用してください。
これらの問題を回避するには、問題の原因となっているフィルター ドライバーまたはモジュールを特定します。 次に、次の方法のすべてまたは 1 つを適切に試します。 フィルター ドライバーまたはモジュールを識別するには、いくつかの可能なフィルター ドライバーとモジュールの 一覧を確認してください 詳細についてはします。
- 更新プログラムを確認するには、モジュール、フィルター ドライバー、またはアプリケーションのベンダーに問い合わせてください。 使用可能な更新プログラムを適用します。
- フィルター ドライバーまたは関連付けられているアプリケーションを、SQL Server のワークロードや操作に干渉しないように構成します。
- フィルター ドライバーがシステムに読み込まれるのを無効にします。
- 特定のモジュールを SQL Server プロセスに読み込まないようアプリケーションを構成します。
- まれな状況では、SQL Server プロセスとシステムに安定性を復元するために、モジュールまたはフィルター ドライバーとそれに関連付けられているアプリケーションを削除する必要があります。
問題の原因となる可能性があるフィルター ドライバーとモジュールの一覧
次の一覧は、パフォーマンスの問題を引き起こす可能性があるフィルター ドライバーとモジュールを特定するのに役立ちます。 問題の診断データとトレース データの反復的なセットを収集できます。
ENTAPI.DLL
Microsoft SQL Server を実行しているサーバーに McAfee VirusScan Enterprise をインストールし、SQL Server を監視するようにこのソフトウェアを構成すると、ENTAPI.DLL が SQL Server プロセスに読み込まれます。 このモジュールが読み込まれると、重要な Win 32 API も SQL Server プロセス内で迂回されます。 このモジュールが SQL Server プロセスに読み込まれている場合は、バッファー オーバーフロー保護など、さまざまな高度な監視からSqlservr.exeを除外するように McAfee VirusScan Enterprise を構成します。
HIPI.DLL、 HcSQL.DLL、 HcApi.DLL、および HcThe.DLL
これらの DLL ファイルは、SQL Server と同じシステムに McAfee Host 侵入防止ソフトウェアをインストールすると、SQL Server プロセスに読み込まれます。 このモジュールが SQL Server プロセスに読み込まれている場合は、監視リストからSqlservr.exeを除外するように McAfee Host 侵入防止を構成します。
SOPHOS_DETOURED.DLL、 SWI_IFSLSP_64.DLL、および SOPHOS_DETOURED_x64.DLL
これらの DLL ファイルは、SQL Server を実行しているサーバーに Sophos Antivirus プログラムをインストールすると、SQL Server プロセスに読み込まれます。 このモジュールが SQL Server プロセスに読み込まれている場合は、このモジュールを SQL Server プロセスに読み込むのを避けるために、AppInit_Dlls レジストリ サブキーを構成できます。 詳細については、「Windows 7 および Windows Server 2008 R2 のAppInit_DLLsとAppInit DLL とセキュア ブートを参照してください。
PIOLEDB.DLL と PISDK.DLL
PI OLEDB プロバイダーを使用して PI サーバーからデータにアクセスする場合、または PI SDK を使用する拡張ストアド プロシージャを使用する場合、これらの DLL ファイルは SQL Server プロセスに読み込まれます。 これらのモジュールが SQL Server プロセスに読み込まれている場合は、これらのモジュールのベンダーに連絡して、OLEDB プロバイダーをアウトプロセス プロバイダーとして構成してください。 この構成は、これらのモジュールを SQL Server プロセスに読み込む必要性を回避するのに役立ちます。
UMPPC*.DLL および SCRIPTCONTROL*.DLL
これらの DLL ファイルは、CrowdStrike ウイルス対策/エンドポイント保護プログラムの 追加ユーザー モード データ 防止設定を有効にした場合、SQL Server 関連プロセスのアドレス空間に読み込まれます。 SQL Server エージェントがジョブの実行時に新しいプロセスを作成しようとすると、エラーが発生することがあります。 SQL Server Management Studio の起動中にエラーが発生する可能性があります。 また、SQL Server がメモリ ダンプを生成するためにSQLDumper.exeを起動できない場合もあります。 問題に関連する情報をクラウドストライク サポートに問い合わせ、修正プログラムが利用可能かどうかを確認することをお勧めします。
perfiCrcPerfMonMgr.DLL
Trend Micro OfficeScan クライアントをインストールすると、この DLL ファイルが SQL Server プロセスに読み込まれます。 Trend Micro Endpoint 製品については、 Recommended スキャン除外リストのソフトウェア 発行元の除外リストの設定を参照してください。
MFEBOPK.SYS
このフィルター ドライバーは、McAfee VirusScan Enterprise の
Buffer Overflow Protection
機能に使用されます。 この機能を有効にしている場合は、sqlservr.exeがBuffer Overflow Protection
によって保護されているプロセスの一覧に含まれていることがわかります。 SQL Server を実行しているシステムにこのフィルター ドライバーがある場合は、 Workaround セクションで指定されているアクションを実行する必要があります。 詳細については、「 高影響の問題: 複数の問題が原因でサーバーが応答しなくなる可能性があるを参照してください。NLEMSQL64.SYS と NLEMSQL.SYS
このフィルター ドライバーは、NetLib Encryptionizer-Software によってインストールされます。 このフィルター ドライバーが SQL Server を実行しているコンピューターにインストールされ、ネットワーク共有へのバックアップを実行すると、エラーが発生する可能性があります 操作システム エラー 1: 関数が正しくありません。 この問題を解決するには、ソフトウェア ベンダーに問い合わせて、フィルター ドライバーの更新プログラムを入手してください。
MFETDIK.SYS
このフィルター ドライバーは、McAfee VirusScan Enterprise および McAfee McShield 製品の
McAfee Anti-Virus Mini-Firewall
機能に使用されます。 この機能を有効にしている場合は、sqlservr.exeがAnti-Virus
機能によって監視されるプロセスの一覧に含まれていることがわかります。 SQL Server を実行しているシステムにこのフィルター ドライバーがある場合は、 Workaround セクションで指定されているアクションを実行する必要があります。 また、ウイルス対策構成のリスクの低いプロセスの一覧に SQL Server プロセスを追加することを検討することもできます。
リファレンス
- WDM ドライバーの種類
- Windows でカーネル モード フィルター ドライバーを一時的に非アクティブ化する方法
- 迂回または同様の手法により、SQL Server で予期しない動作が発生する可能性がある
- SQL Server プロセスの外部で DLL ベースの COM オブジェクトを実行する方法
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
サードパーティのお問い合わせ窓口に関する免責事項
サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。
サード パーティの情報およびソリューションに関する免責事項
このドキュメントは暫定版であり、このドキュメントに記載されている情報およびソリューションは、このドキュメントの発行日におけるマイクロソフトの見解を示すものです。 これらのソリューションはマイクロソフトまたはサードパーティ プロバイダーを通じて利用できます。 マイクロソフトは、この資料で説明することがあるサードパーティ プロバイダーまたはサードパーティ ソリューションを特別に推奨するものではありません。 この資料で説明していない、その他のサードパーティ プロバイダーまたはサードパーティ ソリューションが存在する場合もあります。 マイクロソフトは変化する市場の条件に対応する必要があるため、この情報がマイクロソフトの誓約であると解釈しないでください。 マイクロソフトは、マイクロソフトまたはこの資料に記載されているサードパーティ プロバイダーによって提供される情報の正確性およびソリューションの正確性を保証することも、推奨することもできません。
明示、黙示、または法律の規定にかかわらず、マイクロソフトは一切の保証をせず、すべての表示、保証、および条件を排除します。 これらの条件は、あらゆるサービス、ソリューション、製品や他の資料または情報に関する権利、非侵害、満足できる条件、市場性、特定目的への適合性の表示、保証、および条件を含みますが、これらに限定されません。 マイクロソフトは、いかなる場合においても、この資料に記載されているサードパーティ ソリューションの責任を負いません。