找出SQL Server 2005中的哪个数据库使用多lessRAM

我的一个朋友今天问我(试图冷静他的一个激动的客户)如何在SQL Server 2005中找出哪个数据库在任何给定时间使用了多less内存(在服务器的RAM中)。

这是可能的吗? 如果是这样 – 如何? 你可以用内置的SQL Server工具来做到这一点,还是需要额外的第三方选项?

他的客户都惊慌失措,因为他专用的SQL Server机器突然使用了4GB内存的200KB。 我不认为这是一个问题,真的 – 但是因为这个家伙声称它发生了或多或less的一夜,他想知道是什么造成这种内存使用增加…..

渣子

这很可能是由于想要将更多页面读入缓冲池的查询所引起的,并且缓冲池占用了更多的内存来容纳它。 这就是SQL Server应该如何工作的。 如果这个盒子遇到内存压力,它会要求SQL Server放弃一些内存,它会这样做。 顾客不应该担心。

您可以使用DMV sys.dm_os_buffer_descriptors来查看哪个数据库正在使用多less缓冲池内存。 这个片段会告诉你每个数据库有多less干净和脏的(从上一个检查点开始修改或从磁盘读取的)页面在缓冲池中。 您可以进一步修改。

 SELECT (CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State', (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name', COUNT (*) AS 'Page Count' FROM sys.dm_os_buffer_descriptors GROUP BY [database_id], [is_modified] ORDER BY [database_id], [is_modified]; GO 

我在这篇博文中解释了这一点:在存储引擎里面:什么是缓冲池?

您还可以签出知识库文章907877( 如何使用DBCC MEMORYSTATUS命令来监视SQL Server 2005上的内存使用情况 ),这将使您了解其余SQL Server的内存使用情况(但不是每个数据库)的细目。

希望这可以帮助!

你的朋友也可以限制SQL所需的RAM数量,因为如上面的Paul所述,SQL会占用一切可能的内存。

将SQL Server占用的内存量限制为2000 Mb(或者您认为最好的)。

 --Enable advanced options: USE master EXEC sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE --Set the maximum amount of memory to 2000 MB: USE master EXEC sp_configure 'max server memory (MB)', 2000 RECONFIGURE WITH OVERRIDE --Display the newly set configuration: USE master EXEC sp_configure 'max server memory (MB)' --Set 'show advanced options' back to default: USE master EXEC sp_configure 'show advanced options', 0 RECONFIGURE WITH OVERRIDE