我的一个朋友今天问我(试图让他的一个激动的客户平静下来)如何在 SQL Server 2005 中找出在任何给定时间哪个数据库使用了多少内存(在服务器的 RAM 中)。
这有可能吗?如果是这样 - 如何?您可以使用内置 SQL Server 工具执行此操作,还是需要额外的第三方选项?
他的客户非常慌张,因为他的专用 SQL Server 机器突然使用了 4 GB RAM 中的 200KB。我不认为这是一个问题,真的 - 但是由于这个人声称它或多或少发生在晚上,他想知道是什么导致了内存使用量的增加......
马克
这很可能是由于一个查询想要将更多页面读入缓冲池,而缓冲池占用了更多内存来容纳它。这就是 SQL Server 的工作方式。如果盒子遇到内存压力,它会要求 SQL Server 放弃一些内存,它会这样做。客户不应该担心。
您可以使用 DMV
sys.dm_os_buffer_descriptors
查看哪个数据库正在使用多少缓冲池内存。此代码段将告诉您缓冲池中有多少来自每个数据库的干净和脏(自上次检查点或从磁盘读取后修改)页面。您可以进一步修改。我在这篇博文中对此进行了更多解释存储引擎内部:缓冲池中有什么?
您还可以查看 KB 907877(如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 上的内存使用情况),这将使您了解 SQL Server 其余内存使用情况(但不是每个数据库)的细分。
希望这可以帮助!
你的朋友也可以限制 SQL 占用的 RAM 量,因为正如 Paul 上面所说的,SQL 会占用它所能占用的所有内存。
将 SQL Server 占用的内存量限制为 2000 Mb(或您认为最好的任何值)。