ดึกฉันได้รับการโต้เถียงกันมากเกี่ยวกับการล็อกแถว ดูเหมือนว่าตารางในการช่วงชิงจะเป็นตารางเฉพาะ
นี่คือสิ่งที่เกิดขึ้นโดยทั่วไป -
- นักพัฒนา 1 เริ่มทำธุรกรรมจากหน้าจอส่วนหน้าของ Oracle Forms
- นักพัฒนา 2 เริ่มทำธุรกรรมอื่นจากเซสชันที่ต่างกันโดยใช้หน้าจอเดียวกัน
~ 5 นาทีในส่วนหน้าดูเหมือนว่าไม่ตอบสนอง การตรวจสอบเซสชันแสดงการช่วงชิงล็อกแถว "ทางออก" ที่ทุกคนขว้างไปรอบ ๆ คือฆ่าช่วง: /
เป็นผู้พัฒนาฐานข้อมูล
- สิ่งใดที่สามารถทำได้เพื่อกำจัดข้อขัดแย้งในการล็อกแถว
- เป็นไปได้ไหมที่จะพบว่าบรรทัดของโพรซีเดอร์ที่เก็บไว้ก่อให้เกิดข้อขัดแย้งในการล็อกแถวเหล่านี้หรือไม่
- อะไรคือแนวทางทั่วไปในการลด / หลีกเลี่ยง / กำจัดปัญหาดังกล่าวซึ่งเป็นรหัส?
หากคำถามนี้รู้สึกว่าข้อมูลปลายเปิด / ไม่เพียงพอโปรดแก้ไข / แจ้งให้เราทราบ - ฉันจะพยายามอย่างดีที่สุดเพื่อเพิ่มข้อมูลเพิ่มเติม
ตารางที่มีปัญหาอยู่ในส่วนแทรกและอัปเดตจำนวนมากฉันขอบอกว่าเป็นหนึ่งในตารางที่ยุ่งที่สุด SP ค่อนข้างซับซ้อน - เพื่อทำให้ง่ายขึ้น - มันดึงข้อมูลจากตารางต่าง ๆ ใส่เข้าไปในตารางงานการดำเนินการทางคณิตศาสตร์จำนวนมากเกิดขึ้นบนโต๊ะทำงานและผลลัพธ์ของตารางงานถูกแทรก / อัปเดตลงในตารางที่เป็นปัญหา
เวอร์ชันฐานข้อมูลคือ Oracle Database 10g Enterprise Edition รีลีส 10.2.0.1.0 - 64 บิต ลำดับของลอจิกถูกดำเนินการตามลำดับเดียวกันในทั้งสองเซสชันธุรกรรมไม่ได้เปิดไว้นานเกินไป (หรืออย่างน้อยฉันก็คิดอย่างนั้น) และการล็อคเกิดขึ้นในระหว่างการดำเนินการธุรกรรม
อัปเดต:จำนวนแถวของตารางมีขนาดใหญ่กว่าที่คาดไว้ที่ประมาณ 3.1 ล้านแถว นอกจากนี้หลังจากติดตามเซสชันฉันพบว่าคำสั่ง update สองสามรายการในตารางนี้ไม่ได้ใช้ดัชนี ทำไมถึงเป็นเช่นนั้น - ฉันไม่แน่ใจ คอลัมน์ที่อ้างอิงในส่วนคำสั่งถูกทำดัชนี ฉันกำลังสร้างดัชนีใหม่
COMMIT
หรือROLLBACK
ในเวลาที่เหมาะสมหรือข) จัดให้ผู้คนเดียวกันไม่ต้องการแถวเดียวกันในเวลาเดียวกัน