Apakah indeks mengkonsumsi memori?

10

Saya baru mulai belajar tentang penggunaan memori pada SQL Server. Saat menggunakan kueri dalam jawaban untuk pertanyaan SQL Server 2008 R2 "Memori Hantu"? , Saya menemukan bahwa satu basis data mengambil bagian terbesar dari ruang di kolam penyangga. Melihat lebih jauh, menggunakan sys.allocation_unitsdan sys.indexes, saya mengkonfirmasi ini kemungkinan disebabkan oleh penggunaan indeks dalam database. Sebagian besar indeks dikelompokkan.

Pengembang basis data lain percaya kami mengalami masalah memori di server - bahwa permintaan mulai berjalan lama karena tidak ada memori yang tersedia.

Pertanyaan saya di sini adalah - apakah penggunaan indeks ini, dan keberadaannya di buffer pool, menghilangkan memori yang tersedia untuk proses lain?

JHFB
sumber
2
"Another database developer believes we are having memory issues on the server"- berdasarkan apa? Berapa banyak RAM yang dimiliki server, apa pengaturan memori instance, dan berapa banyak memori yang dikonsumsi oleh cache prosedur?
Jon Seigel
Berdasarkan waktu permintaan yang diperpanjang dan melihat Task Manager - yang penelitian saya telah mengindikasikan adalah "pembohong kotor, kotor" (terima kasih Brent Ozar - brentozar.com/archive/2011/09/… ). Saya mungkin menemukan tidak ada masalah memori - Saya mengikuti semua saran yang disediakan dalam komentar dan jawaban ini!
JHFB
2
Karena kita menggulirkan 8 bola di sini, saya pikir pertanyaan berjalan lambat karena ditulis oleh pengembang database 'lain' itu ...
Remus Rusanu

Jawaban:

12

Ya, halaman data indeks yang digunakan yang di-cache di buffer pool akan mengambil ruang di cache data . Tapi jangan biarkan itu membuat Anda menjauh dari menggunakan indeks (pertama, indeks berkerumun adalah data tabel aktual jadi ingatlah juga). Penggunaan indeks (dirancang dan diimplementasikan dengan baik, tentu saja) adalah hal yang baik.

Masalah memori Anda kemungkinan besar bukan karena memiliki indeks di tabel Anda . Selami masalah ingatan, apa sebenarnya masalahnya? Apakah Anda memiliki Page Life Expectancy yang rendah ? Bagaimana memori Anda dikonfigurasi di server? Apakah memori server maks rendah membatasi ukuran buffer pool?

Untuk mendapatkan rincian halaman indeks dalam cache data Anda, Anda dapat menjalankan kueri di bawah ini:

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

Untuk mendapatkan statistik ini dengan basis data:

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
Thomas Stringer
sumber
Harapan hidup laman yang layak (?) - 4234. Saya perlu meneliti rasio hit cache cache dan mencari bagian lain.
JHFB
PLE itu sama sekali tidak menunjukkan tekanan memori. Lebih dari 1000 sebagai patokan (tentu saja, selalu ada "itu tergantung") dapat diterima.
Thomas Stringer
Rasio hit cache penyangga bisa sangat menyesatkan, atau keluar dan keluar tidak berguna. Lihat Debat SQL Server Hebat: Rasio Hit Cache Penyangga oleh @JonathanKehayias.
Mark Storey-Smith
@ MarkStorey-Smith Tercatat, terima kasih atas penunjuknya!
Thomas Stringer
@ JHFB Mari kita mundur. Apa yang membuat Anda berpikir Anda mengalami tekanan memori?
Thomas Stringer
7

Indeks mengkonsumsi ruang buffer pool, ya. Ini adalah satu lagi alasan mengapa Anda harus berhati-hati dengan strategi pengindeksan Anda dan meminimalkan duplikat.

Saya mengkonfirmasi ini kemungkinan disebabkan oleh penggunaan indeks yang banyak dalam database. Sebagian besar indeks dikelompokkan.

Ingat bahwa indeks berkerumun adalah tabel . Satu-satunya overhead yang ada untuk indeks berkerumun di atas dan di atas itu untuk heap (yang umumnya tidak diinginkan) adalah untuk halaman indeks non-daun dan dimasukkannya kunci cluster dalam semua indeks non-clustered untuk tabel itu. Inilah sebabnya mengapa kunci cluster sempit lebih disukai.

Artikel Kimberley Tripp tentang pilihan - pilihan kunci yang dikelompokkan adalah referensi yang sangat baik untuk ini.

Mark Storey-Smith
sumber
+1 Bahwa artikel Ms Tripp adalah EPIC tentang kunci pengelompokan ...
Fabricio Araujo