SQL Server 2005'te hangi veritabanının ne kadar RAM kullandığını öğrenin


12

Bir arkadaşım bugün sordu (ajite bir müşteri sakinleştirmeye çalışarak) SQL Server 2005'te hangi veritabanının herhangi bir zamanda (sunucunun RAM'inde) ne kadar bellek kullandığını nasıl bulabileceğinizi sordu.

Bu mümkün mü? Öyleyse nasıl? Bunu yerleşik SQL Server araçlarıyla yapabilir misiniz, yoksa ekstra üçüncü taraf seçeneklerine mi ihtiyacınız var?

Özel SQL Server makinesi aniden 4 GB RAM'in 200KB'sini birden kullandığı için müşterisi tamamen kızardı. Bunun gerçekten bir sorun olduğunu düşünmüyorum - ama bu adam gece boyunca az ya da çok olduğunu iddia ettiğinden, bellek kullanımındaki bu artışa neyin neden olduğunu bilmek istiyor .....

üzüm posası

Yanıtlar:


25

Büyük olasılıkla arabellek havuzuna daha fazla sayfa okumak isteyen bir sorgudan ve arabellek havuzunun bunu karşılamak için daha fazla bellek kapmasından kaynaklandı. SQL Server'ın bu şekilde çalışması gerekiyor. Kutu bellek baskısı yaşıyorsa, SQL Server'dan bellekte vazgeçmesini ister. Müşteri endişelenmemelidir.

sys.dm_os_buffer_descriptorsHangi veritabanı tarafından arabellek havuzu belleğinin ne kadarının kullanıldığını görmek için DMV'yi kullanabilirsiniz . Bu snippet, her veritabanından kaç tane temiz ve kirli (son kontrol noktasından beri değiştirildi veya diskten okunur) sayfaların arabellek havuzunda olduğunu söyleyecektir. Daha fazla değişiklik yapabilirsiniz.

SELECT
   (CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State',
   (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
   COUNT (*) AS 'Page Count'
FROM sys.dm_os_buffer_descriptors
   GROUP BY [database_id], [is_modified]
   ORDER BY [database_id], [is_modified];
GO

Bunu bu blog yazısında biraz daha açıklıyorum Depolama Motorunun İçi: Arabellek havuzunda neler var?

Ayrıca SQL Server'ın diğer bellek kullanımı (veritabanı başına değil) dökümü hakkında bir fikir verecektir KB 907877 ( SQL Server 2005'te bellek kullanımını izlemek için DBCC MEMORYSTATUS komutu nasıl kullanılır) ödeme yapabilirsiniz .

Bu yardımcı olur umarım!


Sen bir dahisin, Paul!
marc_s

2

Arkadaşınız ayrıca, SQL'in alacağı RAM miktarını da sınırlayabilir, çünkü Paul yukarıda belirtildiği gibi SQL, alabileceği her belleği alacaktır.

SQL Server tarafından alınan bellek miktarını 2000 Mb (veya en iyi olduğunu düşündüğünüz ne olursa olsun) ile sınırlayın.

--Enable advanced options:
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE

--Set the maximum amount of memory to 2000 MB:
USE master
EXEC sp_configure 'max server memory (MB)', 2000
RECONFIGURE WITH OVERRIDE

--Display the newly set configuration:
USE master
EXEC sp_configure 'max server memory (MB)'

--Set 'show advanced options' back to default:
USE master
EXEC sp_configure 'show advanced options', 0 
RECONFIGURE WITH OVERRIDE

Teşekkürler - Belleği nasıl sınırlayacağımı biliyordum, ancak hangi db'nin herhangi bir zamanda ne kadar tampon havuz belleği kullandığını nasıl bulacağımı bilmiyordum.
marc_s
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.