大约每周一次,我的 MSSQL 服务器会超时,或者说机器内存不足。今天早上,内存已达到 3.9GB(可用内存为 4GB),而 MSSQL 占用了 2.5GB。
我担心我没有配置 SQL 来按应有的方式释放内存,因此我在超时发生时运行了 sp_who2 来查看正在运行的进程。
如果我可以发布 CSV 数据文件的话,那么总共有 85 个流程,其中大部分与全文服务有关:
FT Gatherer - 其中约有 35 个在“sa”帐户下针对主数据库运行,状态为休眠或后台,许多依赖于其他进程。这正常吗?
MySite 数据库 - 一个活动站点/数据库只有 5 个进程,并且所有进程都处于休眠或暂停状态 - 但它们的 lastBatch 日期设置为 2020 年 1 月 12 日。这是正常的吗?
数据库大小只有大约 20mb,流量水平非常低,所以我正在考虑限制 SQL 可以访问的 RAM 数量(从无限制到可能 2GB)。
任何想法/建议都将受到赞赏。
非常感谢
本
答案1
您应该始终为 SQL 配置一个上限,否则它将占用所有可用内存。如果 RAM 为 4 GB,而数据库只有 20 MB,则将内存限制设置为 2 GB 应该足够了。
您是否使用全文来做某事?
答案2
发生这种情况时,系统事件日志是否会指示错误?
SQL 日志是否指示死锁或任何其他可能导致超时的原因?
您确定这是 SQL 的问题,而不是由服务器上运行的其他程序(有意或无意)引起的吗?
答案3
试试这个。安装适用于 Windows 的调试工具。在控制台上启动 windbg.exe 并保持其运行。您需要选择文件 > 内核调试 > 本地选项卡。在下一次出现时,输入 !vm 命令,它将为您提供服务器上所有内存使用情况的完整图片。
您是否在 x86 上使用 boot.ini 中的 /3GB 开关?在 x86 32 位架构的这种情况下,您很容易对内核内存(分页/非分页池、系统 PTE 和文件系统缓存)产生额外压力,因为 /3GB 只为操作系统留下 1 GB。
在 x86 上,当你运行 !vm 时,你应该会看到类似这样的内容:
NonPagedPool Max: 65281 ( 261124 Kb)
PagedPool Maximum: 134144 ( 536576 Kb)
这些数字可能会有所不同,因为它是在启动时动态设置的。当发生这种情况时,您可以将使用量与最大值进行比较,以确定是否是内核内存问题。
http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx