mar*_*c_s 12 memory sql-server sql-server-2005
我的一个朋友今天问我(试图让他的一位激动的客户平静下来)如何才能在 SQL Server 2005 中找出在任何给定时间哪个数据库使用了多少内存(在服务器的 RAM 中)。
这可能吗?如果是这样 - 如何?您可以使用内置的 SQL Server 工具执行此操作,还是需要额外的第三方选项?
他的客户很慌张,因为他的专用 SQL Server 机器突然使用了 4 GB RAM 中的 200KB 以外的所有内容。我不认为这是一个问题,真的 - 但是因为这个家伙声称它或多或少是在一夜之间发生的,他想知道是什么导致了内存使用量的增加......
马克
Pau*_*dal 25
这很可能是由于查询想要将更多页面读入缓冲池而引起的,而缓冲池会占用更多内存来容纳它。这就是 SQL Server 应该如何工作的。如果盒子遇到内存压力,它会要求 SQL Server 放弃一些内存,它会这样做。客户不应该担心。
您可以使用 DMVsys.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
Run Code Online (Sandbox Code Playgroud)
我在这篇博文 存储引擎内部:缓冲池中有什么?
您还可以查看 KB 907877(如何使用 DBCC MEMORYSTATUS 命令监视 SQL Server 2005 上的内存使用情况),这将使您了解 SQL Server 其余内存使用情况(但不是每个数据库)的细分情况。
希望这可以帮助!
归档时间: |
|
查看次数: |
8076 次 |
最近记录: |