แสดงให้เห็นถึงการไม่ใช้ (nolock) คำใบ้ในทุกแบบสอบถาม


23

คุณเคยต้องพิสูจน์ว่าไม่ได้ใช้คำใบ้แบบสอบถามหรือไม่?

ฉันเห็นWITH (NOLOCK)ในทุกคำถามที่พบเซิร์ฟเวอร์ไม่ว่างมาก มันเป็นประเด็นที่นักพัฒนาคิดว่ามันควรจะเป็นโดยค่าเริ่มต้นเพราะพวกเขาเกลียดที่จะเห็นมันในโค้ดของพวกเขาหลายพันครั้ง

ฉันพยายามอธิบายว่าการอนุญาตให้อ่านสกปรกและพวกเขาจะจบลงด้วยข้อมูลที่ไม่ดีในที่สุด แต่พวกเขาเชื่อว่าการแลกเปลี่ยนประสิทธิภาพนั้นคุ้มค่า (ฐานข้อมูลของพวกเขายุ่งเหยิงไม่น่าแปลกใจที่พวกเขามีปัญหาเรื่องประสิทธิภาพ)

หากคุณมีตัวอย่างที่ชัดเจนเกี่ยวกับวิธีนำเสนอกรณีต่อต้านการใช้NOLOCKคำใบ้ในทางที่ผิดนี้จะได้รับการชื่นชม

คำตอบ:


17

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

NOLOCK มีอยู่แล้ว แต่ฉันสามารถแนะนำการอ้างอิงที่ดีบางอย่างที่แสดงให้เห็นถึงปัญหาในการใช้งาน:


11

มันถูกกล่าวถึงใน SO ก่อนหน้านี้:

กำหนดยุ่งมาก ๆ เรามีปริมาณสูง (50k แถวใหม่ต่อวินาทีมวลรวมขนาดใหญ่ ฯลฯ ) และไม่ต้องการรับข้อมูลที่หลบเกินไป


9

คุณต้องอธิบายให้เพื่อนร่วมงานทราบถึงความสำคัญของการทำความเข้าใจระดับการแยก แสดงตัวอย่าง คำอธิบายที่ดีที่สุดและง่ายที่สุดที่ฉันพบในเล็ก ๆ น้อย ๆ ของ Kendra โปสเตอร์ของระดับการแยก ถามพวกเขาว่าทำไมพวกเขาถึงคิดว่าพวกเขาต้องการคำใบ้ nolock เหตุใดพวกเขาจึงไม่ใช้คำสั่ง "ตั้งค่าระดับการแยกธุรกรรม ... " ถามว่าอะไรคือสถานการณ์ที่พวกเขาต้องการแก้ไขบางทีพวกเขาอาจมีการหยุดชะงักและการบล็อก .. เป็นต้น หากพวกเขาไม่ต้องการระงับการล็อคพวกเขาอาจพิจารณาระดับการแยกสแนปชอต

เพียงแค่ถามพวกเขาว่าคุณจะได้ภาพที่ชัดเจน

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