SQL Server 2008 R2 “Hayalet Bellek”?


12

Bazı garip bellek sorunları yaşayan özel bir SQL Server 2008 R2 makinemiz var. Makinenin iki dört çekirdekli işlemcisi, 16 gb RAM ve 64bit Windows Server 2008 R2 Enterprise (bir Dell PowerEdge 2950) dahil olmak üzere birçok kaynağı var. .

Garip sorun, sistemin kullanımdaki belleğin% 82'sini bildirmesi, ancak sqlservr.exe'nin yalnızca 155mb kullanımda olduğunu bildirmesidir. SQL Server şüpheli nedeni sorun çünkü sqlservr.exe işlemini yeniden başlatın, bellek tüketimi bir süre için normale döner çünkü.

Bu sorunu nasıl izlemeye başlayabileceğim konusunda bir fikri olan var mı?

Teşekkürler, Jason


3
Bellekteki Sayfaları Kilitle kullanıcı hakkını kullanıyor musunuz? Bu durumda, kilitli bellek görev yöneticisi tarafından rapor edilmez. Daha fazla bilgi için blogs.technet.com/b/askperf/archive/2008/03/25/… adresine bakın .
Mark S. Rasmussen

Bellekteki Sayfaları Kilitle kullanıcı hakkı "Yok" olarak ayarlanmıştır. Ayrıca varsayılan int.maxValue üzerinde "Maksimum sunucu belleği (MB)" ayarımız var - bunun bir soruna neden olabileceğini düşünüyor musunuz?
11:54

4
Ben endişe ediyorum tek zaman sql sunucum% 82 daha az kullanıyor olmasıdır!
SqlACID

Yanıtlar:


15

Hizmetin çalışmakta olduğu hesapta kilit sayfaları bellek ayrıcalığına sahipse, Görev Yöneticisi'nden bellek kullanımının gerçek bir resmini elde edemezsiniz (değiştir: Mark Rasmussen'ın yorumuna / bağlantısına göre). Ne kadar bellek kullanıldığını belirlemek için şunlara bakabilirsiniz:

  • SQLServer: Bellek Yöneticisi \ Toplam Sunucu Belleği perfmon sayacı
  • DMVs

Toplam bellek tahsisi verecek bir DMV veya bunların kombinasyonu olup olmadığını hatırlayamıyorum, ancak aşağıdakiler toplu olarak gösterilecek.

SELECT TOP(10) [type] AS [Memory Clerk Type], SUM(single_pages_kb) AS [SPA Mem, Kb] 
FROM sys.dm_os_memory_clerks 
GROUP BY [type]  
ORDER BY SUM(single_pages_kb) DESC OPTION (RECOMPILE);

SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

İkincisi, genellikle en ilginç olanı, veritabanı ile arabellek havuzu ayırmalarıdır. Burası, aslanların payının kullanılacağı yerdir ve veritabanlarınızdan hangisinin en büyük tüketici olduğunu anlamak faydalı olabilir.


Vay canına çok teşekkür ederim! Bu (özellikle ikincisi) benim için tamamen netleştirdi!
typefragger

8

Görev Yöneticisi SQLServer ve ek hizmetleri tarafından yenen belleği doğru bir şekilde göstermediğinde, kendi Brent Ozar'ımızdan bu davayı ele alan yeni bir makale var. Burada bulabilirsiniz: Sysadmin'in Microsoft SQL Server Belleği Kılavuzu .

Alıntı: " Neden SQLServer.exe fazla bellek kullanmıyor?

Masaüstünü bir sunucuya uzak tuttuğunuzda ve Görev Yöneticisi'ne baktığınızda, sqlservr.exe'nin Mem Kullanımı her zaman tuhaf görünüyor. Bu SQL Server'ın hatası değil. Görev Yöneticisi kirli, pis bir yalancı. (Biliyorum, SQL adamı suçu değiştiriyor gibi görünüyor, ancak bir saniye benimle taşıyor.) 64 bitlik kutularda bu sayı biraz daha doğru, ancak 32 bitlik kutularda tamamen tabandan . SQL Server'ın ne kadar bellek kullandığının doğru bir resmini elde etmek için Process Explorer gibi bir araca ve SQL Server'ın tüm işlemlerini tanımlamanız gerekir. Sağda gösterdiğim sunucuda iki sql Server örneği (sqlservr.exe ile gösterilir) artı SQL Agent, SQL Browser ve SQL Server yedekleme araçları vardır. SQL Server Analysis Services, Integration Services ve Reporting Services'ın aynı sunucuda da çalıştığını görmek alışılmadık bir durum değil - hepsi bellek tüketiyor.

