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_units
dan 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?
"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?Jawaban:
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:
Untuk mendapatkan statistik ini dengan basis data:
sumber
Indeks mengkonsumsi ruang buffer pool, ya. Ini adalah satu lagi alasan mengapa Anda harus berhati-hati dengan strategi pengindeksan Anda dan meminimalkan duplikat.
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.
sumber