加载某些模块或筛选器驱动程序时的性能和一致性问题
原始产品版本:SQL Server
原始 KB 数: 2033238、2454053
现象
请考虑以下方案之一:
- 某些模块将加载到 SQL Server 进程地址空间(Sqlservr.exe)。
- 某些筛选器驱动程序将加载到运行 SQL Server 组件的系统中。
在这种情况下,可能会遇到 SQL Server 数据库引擎的性能下降和一致性问题。
- 报告各种与无响应相关的错误消息和条件(SQL Server 计划程序消息(例如 17883、应用程序超时消息、SQL Server 中的严重阻塞)。
- 即使并发的负载或活动量并不异常严重,SQL Server 的响应速度也会变慢。
- 异常(例如访问冲突)、有关数据库一致性、断言消息或意外进程终止的关键错误消息。
- 在 SQL Server 中使用内存中 OLTP 表时,100% CPU 利用率和数据库恢复时间较长。
- SQL Server 进程的 CPU 使用率较高,尤其是特权处理器时间。
- 当 SQL Server 进程调用 Windows API 时,意外或无法解释的失败。
- 为SQLDumper.exe触发的内存转储可能无法完成阻碍任何故障排除活动。
由于这些问题的性质,根本原因识别通常需要大量的故障排除时间和低级别的跟踪。
原因
出现这些问题的原因是模块和筛选器驱动程序的以下原因。
模块(DLL 或 EXE)
出现这些问题的原因是运行 SQL Server 的服务器上安装的应用程序或其他软件可以将某些模块加载到 SQL Server 进程(Sqlservr.exe)。 这可以实现特定的业务逻辑要求、增强的功能或入侵监视。 这些模块可能会执行不受支持的活动,包括绕道重要的 Win32 API 和 SQL Server 例程,以及调用有风险的 API。 此外,这些模块中的一些固有问题可能会导致 SQL Server 进程正常运行所需的各种内存结构损坏。
可以通过各种工具(如 ListDlls 或进程资源管理器)获取在给定进程中加载的模块列表。
筛选器驱动程序
筛选器驱动程序 可以作为应用程序的安装程序的一部分安装在系统上,以提供某种功能。 示例包括防病毒保护、联机备份、加密服务和数据压缩或碎片整理设施。 这些筛选器驱动程序将自身插入 Windows 文件 I/O 堆栈,以增强或更改文件系统请求的行为。
在某些情况下,这些请求可能需要很长时间才能完成或消耗过多的资源。 此外,同一驱动程序堆栈中存在的不同筛选器驱动程序之间可能存在某种形式的不兼容。
SQL Server 通常会发出大量文件系统 I/O(其中一些 I/O 大于平均值)。 因此,与其他 I/O 强度较低的正在运行的应用程序相比,筛选器驱动程序的问题将对 SQL Server 产生更严重的影响。
注意
与注入的 DLL 不同,筛选器驱动程序(通常具有.sys扩展)在用户进程详细信息中不可见,因为它们是内核实体。 可以使用 Windows 内置 fltmc.exe 等工具来发现已安装的微型筛选器。
解决方法
警告
此解决方法可能使计算机或网络更容易受到恶意用户或病毒等恶意软件的攻击。 我们不建议使用此解决方法,但提供此信息,以便你可以自行实施此解决方法。 如果使用此解决方法,需自行承担风险。
若要解决这些问题,请确定导致问题的筛选器驱动程序或模块。 然后,请适当尝试以下所有方法或以下方法之一。 为了帮助你识别筛选器驱动程序或模块,请查看 一些可能的筛选器驱动程序和模块 的列表以了解详细信息。
- 请联系模块、筛选器驱动程序或应用程序的供应商来检查更新。 应用任何可用的更新。
- 以不干扰 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 进程,请将 McAfee VirusScan Enterprise 配置为从各种高级监视(如缓冲区溢出保护)中排除Sqlservr.exe。
HIPI.DLL、HcSQL.DLL、HcApi.DLL 和HcThe.DLL
如果在与 SQL Server 相同的系统上安装 McAfee 主机入侵防护软件,这些 DLL 文件将加载到 SQL Server 进程中。 如果注意到此模块已加载到 SQL Server 进程,请将 McAfee 主机入侵防护配置为从其监视列表中排除Sqlservr.exe。
SOPHOS_DETOURED.DLL、SWI_IFSLSP_64.DLL和SOPHOS_DETOURED_x64.DLL
如果在运行 SQL Server 的服务器上安装 Sophos 防病毒程序,这些 DLL 文件将加载到 SQL Server 进程中。 如果注意到此模块已加载到 SQL Server 进程中,则可以配置AppInit_Dlls注册表子项,以避免将此模块加载到 SQL Server 进程中。 有关详细信息,请参阅 Windows 7 和 Windows Server 2008 R2 和 AppInit DLL 和 安全启动中的AppInit_DLLs。
PIOLEDB.DLL 和 PISDK.DLL
如果使用 PI OLEDB 提供程序访问 PI 服务器中的数据,或者使用使用 PI SDK 的扩展存储过程,这些 DLL 文件将加载到 SQL Server 进程中。 如果注意到这些模块已加载到 SQL Server 进程中,请联系这些模块的供应商,将 OLEDB 提供程序配置为进程外提供程序。 此配置有助于避免需要将这些模块加载到 SQL Server 进程中。
UMPPC*.DLL 和 SCRIPTCONTROL*.DLL
如果为 CrowdStrike 防病毒/终结点保护程序启用 “其他用户模式数据 防护设置”,这些 DLL 文件将加载到 SQL Server 相关进程的地址空间中。 在执行作业时,你可能会注意到SQL Server 代理尝试创建新进程时失败。 尝试启动 SQL Server Management Studio 时可能会遇到失败。 还可能会发现 SQL Server 无法启动SQLDumper.exe以生成内存转储。 建议联系 Crowdstrike 支持人员,了解与你的问题相关的信息,并询问修补程序是否可用。
perfiCrcPerfMonMgr.DLL
如果安装 Trend Micro OfficeScan 客户端,此 DLL 文件将加载到 SQL Server 进程中。 请参阅 Trend Micro Endpoint 产品的推荐扫描排除列表中的软件发布者排除列表设置。
MFEBOPK.SYS
此筛选器驱动程序用于
Buffer Overflow Protection
McAfee VirusScan Enterprise 中的功能。 如果已启用此功能,你会注意到sqlservr.exe是受Buffer Overflow Protection
保护的进程列表之一。 如果在运行 SQL Server 的系统上具有此筛选器驱动程序,则必须执行“解决方法”部分中指定的操作。 有关详细信息,请参阅 “高影响问题:服务器可能因多个问题而无响应”。NLEMSQL64.SYS和NLEMSQL.SYS
NetLib Encryptionizer-Software 安装此筛选器驱动程序。 当此筛选器驱动程序安装在运行 SQL Server 的计算机上安装,并且执行到网络共享的备份时,可能会遇到返回 操作系统错误 1:错误函数的失败。 若要解决此问题,请联系软件供应商以获取筛选器驱动程序的更新。
MFETDIK.SYS
此筛选器驱动程序用于
McAfee Anti-Virus Mini-Firewall
McAfee VirusScan Enterprise 和 McAfee McShield 产品中的功能。 如果已启用此功能,你会注意到sqlservr.exe是该功能监视Anti-Virus
的进程列表之一。 如果在运行 SQL Server 的系统上具有此筛选器驱动程序,则必须执行“解决方法”部分中指定的操作。 还可以考虑将 SQL Server 进程添加到防病毒配置中的低风险进程列表。
参考
- WDM 驱动程序的类型
- 如何在 Windows 中暂时停用内核模式筛选器驱动程序
- 绕行或类似技术可能会导致 SQL Server 出现意外行为
- 如何在 SQL Server 进程外部运行基于 DLL 的 COM 对象
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 对这些产品的性能和可靠性不作任何明示或默示担保。
第三方联系人免责声明
Microsoft 会提供第三方联系信息来帮助你查找有关本主题的其他信息。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证第三方联系信息的准确性。
第三方信息和解决方案免责声明
本文档中的信息和解决方案代表在本文发布之时 Microsoft 公司对这些问题的最新观点。 此解决方案通过 Microsoft 或第三方供应商提供。 Microsoft 并不明确建议使用本文中述及的任何第三方供应商产品或第三方解决方案。 可能还存在其他一些本文未提及的第三方提供商或第三方解决方案。 因为 Microsoft 必须响应不断变化的市场形势,所以此信息不应解释为 Microsoft 一方的承诺。 Microsoft 不担保或认可由 Microsoft 或提到的任何第三方供应商提供的任何信息或任何解决方案的准确性。
Microsoft 不作任何担保,并拒绝所有明示、暗示或法定的表述、担保和条件。 这些条件包括但不限于,与任何服务、解决方案、产品或任何其他资料或信息的所有权、非侵权、满意状态、适销性和针对特定用途的适用性相关的表述、担保或条件。 在任何情况下,对于本文中提到的任何第三方解决方案,Microsoft 概不负责。