ฉันมีกระบวนการกับ Select ซึ่งใช้เวลานานในการดำเนินการตามลำดับ 5 ถึง 10 นาที
ขณะนี้ฉันไม่ได้ใช้ NOLOCK เป็นคำแนะนำสำหรับเอ็นจินฐานข้อมูล MS SQL
ในเวลาเดียวกันเรามีกระบวนการอื่นในการอัปเดตและแทรกลงในฐานข้อมูลเดียวกันและตารางเดียวกัน
กระบวนการแรกได้เริ่มต้นเมื่อเร็ว ๆ นี้เพื่อสิ้นสุดก่อนเวลาอันควรด้วยข้อความ
SQLEXCEPTION: ธุรกรรมหยุดชะงักในทรัพยากรที่ถูกล็อกด้วยกระบวนการอื่นและได้รับเลือกให้เป็นเหยื่อการชะงักงัน
กระบวนการแรกนี้กำลังทำงานในไซต์อื่น ๆ ในเงื่อนไขที่เหมือนกัน แต่มีฐานข้อมูลที่เล็กกว่าดังนั้นคำสั่ง select ที่เป็นปัญหาจึงใช้เวลาสั้นกว่ามาก (ตามลำดับ 30 วินาทีหรือมากกว่านั้น) ในไซต์อื่น ๆ เหล่านี้ฉันไม่ได้รับข้อความหยุดชะงักในไซต์อื่น ๆ เหล่านี้ ฉันยังไม่ได้รับข้อความนี้ในไซต์ที่มีปัญหาในตอนแรก แต่ฉันคิดว่าเนื่องจากฐานข้อมูลเติบโตขึ้นฉันเชื่อว่าฉันต้องข้ามเกณฑ์บางอย่าง นี่คือคำถามของฉัน:
- เวลาที่ใช้ในการดำเนินการธุรกรรมอาจทำให้กระบวนการที่เกี่ยวข้องมีแนวโน้มที่จะถูกตั้งค่าสถานะเป็นเหยื่อการชะงักงัน
- หากฉันดำเนินการเลือกด้วยคำใบ้ NOLOCK สิ่งนี้จะลบปัญหาหรือไม่
- ฉันสงสัยว่าฟิลด์วันที่และเวลาที่ถูกตรวจสอบเป็นส่วนหนึ่งของคำสั่ง WHERE ในคำสั่ง select ทำให้เวลาในการค้นหาช้า ฉันสามารถสร้างดัชนีตามฟิลด์นี้ได้หรือไม่ จะแนะนำหรือไม่?