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


12

我的一个朋友今天问我(试图平息一个烦躁的客户),您如何才能在SQL Server 2005中找出哪个数据库在给定时间使用了多少内存(在服务器的RAM中)。

那有可能吗?如果是这样-如何?您可以使用内置的SQL Server工具来执行此操作,还是需要额外的第三方选项?

由于他专用的SQL Server计算机突然使用了其4 GB RAM中的200KB,因此,他的客户全都心慌。我真的不认为这是个问题-但是由于这个人声称它或多或少是在一整夜发生的,所以他想知道是什么导致了内存使用量的增加.....

Answers:


25

这很可能是由于查询想要将更多页面读入缓冲池,并且缓冲池获取了更多的内存来适应该请求。这就是SQL Server应该如何工作的方式。如果该框遇到内存压力,它将要求SQL Server放弃一些内存,它将这样做。客户不必担心。

您可以使用DMV sys.dm_os_buffer_descriptors查看哪个数据库正在使用多少缓冲池内存。该代码段将告诉您缓冲池中每个数据库中有多少干净页(从上一个检查点更改或从磁盘读取)。您可以进一步修改。

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

我在此博客文章《存储引擎内部:缓冲池中有什么?

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

希望这可以帮助!


保罗,你真是个天才!
marc_s 2009年

2

您的朋友还可以限制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

谢谢-我知道如何限制内存,但是我不知道如何确定在任何给定时间哪个数据库正在使用多少缓冲池内存。
marc_s 2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.