ken*_*nux 6 sql-server-2008 sql-server
我试图更多地了解SQL Server的内存使用情况。我似乎无法弄清楚内存缓冲区中究竟存储了什么。我的设置是Windows Server 2008 x64,8 GB RAM,SQL Server 2008标准 R2,最大 SQL Server 内存 6000 MB。
运行 SQL Server 几个小时后,资源监视器显示sqlservr.exe使用了大约 6000 MB 的内存,但是当我检查数据和计划缓存的使用情况时,我得到的内存不到 6000 MB:
Cached plans 2541 MB
Database data cached 2706 MB
Total 5247 MB
Run Code Online (Sandbox Code Playgroud)
我使用sys.dm_exec_cached_plan并sys.dm_os_buffer_descriptors找到这些值,所以从这些值中我不知道 750 MB 用于什么......我不认为 SQL Server 正在保留内存,因为这是一台 x64 机器......我错过了什么这里?
缓冲池之外还有其他内存消耗者。例如,SQL Server 会将内存用于工作线程、多页分配、链接服务器、扩展存储过程、CLR 等。
缓冲池永远不会等于 SQL Server 消耗 100% 的内存。这是一个常见的误解,并且设置最大内存将是 SQL Server 使用的实际最大内存(不正确)。
编辑:我认为这是获取非缓冲池内存大小的方法。 注意:在将此查询视为事实之前,请等待其他 SQL Server 专业人员的输入。我不能保证它绝对正确。
declare
@data_cache_size_mb decimal(12, 2),
@plan_cache_size_mb decimal(12, 2),
@total_mem_mb decimal(12, 2)
select
@data_cache_size_mb = count(*) * 8 / 1024.
from sys.dm_os_buffer_descriptors
select
@plan_cache_size_mb = sum(size_in_bytes) / 1024. / 1024.
from sys.dm_exec_cached_plans
select
@total_mem_mb = sum(pages_allocated_count) * 8 / 1024.
from sys.dm_os_memory_objects
select
@data_cache_size_mb as data_cache_size_mb,
@plan_cache_size_mb as plan_cache_size_mb,
@data_cache_size_mb + @plan_cache_size_mb as buffer_pool_size_mb,
@total_mem_mb as total_instance_mem_mb,
@total_mem_mb - (@data_cache_size_mb + @plan_cache_size_mb) as non_buffer_pool_size_mb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3548 次 |
| 最近记录: |