Lea*_*min 3 sql-server tempdb log
几个月以来,我一直在努力解决这个问题,我说这不是数据库问题,并将此案例分配给存储和操作系统团队,然后他们将其分配给我。这个问题反复发生,没有任何定义的发生模式。
我检查了这里提出的相同问题,我可以说这不是数据库损坏的问题,因为我使用 Ola Hallengren 的脚本进行维护工作,并且每周对用户和系统数据库进行数据库完整性检查(checkdb),并且没有报告任何问题在那里面。
也针对类似问题访问了第二个链接,可以确认 tempdb 处于简单恢复状态。
我为数据和日志添加了一个额外的文件,这样如果一个文件不可用,另一个文件仍然可以访问,但是后来我知道 tempdb 的访问是顺序的,因此只有当第一个文件已满时它才会转到第二个文件:
每次出现此问题时,我都可以看到 Windows 应用程序日志中还有另一个错误,如下所示:
SQLServerLogMgr::LogWriter: Operating system error 170(The requested resource is in use.) encountered.
Run Code Online (Sandbox Code Playgroud)
存储团队已将这些文件从防病毒扫描中排除。
这里需要注意的一件事 - 我检查了其他系统数据库及其文件位置,可以看到对于 master 和 model,数据和日志文件在同一个驱动器(E 驱动器)中,而对于 tempdb 和 msdb,数据在 E 驱动器和日志中文件在 G 驱动器中,不确定这是否相关。
当作业触发或任何事件被触发时,是否有任何检查系统数据库的顺序?如果该驱动器出现问题,则 msdb 也在同一驱动器上。
这是一个集群服务器,数据库驱动器在两台服务器中共享,服务器用于共享点应用程序。
Server Version: Windows Server 2012 Standard
SQL Server: Microsoft SQL Server 2012 (SP4-GDR) (KB4057116) - 11.0.7462.6 (X64)
Jan 5 2018 22:11:56
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud)
我们剩下的唯一选择是重新启动服务或故障转移 - 这样做听起来不太好。
在这方面的任何帮助表示赞赏。
SQLServerLogMgr::LogWriter: 遇到操作系统错误 170(请求的资源正在使用中。)。
是的,这是从 logwriter 遇到的操作系统错误中冒出来的。在这种情况下,它是操作系统错误 170,这是资源正在使用中。问题出在 SQL Server 之外(除非将任何不良的 3rd 方 DLL 加载到地址空间中),这真是太糟糕了。
通常,当我看到它时,它是防病毒、主机保护、碎片整理软件、备份软件等,当驱动器未在后端正确设置时,最终会在文件或集群环境中长时间锁定文件。
存储团队已将这些文件从防病毒扫描中排除。
不想粗鲁,但我不买它。告诉他们你想要证据。此外,仅仅因为文件被“排除”并不意味着防病毒软件不会查看它,它仍然会查看 - 只是在大多数情况下不会进行所有深入检查。
我首先要检查是否有流氓应用程序试图做某事。问题是这可能随时发生,并且有问题的(如果有的话)应用程序可能会在短时间内或长时间保持锁定——我们不知道。
快速执行此操作的方法之一是在有问题的文件上使用sysinternals 处理应用程序。由于此错误在 SQL Server 中有一个错误代码,因此您应该能够创建一个代理警报来执行一个作业,该作业调用一个小批处理文件或 PowerShell 或您创建的任何内容来运行该文件的句柄。这应该有助于尝试快速获取信息(但可能不够快)。
另一种方法是运行进程监视器(procmon),它是另一种 sysinternals 工具,用于捕获除 SQL Server 之外的文件的其他内容,尤其是在您可以相当频繁或轻松地重现它的情况下。
归档时间: |
|
查看次数: |
1291 次 |
最近记录: |