Чому SQL Server 2012 Express використовує 9,5 Гб оперативної пам’яті на моєму сервері?


22

Я будую додаток, в якому я планую вбудувати SQL Server 2012 Express як основний сховище даних. Під час тестування на моїй розроблювальній машині (Win7-32 ​​з 3 Гб оперативної пам’яті) я ніколи не спостерігав за sqlservr.exeпроцесом використання більше 1 ГБ оперативної пам’яті, як би очікував від опублікованих обмежень масштабування обладнання для експрес-версії 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

Висновок із запропонованого запиту спагеттідби на sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

плюс ~ 10 більше менших записів, які на суму менше 30 Мб.

Відповіді:


12

Для буферного пулу 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

Сподіваюсь, це допомагає


Вихід із цього запиту: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 А потім ще кілька маленьких, які дорівнюють <30 Мб. Мені це здається дивним. -arg- при форматуванні коментаря.
Дан

Хммм. Один лише MEMORYCLERK_SQLBUFFERPOOL виходить за межі 1 ГБ, тому ми можемо зіткнутися з помилкою. Що мені здається дивним, це те, як він використовує 9,5 Гб, не відображаючись у запиті.
спагеттідба

Я думаю, що в sys.dm_os_memory_clerks (поруч з single_pages_kb) є кілька інших цікавих стовпців: віртуальні_memory_committed_kb здаються більш актуальними у випадку MEMORYCLERK_SQLBUFFERPOOL.
Разван Сокол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.