Answers:
这很可能是由于查询想要将更多页面读入缓冲池,并且缓冲池获取了更多的内存来适应该请求。这就是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内存使用情况的细目分类(但不是按数据库)。
希望这可以帮助!
您的朋友还可以限制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