Dizinler bellek tüketiyor mu?


10

SQL Server'da bellek kullanımı hakkında bilgi edinmeye başladım. SQL Server 2008 R2 "Hayalet Bellek" sorusunun yanıtında sorguyu kullanırken ? , Tek bir veritabanının arabellek havuzundaki aslan payını aldığını keşfettim. Daha ileri baktığımızda, sys.allocation_unitsve kullanarak sys.indexes, bunun büyük olasılıkla veritabanındaki dizinlerin yoğun kullanımından kaynaklandığını doğruladım. Dizinlerin çoğu kümelenir.

Başka bir veritabanı geliştiricisi, sunucuda bellek sorunları yaşadığımıza inanıyor - kullanılabilir bellek olmadığı için sorguların uzun süre çalışmaya başladığı.

Buradaki sorum şu - bu dizinlerin kullanımı ve arabellek havuzundaki varlığı, diğer işlemler için kullanılabilir belleği kaldırıyor mu?


2
"Another database developer believes we are having memory issues on the server"-- neye bağlı olarak? Sunucuda ne kadar RAM var, örnek bellek ayarları nedir ve yordam önbelleği tarafından ne kadar bellek tüketiliyor?
Jon Seigel

Uzun sorgu sürelerine ve araştırmamın belirttiği Görev Yöneticisi'ne baktığımızda "kirli, pis bir yalancı" (teşekkürler Brent Ozar - brentozar.com/archive/2011/09/… ). Hafıza sorunu olmadığını görebilirim - Bu yorumlarda ve cevaplarda verilen tüm önerileri takip ediyorum!
JHFB

2
Burada 8 topu yuvarladığımızdan, sorguların yavaş çalıştığını düşünüyorum çünkü bu 'başka' bir veritabanı geliştiricisi tarafından
yazıldılar

Yanıtlar:


12

Evet, arabellek havuzunda önbelleğe alınan kullanılmış bir dizinin veri sayfaları veri önbelleğinde yer kaplar . Ancak bunun sizi dizinleri kullanmaktan uzak tutmasına izin vermeyin (ilk önce, kümelenmiş bir dizin gerçek tablo verileridir, bu yüzden bunu da aklınızda bulundurun). Endekslerin kullanımı (elbette uygun şekilde tasarlanmış ve uygulanmış) iyi bir şeydir.

Bellek sorunlarınız büyük olasılıkla tablolarınızda dizin oluşturmayabilir . Hafıza konularına dalın, problemler tam olarak nedir? Sayfa Yaşam Beklentiniz düşük mü? Belleğiniz sunucuda nasıl yapılandırılır? Maksimum sunucu belleği, arabellek havuzunun boyutunu kısıtlıyor mu?

Veri önbelleğinizdeki dizin sayfalarının dökümünü almak için aşağıdaki sorguyu çalıştırabilirsiniz:

select
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by page_type

Bu istatistikleri veritabanına göre almak için:

select
    db_name(database_id) as database_name,
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by database_id
order by total_consumption_kb desc

Terbiyeli (?) Sayfa yaşam beklentisi - 4234. Arabellek önbellek isabet oranını araştırmam ve diğer kısımlara bakmam gerekiyor.
JHFB

Bu PLE bellek baskısını hiç göstermiyor. Genel bir kural olarak 1000'in üzerindeki herhangi bir şey (elbette, her zaman "bağlıdır") kabul edilebilir.
Thomas Stringer

Arabellek önbellek isabet oranı çok yanıltıcı olabilir ya da dışarı ve işe yaramaz olabilir. Bkz. Büyük SQL Server Tartışmaları: @JonathanKehayias tarafından Tampon Önbellek İsabet Oranı .
Mark Storey-Smith

@ MarkStorey-Smith Not, işaretçi için teşekkürler!
Thomas Stringer

@JHFB Bir adım geri gidelim. Hafıza baskınız olduğunu düşündüren nedir?
Thomas Stringer

7

Dizinler tampon havuz alanı tüketir, evet. Dizin oluşturma stratejinize dikkat etmeniz ve yinelenenleri en aza indirmeniz için bir neden daha budur.

Bunun büyük olasılıkla veritabanındaki dizinlerin yoğun kullanımından kaynaklandığını doğruladım. Dizinlerin çoğu kümelenir.

Kümelenmiş bir dizinin tablo olduğunu unutmayın . Kümelenmiş bir dizin için (genellikle istenmeyen) kümelenmiş bir dizin için var olan tek yük, yaprak olmayan dizin sayfaları ve küme anahtarının o tablo için kümelenmemiş tüm dizinlere eklenmesi içindir. Bu nedenle dar küme anahtarları tercih edilir.

Kimberley Tripp'in kümelenmiş anahtar seçimlerle ilgili makaleleri bunun için mükemmel bir referanstır.


+1 Bayan Tripp'in makalelerinin kümeleme anahtarlarında EPIC olduğunu ...
Fabricio Araujo
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.