Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Buffer cache:Apa itu dan bagaimana pengaruhnya terhadap kinerja database?

Di SQL Server, cache buffer adalah memori yang memungkinkan Anda untuk meminta data yang sering diakses dengan cepat. Ketika data ditulis atau dibaca dari database SQL Server, manajer buffer menyalinnya ke cache buffer (alias buffer pool). Jika sudah penuh, halaman data yang lebih lama atau lebih jarang digunakan akan dipindahkan ke hard disk.

Mengapa saya perlu memantau cache buffer?

Penggunaan memori dapat berdampak signifikan pada kinerja. Ketika tidak ada cukup memori, halaman data sering dibersihkan dari cache buffer. Ini memperlambat kueri karena SQL Server harus membuka disk untuk menemukan halaman data, memulihkannya ke cache buffer, dan kemudian membaca halaman sebelum dapat mengembalikan hasil kueri.

Ada banyak alasan mengapa kueri mulai berjalan lambat. Tetapi jika Anda ingin mengesampingkan masalah memori, lihat apa yang terjadi di dalam cache buffer. Mengintip di dalamnya akan mengidentifikasi database, tabel, atau indeks mana yang memonopoli memori dan memberi tekanan pada buffer.

Untuk melihat database mana yang paling banyak menghabiskan memori, gunakan kueri:

SELECTCASE database_idWHEN 32767 THEN 'ResourceDb'ELSE db_name(database_id)END AS database_name, COUNT(1)/128 AS megabytes_in_cacheFROM sys.dm_os_buffer_descriptorsGROUP BY DB_NAME(database_id) , 
 Untuk mengidentifikasi tabel atau indeks yang menghabiskan paling banyak memori, jalankan kueri ini di database yang ingin Anda periksa:

SELECT COUNT(1)/128 AS megabytes_in_cache,name ,index_idFROM sys.dm_os_buffer_descriptors SEBAGAI bdINNER JOIN(SELECT object_name(object_id) AS name,index_id ,allocation_unit_idFROM sys.allocation_units SEBAGAI auINNER JOIN. .hobt_idAND (au.type =1 ATAU au.type =3)UNION ALLSELECT object_name(object_id) SEBAGAI nama,index_id, alokasi_unit_idFROM sys.allocation_units SEBAGAI auINNER GABUNG sys.partitions SEBAGAI pON au.container_id =p.partition_id =2DAN au. ) SEBAGAI objON bd.allocation_unit_id =obj.allocation_unit_idWHERE database_id =DB_ID()GROUP BY name, index_idORDER BY megabytes_in_cache DESC;

Kelola memori dengan metrik

Meskipun sangat membantu untuk memeriksa database dan indeks untuk penggunaan memori yang berlebihan, pelacakan metrik cache buffer benar-benar cara terbaik untuk mengidentifikasi dan menyelesaikan masalah kinerja yang disebabkan oleh tekanan internal pada memori.

Berikut adalah lima metrik teratas yang harus dipantau untuk meningkatkan masalah kinerja terkait memori:

1. Rasio Hit Cache Buffer

  • Metrik ini menunjukkan bagaimana SQL Server menggunakan cache buffer
  • Rasio klik mengidentifikasi persentase permintaan halaman yang diselesaikan oleh halaman data dari cache buffer versus semua permintaan halaman data
  • Halaman yang tidak ditemukan dalam cache buffer dibaca dari disk, yang jauh lebih lambat
  • Rasio cache buffer yang ideal adalah 100 (yaitu, SQL Server membaca semua halaman dari cache buffer dan tidak satu pun dari disk)
  • Nilai cache buffer yang disarankan lebih besar dari 90

2. Harapan Hidup Halaman (PLE)

  • Page Life Expectancy mengukur berapa lama (dalam detik) halaman data tetap berada di cache buffer
  • Semakin panjang PLE, semakin besar kemungkinan SQL Server akan membaca halaman dari buffer cache dan tidak harus pergi ke disk
  • Jika memori tidak cukup, halaman data akan lebih sering dihapus dari cache buffer untuk mengosongkan ruang untuk halaman baru
  • Secara historis, ketika sistem memiliki memori yang jauh lebih sedikit daripada sekarang, nilai PLE "normal" adalah 300 detik
  • Hari ini, sebuah formula digunakan untuk menentukan PLE “baik”:Harapan Hidup Halaman =300 detik untuk setiap 4 GB RAM di server Anda
  • PLE harus tetap stabil jika dipantau dari waktu ke waktu
  • Penurunan yang cepat dan sering menunjukkan masalah memori
  • Penurunan lebih dari 50% harus segera diselidiki

3. Pembacaan Halaman/Detik (Tingkat Server)

  • Metrik ini menunjukkan berapa banyak pembacaan fisik (yaitu, pembacaan dari disk) yang terjadi dalam satu detik di semua database pada sebuah instance
  • Membaca fisik itu mahal dan lambat
  • Kurangi pembacaan fisik dengan menggunakan cache data yang lebih besar, indeks cerdas, dan kueri yang lebih efisien, atau dengan mengubah desain database
  • Nilai yang disarankan kurang dari 90
  • Nilai yang lebih tinggi dari 90 menunjukkan memori yang tidak mencukupi dan masalah pengindeksan

4. Penulisan Halaman/Detik

  • Metrik ini menunjukkan berapa kali halaman yang ditulis ke disk pada tingkat server dalam satu detik
  • Nilai yang disarankan kurang dari 90

5. Input Halaman/Detik dan Output Halaman/Detik (Penghitung Memori)

  • Input halaman/detik adalah jumlah halaman yang dibawa dari disk setiap detik
  • Output halaman/detik adalah jumlah halaman yang ditulis ke disk setiap detik untuk memberi ruang di cache buffer
  • Halaman/detik adalah jumlah halaman masukan/detik dan halaman keluaran/detik
  • Jika nilai halaman/dtk secara konsisten lebih dari 50, penyelidikan tambahan diperlukan

Cache buffer yang sehat adalah komponen penting dalam mengoptimalkan kecepatan kueri SQL Server. Meskipun masalah memori hanyalah salah satu dari beberapa faktor yang dapat memperlambat respons kueri, masalah tersebut cukup mudah diidentifikasi dan diselesaikan. Melacak lima metrik utama ini dapat membantu Anda menyimpan halaman data di kumpulan buffer lebih lama sehingga SQL Server tidak perlu membuang waktu untuk mencari disk sebelum mengembalikan hasil kueri.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa Jenis Parameter Fungsi Partisi di SQL Server (T-SQL)

  2. 10 Fakta Tentang Pemantauan Kinerja Basis Data yang Mungkin Mengejutkan Anda

  3. Cara Mengganti Nama Database SQL Server menggunakan T-SQL

  4. Apa yang setara dengan Oracle dari fungsi IsNull() SQL Server?

  5. Menghubungkan ke MS SQL Server dengan Otentikasi Windows menggunakan Python?