Peki SQL ne kadar bellek kullanıyor? Bunu senin için kolaylaştıracağım. SQL Server tüm belleği kullanıyor. Dönem."

Bu yüzden Mark'ın sorgusunu denemenizi ve bellek raporu için daha iyi bir araç kullanmanızı tavsiye ederim. Ya da Görev Yöneticisi'ni değil, belleği bildirmesi için Perfmon'a güvenin.


-2

Görev yöneticisinde gösterildiği gibi SQL tarafından kullanılan bellek miktarı çoğunlukla maksimum bellek ayarı olacaktır. Min / maks ayarı şu şekilde çalışır:

SQL sunucusu başlatıldığında, belleği minimum bellek ayarına kadar almaya başlar. SQL'iniz arttıkça, SQL maksimum bellek ayarına kadar daha fazla bellek kullanmaya başlayacaktır. Daha sonra bellek, SQL kullanımı azalsa bile bu (maks.) Noktada kalır. Bu, SQL'in büyük görevleri gerçekleştirdiği ve bu kadar belleği kullandığı izlenimini verir. Gerçekte, bu bellek SQL tarafından ayrılmıştır.

Sunucuda SQL dışı bellek basıncı olduğunda, SQL belleği minimum bellek ayar noktasına indirir. Bellek ayarları bu şekilde kullanılır. SQL'in bu belleği nasıl kullandığını görmek için Mark'ın komut dosyalarını kullanabilirsiniz.


1
Min / maks arabellek havuzu ayırmalarını yönetir, başka bir şey değildir. Bu, BOL'deki Sunucu Belleği Seçenekleri açıklamasındaki ilk satırdır . Ayarların görev yöneticisinde görüntülenen ayarla kesinlikle bir ilişkisi yoktur. Brent'in taskmgr'u "kirli, pis bir yalancı" olarak açıklaması durumu ve okuduğum her şeyi özetliyor.
Mark Storey-Smith

@ MarkStorey-Smith kendi yorumunda bağlantıdaki içeriği daha aşağıya okuyunuz. Görev yöneticisi sistem kaynaklarının kullanımını gösterir. Arabellek havuzu bir sistem kaynağı değildir. Görev yöneticisinde gösterilen SQL tarafından bellek kullanımının ne anlama geldiğini açıklıyorum. Arabellek havuzundan bahsederek bariz olanı belirtiyorsunuz, ama bu hala beni yanlış kanıtlamıyor.
StanleyJohns

Bunu ne kadar iyi koyacağımızdan emin değilim ... "Görev yöneticisinde gösterildiği gibi SQL tarafından kullanılan bellek miktarı çoğunlukla maksimum bellek ayarı olacaktır. Min / maks ayarı bu şekilde çalışır" .. hayır değil 't.
Mark Storey-Smith

"Min / maks ayarları şu şekilde çalışır:" Sonunda, bir önceki cümleyi öne sürdüğü değil, açıklamanın izlediği anlamına gelen iki nokta üst üste var. :)
StanleyJohns

1
Mark ile birlikteyim. Slava Oks blogunu okuyun : bellek yöneticisini yazan MS ekibinin bir parçasıydı. "Buffer pool" başlığına gidin. Ben "SQL Server sp_conifigure kullanarak kontrol edebilirsiniz iki bellek ayarları vardır unutmayın. Bunlar maksimum ve min sunucu belleği. Bilmiyorum emin değilim ama bu iki ayar gerçekten arabellek havuzunun boyutunu kontrol eder. Server tarafından tüketilen fiziksel bellek miktarı "
gbn
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.