ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_type
PAGEIOLATCH_SH
ประเภทการรอนี้หมายถึงอะไรและจะแก้ไขได้อย่างไร
ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_type
PAGEIOLATCH_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 ที่มากเกินไป