sql-server – 找出SQL Server 2005中哪个数据库使用了多少RAM

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

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

他的客户都很慌张,因为他的专用sql Server机器突然使用了其4GB RAM中的200KB.我不认为这是一个问题,真的 – 但是因为这个家伙声称它发生了或多或少的过夜,他想知道是什么导致了内存使用的增加…..

解决方法

这很可能是由于想要将更多页面读入缓冲池的查询引起的,并且缓冲池占用了更多内存以容纳它.这就是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

我在这篇博文Inside the Storage Engine: What’s in the buffer pool?中解释了这一点

您还可以签出KB 907877(How to use the DBCC MEMORYSTATUS command to monitor memory usage on SQL Server 2005),它将让您了解sql Server的其余内存使用情况(但不是每个数据库)的细分.

希望这可以帮助!

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03