ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_typePAGEIOLATCH_SH
ประเภทการรอนี้หมายถึงอะไรและจะแก้ไขได้อย่างไร
ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_typePAGEIOLATCH_SH
ประเภทการรอนี้หมายถึงอะไรและจะแก้ไขได้อย่างไร
คำตอบ:
จากเอกสารของ Microsoft :
PAGEIOLATCH_SHเกิดขึ้นเมื่องานกำลังรออยู่บนสลักสำหรับบัฟเฟอร์ที่อยู่ใน
I/Oคำร้องขอ คำขอสลักอยู่ในโหมดแชร์ การรอนานอาจบ่งบอกถึงปัญหาเกี่ยวกับระบบย่อยของดิสก์
ในทางปฏิบัติสิ่งนี้มักเกิดขึ้นเนื่องจากการสแกนจำนวนมากบนโต๊ะขนาดใหญ่ แทบไม่เคยเกิดขึ้นในแบบสอบถามที่ใช้ดัชนีอย่างมีประสิทธิภาพ
หากคำถามของคุณเป็นเช่นนี้:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
(col1, col_primary_key)ให้ตรวจสอบว่าคุณมีดัชนีคอมโพสิตใน
หากคุณไม่ได้หนึ่งแล้วคุณจะต้องอย่างใดอย่างหนึ่งที่เต็มไปด้วยINDEX SCANถ้าPRIMARY KEYมีการเลือกหรือSORTถ้าดัชนีในcol1ได้รับการแต่งตั้ง
ทั้งสองอย่างI/Oใช้งานดิสก์มากบนโต๊ะขนาดใหญ่
SQL for SmartiesและThinking in Sets) และบล็อกของฉันแน่นอน :)
PAGEIOLATCH_SH ประเภทการรอมักเกิดขึ้นจากดัชนีที่แยกส่วนหรือไม่ได้เพิ่มประสิทธิภาพ
บ่อยครั้งที่สาเหตุของPAGEIOLATCH_SHประเภทการรอมากเกินไปได้แก่ :
ในการพยายามแก้ไขปัญหาการPAGEIOLATCH_SHรอนานคุณสามารถตรวจสอบ:
PAGEIOLATCH_SHประเภทการรอที่มากเกินไปโปรดจำไว้เสมอว่าในกรณีที่มีการ Mirroring ความปลอดภัยสูงหรือความพร้อมใช้งานแบบซิงโครนัสใน AlwaysOn AG PAGEIOLATCH_SHสามารถคาดหวังเพิ่มขึ้น / มากเกินไป
คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ในบทความการจัดการประเภทการรอของ SQL Server PAGEIOLATCH_SH ที่มากเกินไป