Почему SQL Server 2012 Express использует 9,5 ГБ оперативной памяти на моем сервере?

Я создаю приложение, в котором я планирую включить SQL Server 2012 Express в качестве основного хранилища данных. При тестировании на моей машине разработки (Win7-32 ​​с 3 ГБ оперативной памяти) я никогда не наблюдал процесс sqlservr.exe для использования более 1 ГБ ОЗУ, как я ожидал бы из опубликованного ограничения аппаратного масштабирования для выпуска Express SQL Server .

Затем я перенес свое приложение на серверную машину (Win Server 2008R2 с 64-разрядной памятью 16 ГБ), чтобы оценить ее производительность там, и с удивлением обнаружил, что процесс sqlservr.exe быстро расширяется примерно до 9,5 ГБ оперативной памяти и остался там.

Я перезапустил его пару раз, чтобы убедиться, что это будет иметь какой-то эффект, но каждый раз процесс быстро возвращался к ~ 9,5 ГБ. Теперь я, безусловно, рад, что SQL Server Express использует мою оперативную память, но я хотел бы знать, будет ли это ожидаемым поведением, чтобы я не полагался на уровни производительности, основанные на неправильном использовании ОЗУ.

FYI, версия SQL Server на моем сервере в соответствии с SELECT @@VERSION:

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)

Мой номер 9.5 ГБ появился из номера «Частный рабочий набор» в диспетчере задач. Первая таблица вывода из 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

Выход из предложенного запроса spaghettidba по sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

плюс ~ еще 10 меньших записей, сумма которых меньше 30 МБ.

21 голос | спросил Dan 17 Jpm1000000pmThu, 17 Jan 2013 19:09:14 +040013 2013, 19:09:14

1 ответ


11

SQL Express ограничивается 1 ГБ для пула буферов, но в SQL Server имеется много других пулов памяти. То, что я нахожу удивительным, - чрезмерное использование пулов небуферной памяти. Чтобы узнать об использовании памяти для каждого клерка, запустите это:

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

Надеюсь, что это поможет

ответил spaghettidba 18 Jpm1000000pmFri, 18 Jan 2013 13:54:37 +040013 2013, 13:54:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132