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

Dan*_*Dan 22 sql-server memory sql-server-2012 sql-server-express

我正在构建一个应用程序,我计划在其中嵌入 SQL Server 2012 Express 作为主数据存储。在我的开发机器(具有 3GB RAM 的 Win7-32​​)上进行测试时,我从未观察sqlservr.exe到使用超过 1GB RAM的过程,正如我对已发布的 SQL Server Express 版硬件扩展限制所期望的那样。

然后我将我的应用程序移到一台服务器级机器(Win Server 2008R2 64 位,16GB RAM)来评估它的性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约 9.5GB 的 RAM 并停留在那里。

我重新启动了几次,看看是否会有任何影响,但每次,该过程都迅速恢复到 ~9.5GB。现在我当然很高兴让 SQL Server Express 使用我的 RAM,但我想知道这是否是预期的行为,以便我不会依赖基于不正确的 RAM 使用的性能级别。

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

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)

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

PROCESS/SYSTEM COUNTS
Available Physical Memory   5543616512
Available Virtual Memory    8734902411264
Available Paging File       22471094272
Working Set                 9664200704
Percent of Committed Memory in WS   99
Page Faults                 2627510
System physical memory high 1
System physical memory low  0
Process physical memory low 0
Process virtual memory low  0
Run Code Online (Sandbox Code Playgroud)

spaghettidba 建议查询的输出sys.dm_os_memory_clerks

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11
Run Code Online (Sandbox Code Playgroud)

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

spa*_*dba 12

SQL Express 的缓冲池限制为 1GB,但 SQL Server 中还有许多其他内存池。我感到惊讶的是过度使用非缓冲内存池。要找出每个内存管理员的内存使用情况,请运行以下命令:

SELECT type, SUM(pages_kb)/1024 AS MemoryMB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY 2 DESC
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助