Apa itu tipe tunggu PAGEIOLATCH_SH di SQL Server?

97

Saya memiliki pertanyaan yang membutuhkan waktu lama di tengah-tengah transaksi. Ketika saya mendapatkan wait_typeproses itu PAGEIOLATCH_SH.

Apa arti dari jenis menunggu ini dan bagaimana cara mengatasinya?

Ryan
sumber

Jawaban:

117

Dari dokumentasi Microsoft :

PAGEIOLATCH_SH

Terjadi saat tugas menunggu di kait untuk buffer yang ada dalam I/Opermintaan. Permintaan latch dalam mode Bersama. Penantian yang lama mungkin menunjukkan masalah dengan subsistem disk.

Dalam praktiknya, ini hampir selalu terjadi karena pemindaian besar di atas tabel besar. Ini hampir tidak pernah terjadi dalam kueri yang menggunakan indeks secara efisien.

Jika kueri Anda seperti ini:

Select * from <table> where <col1> = <value> order by <PrimaryKey>

, periksa apakah Anda mengaktifkan indeks komposit (col1, col_primary_key).

Jika Anda tidak memilikinya, maka Anda memerlukan penuh INDEX SCANjika PRIMARY KEYdipilih, atau SORTjika indeks aktif col1dipilih.

Keduanya adalah I/Ooperasi yang sangat memakan disk pada tabel besar.

Quassnoi
sumber
Ini pertanyaan yang sangat sederhana. Pilih * dari <table> di mana <col1> = <value> urutkan berdasarkan <PrimaryKey>. Kami juga memiliki indeks hanya pada col1 dan telah mencoba membangun kembali indeks.
Ryan
Dapatkah Anda menyarankan beberapa sumber daya untuk mempelajari pemahaman yang Anda miliki tentang apa itu intensif disk, apa yang membutuhkan pemindaian indeks penuh, apa yang memerlukan semacam dll
Greg B
1
@GregB: jika Anda sudah memiliki pengetahuan dasar tentang SQL, Anda dapat membaca buku Joe Celko (semuanya tetapi terutama SQL for Smartiesdan Thinking in Sets) dan blog saya tentu saja :)
Quassnoi
3
Ini memang menunjukkan kesalahan dalam subsistem disk kami. Disk RAID gagal tanpa memicu sistem pemantauan. Memeriksa log peristiwa menemukan bahwa SMART memang menandai drive sebagai buruk.
Gomibushi
7

PAGEIOLATCH_SH jenis menunggu biasanya muncul sebagai hasil dari indeks terfragmentasi atau tidak dioptimalkan.

Seringkali alasan untuk PAGEIOLATCH_SHtipe menunggu yang berlebihan adalah:

  • Subsistem I / O bermasalah atau salah konfigurasi
  • Subsistem I / O kelebihan beban oleh proses lain yang menghasilkan aktivitas I / O tinggi
  • Manajemen indeks buruk
  • Kesalahpahaman drive logis atau fisik
  • Masalah jaringan / latensi
  • Tekanan memori
  • Synchronous Mirroring dan AlwaysOn AG

Untuk mencoba dan mengatasi PAGEIOLATCH_SHjenis menunggu tinggi , Anda dapat memeriksa:

  • SQL Server, kueri dan indeks, sering kali hal ini dapat ditemukan sebagai akar penyebab dari PAGEIOLATCH_SHjenis menunggu yang berlebihan
  • Untuk tekanan memori sebelum beralih ke pemecahan masalah subsistem I / O

Selalu ingat bahwa dalam kasus ketersediaan Mirroring atau sinkron-komit keamanan tinggi di AlwaysOn AG, peningkatan / kelebihan PAGEIOLATCH_SHdapat diharapkan.

Anda dapat menemukan detail selengkapnya tentang topik ini di artikel Menangani jenis menunggu SQL Server PAGEIOLATCH_SH yang berlebihan

G. Hunter
sumber