ทำไม Oracle ไม่มี nolock


14

ใน MS SQL Server nolockสามารถใช้งานได้ตามวัตถุประสงค์

ทำไมเราไม่สามารถใช้มันใน Oracle และ plsql ได้?

คำตอบ:


21

โดยปกติแล้ว SQL Server จะใช้กลยุทธ์การล็อกที่แตกต่างกับ Oracle กลยุทธ์เริ่มต้นที่ใช้โดย SQL Server หมายความว่าการเลือกแถวทำให้เกิดการล็อกการอ่าน (บนแถวหน้าหรือตารางทั้งหมด) ที่จะถูกวางไว้บน * ดังนั้นNOLOCKบางครั้งก็เป็นประโยคที่มีประโยชน์ - แม้ว่าคำแนะนำทั่วไปจะไม่ใช้มันเพราะมันเปลี่ยนความหมายของระดับการแยกและอาจทำให้ผลลัพธ์ที่ไม่สอดคล้องกันในผลลัพธ์ของแบบสอบถาม

* (หมายเหตุ: นั่นคือค่าเริ่มต้นหากSNAPSHOTมีการเลือกการแยกการทำงานจะแตกต่างกันและผู้อ่านไม่ได้บล็อกผู้เขียน)

ใน Oracle กระบวนการอ่านจะไม่บล็อกกระบวนการเขียน ต่อไปนี้เป็นข้อความที่ตัดตอนมาจาก ' Oracle Database Concepts 11g Release 2 ' ฉันขอแนะนำให้คุณดูว่าคุณสนใจวิธีการจัดการของ Oracle หรือไม่

การทำงานพร้อมกันของข้อมูลและความสอดคล้อง

สรุปพฤติกรรมการล็อค

ฐานข้อมูลรักษาล็อคหลายประเภทแตกต่างกันขึ้นอยู่กับการดำเนินการที่ได้รับล็อค โดยทั่วไปฐานข้อมูลจะใช้การล็อกสองประเภท: การล็อกแบบเอกสิทธิ์เฉพาะบุคคลและการล็อกแบบแบ่งใช้ สามารถรับล็อคแบบเอกสิทธิ์เฉพาะบุคคลเดียวเท่านั้นบนทรัพยากรเช่นแถวหรือตาราง แต่สามารถใช้ล็อกแบบแบ่งใช้จำนวนมากได้บนทรัพยากรเดียว

ล็อคส่งผลกระทบต่อการทำงานร่วมกันของผู้อ่านและนักเขียน ผู้อ่านเป็นแบบสอบถามของทรัพยากรในขณะที่นักเขียนเป็นคำสั่งการปรับเปลี่ยนทรัพยากร กฎต่อไปนี้สรุปพฤติกรรมการล็อคของ Oracle Database สำหรับผู้อ่านและผู้เขียน:

•แถวถูกล็อคเมื่อแก้ไขโดยนักเขียนเท่านั้น

เมื่อคำสั่งอัพเดตหนึ่งแถวธุรกรรมจะได้รับการล็อคสำหรับแถวนี้เท่านั้น โดยการล็อคข้อมูลตารางที่ระดับแถวฐานข้อมูลจะลดความขัดแย้งสำหรับข้อมูลเดียวกัน ภายใต้สถานการณ์ปกติ 1 ฐานข้อมูลไม่ได้เลื่อนระดับการล็อกแถวไปยังระดับบล็อกหรือตาราง

•นักเขียนของแถวบล็อกตัวเขียนพร้อมกันของแถวเดียวกัน

หากธุรกรรมหนึ่งกำลังแก้ไขแถวการล็อกแถวจะป้องกันไม่ให้ธุรกรรมอื่นแก้ไขแถวเดียวกันพร้อมกัน

•ผู้อ่านไม่เคยบล็อกนักเขียน

เนื่องจากตัวอ่านแถวไม่ล็อคผู้เขียนจึงสามารถปรับเปลี่ยนแถวนี้ได้ ข้อยกเว้นเพียงอย่างเดียวคือคำสั่ง SELECT ... สำหรับการอัพเดทซึ่งเป็นคำสั่ง SELECT ชนิดพิเศษที่ล็อคแถวที่กำลังอ่านอยู่

•นักเขียนไม่เคยบล็อกผู้อ่าน

เมื่อแถวถูกเปลี่ยนแปลงโดยนักเขียนฐานข้อมูลจะใช้เลิกทำข้อมูลเพื่อให้ผู้อ่านมีมุมมองที่สอดคล้องกันของแถว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.