SQL Server'da PAGEIOLATCH_SH bekleme türü nedir?


98

Bir işlemin ortasında uzun süren bir sorgum var. wait_typeSürecin ne olduğunu anladığımda öyle PAGEIOLATCH_SH.

Bu bekleme türü ne anlama geliyor ve bu nasıl çözülebilir?

Yanıtlar:


118

Gönderen Microsoft belgelerinde :

PAGEIOLATCH_SH

Bir görev, I/Oistekte bulunan bir arabellek için bir mandalı beklediğinde oluşur . Mandal isteği Paylaşılan modda. Uzun beklemeler, disk alt sistemiyle ilgili sorunları gösterebilir.

Pratikte, bu neredeyse her zaman büyük masalar üzerindeki büyük taramalar nedeniyle olur. Dizinleri verimli bir şekilde kullanan sorgularda neredeyse hiç olmaz.

Sorgunuz şöyle ise:

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

, bileşik dizininiz olup olmadığını kontrol edin (col1, col_primary_key).

Eğer bir tane yoksa, o zaman ya bir tam gerekir INDEX SCANeğer PRIMARY KEYseçilirse veya SORTbir dizin üzerinde eğer col1seçilir.

Her ikisi de I/Obüyük tablolarda çok disk tüketen işlemlerdir.


Bu gerçekten basit bir sorgu. <Tablo> 'dan * öğesini seçin; burada <col1> = <değer> <PrimaryKey> ile sıralanır. Ayrıca yalnızca col1 üzerinde bir dizinimiz var ve dizini yeniden oluşturmayı denedik.
Ryan

Neyin disk yoğun olduğunu, neyin tam bir dizin taraması gerektirdiğini, neyin bir sıralama gerektirdiğini vb. Anlamak için bazı kaynaklar önerebilir misiniz?
Greg B

1
@GregB: Eğer zaten temel bir SQL bilgisine sahipseniz, Joe Celko'nun kitaplarını (hepsi ama özellikle SQL for Smartiesve Thinking in Sets) ve tabii ki
blogumu okuyabilirsiniz

3
Bu, disk alt sistemimizde bir hata olduğunu gösterdi. Bir RAID diski, izleme sistemini tetiklemeden arızalandı. Olay günlüklerinin kontrol edilmesi, SMART'ın bir sürücüyü gerçekten kötü olarak işaretlediğini buldu.
Gomibushi

7

PAGEIOLATCH_SH bekleme türü genellikle parçalanmış veya optimize edilmemiş dizinin bir sonucu olarak ortaya çıkar.

Genellikle aşırı PAGEIOLATCH_SHbekleme türünün nedenleri şunlardır:

  • G / Ç altsisteminde bir sorun var veya yanlış yapılandırılmış
  • Yüksek G / Ç etkinliği üreten diğer işlemler tarafından aşırı yüklenmiş G / Ç alt sistemi
  • Kötü dizin yönetimi
  • Mantıksal veya fiziksel sürücü yanılgısı
  • Ağ sorunları / gecikme
  • Bellek baskısı
  • Senkronize Yansıtma ve AlwaysOn AG

Yüksek PAGEIOLATCH_SHbekleme türüne sahip olmayı denemek ve çözmek için şunları kontrol edebilirsiniz:

  • SQL Server, sorgular ve dizinler, çoğu zaman bu, aşırı PAGEIOLATCH_SHbekleme türlerinin temel nedeni olarak bulunabilir.
  • Herhangi bir G / Ç alt sistemi sorun gidermeye geçmeden önce bellek baskısı için

AlwaysOn AG'de yüksek güvenlikli Yansıtma veya eşzamanlı kesinleştirme kullanılabilirliği durumunda, artmış / aşırılık PAGEIOLATCH_SHbeklenebileceğini daima unutmayın.

Bu konuyla ilgili daha fazla ayrıntıyı Aşırı SQL Server PAGEIOLATCH_SH bekleme türlerini işleme makalesinde bulabilirsiniz.

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.