SQL Server 2012 Express neden sunucumda 9.5 GB RAM kullanıyor?


22

SQL Server 2012 Express'i birincil veri deposu olarak yerleştirmeyi planladığım bir uygulama yapıyorum. Geliştirme makinemde (3 GB RAM ile Win7-32) test yaparken , SQL Server'ın Express sürümü için sqlservr.exeyayınlanan donanım ölçeklendirme sınırlarından beklediğim gibi 1 GB'den fazla RAM kullanma işlemini hiç gözlemlemedim .

Daha sonra uygulamamı sunucudaki bir makineye (Win Server 2008R2 16GB RAM ile 64-bit) taşıdım ve buradaki performansını değerlendirdim ve sqlservr.exesürecin hızla yaklaşık 9.5GB RAM'e ulaştığını ve orada kaldığını görünce şaşırdım.

Bunun bir etkisi olup olmadığını görmek için birkaç kez yeniden başlattım, ancak her seferinde süreç hızla ~ 9.5GB'a geri döndü. Şimdi SQL Server Express’in RAM’imi kullanmasından kesinlikle memnunum, ancak bunun beklenen bir davranış olup olmadığını bilmek istiyorum, böylece hatalı RAM kullanımına dayanan performans düzeylerine güvenmemeliyim.

FYI, sunucu makinemdeki SQL Server sürümü SELECT @@VERSION, şöyle:

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.5GB numaram Görev Yöneticisi'ndeki "Özel Çalışma Kümesi" numarasından geldi. İlk çıkış tablosu ( DBCC memorystatusşu anda boşta olan bir sunucuda da olsa) aşağıdadır:

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'nın önerdiği sorgudan çıktı sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

artı ~ 30 MB'den az olan toplam 10 daha küçük giriş.

Yanıtlar:


12

SQL Express, Arabellek Havuzu için 1 GB ile sınırlıdır, ancak SQL Server'da birçok başka bellek havuzu vardır. Şaşırtıcı bulduğum şey, arabellek olmayan bellek havuzlarının aşırı kullanımı. Her bellek memuru başına düşen bellek kullanımını bulmak için şunu çalıştırın:

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

Bu yardımcı olur umarım


Bu sorgudan elde edilen çıktı: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 Ve sonra <30 MB olan bir kaç küçük olan. Bana tuhaf geliyor. -arg- yorum biçimlendirmesinde.
Dan

Hmmm. MEMORYCLERK_SQLBUFFERPOOL tek başına 1GB sınırını aşıyor, bu nedenle bir hatayla karşı karşıya kalabiliriz. Garip bulduğum şey, sorguda gösterilmeden 9.5GB'ı nasıl kullandığı.
spaghettidba

Sanırım sys.dm_os_memory_clerks'te (single_pages_kb dışında) başka ilginç sütunlar olduğunu düşünüyorum: virtual_memory_committed_kb, MEMORYCLERK_SQLBUFFERPOOL durumunda daha uygun görünüyor.
Razvan Socol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.