我正在处理 32 位 Windows 2003 服务器,它曾经是一个物理机箱,但现在在 vmware 中虚拟化。有两个 SQL Server 实例正在运行。一个是 2000 Standard,另一个是 2008 R2 Express。该机器据称分配了 3GB 的 RAM,但 SQL Server 实例似乎使用的 RAM 非常少。如果我将所有进程合并起来,我会得到大约 500MB 的已用 RAM。但看起来可用的物理内存也不多。所以问题是:我如何才能找到正在使用 RAM 的内容?
答案1
对于 SQL 2008 实例,尝试运行此代码:
-- server wide info
select
-- sp_configure
(select value_in_use from sys.configurations where configuration_id = 1543) as 'Min Mem',
(select value_in_use from sys.configurations where configuration_id = 1544) as 'Max Mem',
-- buffer pool & plan cache
(select cast(count(*) * 8.0 / 1024.0 as numeric(10,2)) from sys.dm_os_buffer_descriptors) as 'Buffer Pool MB',
(select cast(sum(cast(size_in_bytes as bigint)) / 1024.0 / 1024.0 as numeric(10,2)) from sys.dm_exec_cached_plans) as 'Plan Cache MB',
-- perfmon
(select cntr_value from sys.dm_os_performance_counters where object_name like '%Buffer Manager%' and counter_name = 'Page Life Expectancy') as 'PLE',
(select cntr_value from sys.dm_os_performance_counters where object_name like '%Memory Manager%' and counter_name = 'Memory Grants Pending') as 'MGP'
go
这将告诉你你的最大限度和分钟设置SQL Server 内存它会告诉你你的缓冲池和计划缓存。页面预期寿命是数据在内存中保留的时间,时间越长越好。内存授权待定表示有多少查询因等待内存而卡住,越低越好。
在任务管理器,单击“进程”选项卡,并选中“显示所有用户的进程”复选框。然后单击“内存”列以按内存使用情况排序。查看是否有其他程序占用了您的内存。
下载系统内部工具并运行进程探索器,进程管理器。这将提供比任务管理器更详细的信息。
由于它是虚拟机,因此虚拟机管理员并检查以下内容:预订,限制, 和乘热气球。您希望 Reservation 等于您认为已为服务器设置的内存。您希望 Limit 和 Ballooning 为零。
祝您狩猎愉快!