本帖最后由 yanyangtian4502 于 2012-5-17 08:53 编辑
好吧,说了这么多,我们还是言归正传,谈谈内存方面的问题。
很多的朋友一谈到内存,第一反应和建议就是:将32位的操作系统和数据库换为64位,或者使用AWE等命令充分的使用内存,这是一个方面,确实让数据库可用的内存变多了,还有一个问题就是:数据库是否合理的使用了这些内存呢?
首先送大家两个脚本,当是体验一把:
SET TRAN ISOLATION LEVEL READ UNCOMMITTED SELECT ISNULL(DB_NAME(database_id), 'ResourceDb') AS DatabaseName , CAST(COUNT(row_count) * 8.0 / (1024.0) AS DECIMAL(28,2)) AS [Size (MB)] FROM sys.dm_os_buffer_descriptors GROUP BY database_id ORDER BY DatabaseName
上面的脚本用来查询每一个数据库占用的内存。
我们再来看下一个,查询出表或者索引占用的内存,如下:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT OBJECT_NAME(p.[object_id]) AS [TableName] , (COUNT(*) * 8) / 1024 AS [Buffer size(MB)] , ISNULL(i.name, '-- HEAP --') AS ObjectName , COUNT(*) AS NumberOf8KPages FROM sys.allocation_units AS a INNER JOIN sys.dm_os_buffer_descriptors AS b ON a.allocation_unit_id = b.allocation_unit_id INNER JOIN sys.partitions AS p INNER JOIN sys.indexes i ON p.index_id = i.index_id AND p.[object_id] = i.[object_id] ON a.container_id = p.hobt_id WHERE b.database_id = DB_ID() AND p.[object_id] > 100 GROUP BY p.[object_id], i.name ORDER BY NumberOf8KPages DESC
|