sql-server – 为什么SQL Server 2012 Express在我的服务器上使用9.5GB的RAM?

前端之家收集整理的这篇文章主要介绍了sql-server – 为什么SQL Server 2012 Express在我的服务器上使用9.5GB的RAM?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个应用程序,我计划在其中嵌入sql Server 2012 Express作为主数据存储区.在我的开发机器(带有3GB RAM的Win7-32​​)上进行测试时,我从未发现sqlservr.exe进程使用超过1GB的RAM,正如我期望从sql Server的Express版本发布的 hardware scaling limits那样.

然后我将我的应用程序移动到服务器级机器(Win Server 2008R2 64位,16GB RAM)以评估其在那里的性能,并惊讶地发现sqlservr.exe进程迅速扩展到大约9.5GB的RAM并保持在那里.

我重新启动它几次,看看是否会产生任何影响,但每次,过程迅速恢复到~9.5GB.现在我很高兴让sql Server Express使用我的RAM,但我想知道这是否是预期的行为,以便我不依赖于基于RAM使用不正确的性能水平.

仅供参考,根据SELECT @@ VERSION,我服务器机器上的sql Server版本是:

  1. Microsoft sql Server 2012 (SP1) - 11.0.3000.0 (X64)
  2. Oct 19 2012 13:38:57
  3. Copyright (c) Microsoft Corporation
  4. Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

我的9.5GB号码来自任务管理器中的“私人工作集”号码. DBCC memorystatus的第一个输出表(尽管在现在空闲的服务器上)如下:

  1. PROCESS/SYSTEM COUNTS
  2. Available Physical Memory 5543616512
  3. Available Virtual Memory 8734902411264
  4. Available Paging File 22471094272
  5. Working Set 9664200704
  6. Percent of Committed Memory in WS 99
  7. Page Faults 2627510
  8. System physical memory high 1
  9. System physical memory low 0
  10. Process physical memory low 0
  11. Process virtual memory low 0

spaghettidba在sys.dm_os_memory_clerks上建议查询输出

  1. MEMORYCLERK_sqlBUFFERPOOL 1410
  2. OBJECTSTORE_LOCK_MANAGER 256
  3. MEMORYCLERK_sqlCLR 38
  4. MEMORYCLERK_SOSNODE 26
  5. CACHESTORE_sqlCP 11

加上大约10个较小的条目,总和小于30MB.

解决方法

缓冲池的sql Express限制为1GB,但sql Server中还有许多其他内存池.我发现令人惊讶的是过度使用非缓冲内存池.
要找出每个内存职员的内存使用情况,请运行以下命令:
  1. SELECT type,SUM(pages_kb)/1024 AS MemoryMB
  2. FROM sys.dm_os_memory_clerks
  3. GROUP BY type
  4. ORDER BY 2 DESC

希望这可以帮助

猜你在找的MsSQL相关文章