ใน MS SQL Server nolock
สามารถใช้งานได้ตามวัตถุประสงค์
ทำไมเราไม่สามารถใช้มันใน Oracle และ plsql ได้?
ใน MS SQL Server nolock
สามารถใช้งานได้ตามวัตถุประสงค์
ทำไมเราไม่สามารถใช้มันใน Oracle และ plsql ได้?
คำตอบ:
โดยปกติแล้ว SQL Server จะใช้กลยุทธ์การล็อกที่แตกต่างกับ Oracle กลยุทธ์เริ่มต้นที่ใช้โดย SQL Server หมายความว่าการเลือกแถวทำให้เกิดการล็อกการอ่าน (บนแถวหน้าหรือตารางทั้งหมด) ที่จะถูกวางไว้บน * ดังนั้นNOLOCK
บางครั้งก็เป็นประโยคที่มีประโยชน์ - แม้ว่าคำแนะนำทั่วไปจะไม่ใช้มันเพราะมันเปลี่ยนความหมายของระดับการแยกและอาจทำให้ผลลัพธ์ที่ไม่สอดคล้องกันในผลลัพธ์ของแบบสอบถาม
* (หมายเหตุ: นั่นคือค่าเริ่มต้นหากSNAPSHOT
มีการเลือกการแยกการทำงานจะแตกต่างกันและผู้อ่านไม่ได้บล็อกผู้เขียน)
ใน Oracle กระบวนการอ่านจะไม่บล็อกกระบวนการเขียน ต่อไปนี้เป็นข้อความที่ตัดตอนมาจาก ' Oracle Database Concepts 11g Release 2 ' ฉันขอแนะนำให้คุณดูว่าคุณสนใจวิธีการจัดการของ Oracle หรือไม่
การทำงานพร้อมกันของข้อมูลและความสอดคล้อง
สรุปพฤติกรรมการล็อค
ฐานข้อมูลรักษาล็อคหลายประเภทแตกต่างกันขึ้นอยู่กับการดำเนินการที่ได้รับล็อค โดยทั่วไปฐานข้อมูลจะใช้การล็อกสองประเภท: การล็อกแบบเอกสิทธิ์เฉพาะบุคคลและการล็อกแบบแบ่งใช้ สามารถรับล็อคแบบเอกสิทธิ์เฉพาะบุคคลเดียวเท่านั้นบนทรัพยากรเช่นแถวหรือตาราง แต่สามารถใช้ล็อกแบบแบ่งใช้จำนวนมากได้บนทรัพยากรเดียว
ล็อคส่งผลกระทบต่อการทำงานร่วมกันของผู้อ่านและนักเขียน ผู้อ่านเป็นแบบสอบถามของทรัพยากรในขณะที่นักเขียนเป็นคำสั่งการปรับเปลี่ยนทรัพยากร กฎต่อไปนี้สรุปพฤติกรรมการล็อคของ Oracle Database สำหรับผู้อ่านและผู้เขียน:
•แถวถูกล็อคเมื่อแก้ไขโดยนักเขียนเท่านั้น
เมื่อคำสั่งอัพเดตหนึ่งแถวธุรกรรมจะได้รับการล็อคสำหรับแถวนี้เท่านั้น โดยการล็อคข้อมูลตารางที่ระดับแถวฐานข้อมูลจะลดความขัดแย้งสำหรับข้อมูลเดียวกัน ภายใต้สถานการณ์ปกติ 1 ฐานข้อมูลไม่ได้เลื่อนระดับการล็อกแถวไปยังระดับบล็อกหรือตาราง
•นักเขียนของแถวบล็อกตัวเขียนพร้อมกันของแถวเดียวกัน
หากธุรกรรมหนึ่งกำลังแก้ไขแถวการล็อกแถวจะป้องกันไม่ให้ธุรกรรมอื่นแก้ไขแถวเดียวกันพร้อมกัน
•ผู้อ่านไม่เคยบล็อกนักเขียน
เนื่องจากตัวอ่านแถวไม่ล็อคผู้เขียนจึงสามารถปรับเปลี่ยนแถวนี้ได้ ข้อยกเว้นเพียงอย่างเดียวคือคำสั่ง SELECT ... สำหรับการอัพเดทซึ่งเป็นคำสั่ง SELECT ชนิดพิเศษที่ล็อคแถวที่กำลังอ่านอยู่
•นักเขียนไม่เคยบล็อกผู้อ่าน
เมื่อแถวถูกเปลี่ยนแปลงโดยนักเขียนฐานข้อมูลจะใช้เลิกทำข้อมูลเพื่อให้ผู้อ่านมีมุมมองที่สอดคล้องกันของแถว