คำถามติดแท็ก nolock

4
NOLOCK เลวเสมอหรือไม่
ฉันเป็นผู้พัฒนารายงานที่ต้องการทำให้ข้อความค้นหาของฉันมีประสิทธิภาพมากที่สุด ฉันเคยทำงานกับ DBA ที่บอกฉัน - ฉันเชื่อว่าเพราะฉันมักจะจัดการกับรายงานในเซิร์ฟเวอร์การผลิต - เพื่อใช้NOLOCKในทุกแบบสอบถาม ตอนนี้ฉันทำงานกับ DBA ที่ถูกแบนไม่NOLOCKว่ากรณีใด ๆ - แม้ว่ารายงานของฉัน (เนื่องจากการขาดดัชนีจำนวนมากในตารางสองสามตาราง) กำลังหยุดการจำลองแบบและการอัปเดตระบบ ในความคิดของฉันในกรณีนี้NOLOCKจะเป็นสิ่งที่ดี เนื่องจากการฝึกอบรม SQL ส่วนใหญ่ของฉันมาพร้อมกับ DBA ที่หลากหลายและมีความคิดเห็นที่แตกต่างกันมากฉันจึงอยากถามเรื่องนี้กับ DBA ที่หลากหลาย

1
(NOLOCK) กับ NOLOCK
ฉันกำลังตรวจสอบการบล็อกบางอย่างเมื่อฉันเห็นข้อความค้นหาที่มีลักษณะดังนี้: SELECT SomeField FROM SomeTable NOLOCK ฉันเห็นNOLOCKและอยากรู้ว่ามันจะบล็อกข้อความค้นหาอื่น ๆ ได้อย่างไรในกรณีDELETEนี้ ฉันลองดูที่ล็อคโดยใช้sp_lockและนี่คือสิ่งที่ฉันเห็น: DB S GRANT TAB IS GRANT PAG S GRANT ตอนนี้ความเข้าใจของฉันคือที่NOLOCKควรจะใช้ล็อค Schema-Stability เท่านั้นทำไมมันจึงคว้าล็อค IS? ความอยากรู้ของฉันป่องๆ ฉันดู BOL และเห็นว่ามีสองวิธีในการใช้WITH (NOLOCK)และเลิกใช้แล้ว(NOLOCK)ดังนั้นฉันจึงตัดสินใจลองใช้ ฉันเรียกใช้แบบสอบถามต่อไปนี้ตามด้วยการเรียกใช้sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S GRANT TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S GRANT TAB …

3
แสดงให้เห็นถึงการไม่ใช้ (nolock) คำใบ้ในทุกแบบสอบถาม
คุณเคยต้องพิสูจน์ว่าไม่ได้ใช้คำใบ้แบบสอบถามหรือไม่? ฉันเห็นWITH (NOLOCK)ในทุกคำถามที่พบเซิร์ฟเวอร์ไม่ว่างมาก มันเป็นประเด็นที่นักพัฒนาคิดว่ามันควรจะเป็นโดยค่าเริ่มต้นเพราะพวกเขาเกลียดที่จะเห็นมันในโค้ดของพวกเขาหลายพันครั้ง ฉันพยายามอธิบายว่าการอนุญาตให้อ่านสกปรกและพวกเขาจะจบลงด้วยข้อมูลที่ไม่ดีในที่สุด แต่พวกเขาเชื่อว่าการแลกเปลี่ยนประสิทธิภาพนั้นคุ้มค่า (ฐานข้อมูลของพวกเขายุ่งเหยิงไม่น่าแปลกใจที่พวกเขามีปัญหาเรื่องประสิทธิภาพ) หากคุณมีตัวอย่างที่ชัดเจนเกี่ยวกับวิธีนำเสนอกรณีต่อต้านการใช้NOLOCKคำใบ้ในทางที่ผิดนี้จะได้รับการชื่นชม

1
วิธีการทำซ้ำ“ ไม่สามารถสแกนด้วย NOLOCK ต่อเนื่องจากการเคลื่อนไหวของข้อมูล”
ฉันได้รับบางครั้ง "ไม่สามารถสแกนต่อNOLOCKเนื่องจากการเคลื่อนไหวของข้อมูล" กับงานขนาดใหญ่บางงานซึ่งมีWITH (NOLOCK)ในแบบสอบถามแบบใช้เลือกข้อมูล ฉันเข้าใจว่าสิ่งนี้เกี่ยวข้องกับการพยายามเลือกข้อมูลเมื่อมีการแบ่งหน้าซึ่งทำให้ข้อมูลไม่ได้อยู่ในที่ที่ควรจะเป็นอีกต่อไป - ฉันคิดว่าเป็นสิ่งที่เกิดขึ้นในสภาพแวดล้อมของฉัน ฉันจะทำสิ่งนี้ซ้ำได้อย่างไร ฉันพยายามหาวิธีแก้ปัญหาระยะสั้นเพื่อตรวจจับข้อผิดพลาดและลองใหม่เมื่อเกิดเหตุการณ์นี้ แต่ฉันไม่สามารถทดสอบได้หากฉันไม่สามารถทำซ้ำได้ มีวิธีที่เชื่อถือได้สมเหตุสมผลในการทำให้เกิดสิ่งนี้หรือไม่? เมื่อมันเกิดขึ้นการดำเนินการค้นหาผลลัพธ์อีกครั้งสำเร็จ - ดังนั้นฉันไม่มีข้อกังวลใด ๆ เกี่ยวกับข้อมูลจริงหรือฐานข้อมูลที่เสียหายอย่างถาวร บางตารางในแบบสอบถาม (พร้อมกับดัชนี) ลดลงสร้างใหม่และ repopulated บ่อยครั้งดังนั้นฉันคิดว่ามันเป็นสิ่งที่เกี่ยวข้อง การลบออกNOLOCKเป็นปัญหาระยะยาวของฉันที่จะจัดการกับ เหตุผลที่NOLOCKใส่ไว้ในตอนแรกก็คือการสืบค้นนั้นแย่มากจนพวกมันหยุดชะงักกับการทำธุรกรรมแบบวันต่อวันดังนั้นพวกเขาจึงNOLOCKช่วยกันหยุดการหยุดชะงัก (ซึ่งใช้ได้ผล) ดังนั้นฉันจึงต้องการความช่วยเหลือจากวงดนตรีในการช่วยเหลือแบบวงดนตรีจนกว่าเราจะสามารถแก้ปัญหาได้อย่างถาวร ถ้าฉันสามารถสร้างมันขึ้นมาใหม่ได้ด้วย Hello World ฉันจะวางแผนว่าจะตบวงช่วยเหลือเข้ากับงานในเวลาไม่ถึงหนึ่งชั่วโมง ไม่สามารถทำการลบ - ค้นหา - และ - แทนที่NOLOCKเพราะฉันเริ่มได้รับการหยุดชะงักของแอพอีกครั้งซึ่งแย่กว่าสำหรับฉันมากกว่างานที่ล้มเหลวเป็นครั้งคราว การใช้การแยกสแนปชอตแบบอ่านข้อมูลมุ่งมั่นเป็นไปได้ที่ดี - ฉันจะต้องทำงานกับทีมฐานข้อมูลของเราเพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนั้น ปัญหาส่วนหนึ่งของเราคือเราไม่มีผู้เชี่ยวชาญ SQL Server ที่จะจัดการกับสิ่งนั้นและฉันไม่เข้าใจระดับการแยกได้ดีพอที่จะทำการเปลี่ยนแปลงในตอนนี้

1
ไม่สามารถสแกนด้วย NOLOCK ต่อเนื่องจากการเคลื่อนไหวของข้อมูล
เราเรียกใช้ SQL Server 2000 และเราได้รับข้อผิดพลาดเล็กน้อยทุกคืน Could not continue scan with NOLOCK due to data movement แบบสอบถามที่ส่งข้อผิดพลาดนี้เป็นแบบสอบถามที่ซับซ้อนขนาดใหญ่ที่รวมอยู่เหนือตารางโหล ข้อมูลพื้นฐานของเราสามารถอัปเดตบ่อยครั้ง 'การปฏิบัติที่ดีที่สุด' ทางวัฒนธรรมคือในอดีตการแนะนำของNOLOCKคำแนะนำที่เพิ่มประสิทธิภาพและการปรับปรุงพร้อมกัน แบบสอบถามนี้ไม่จำเป็นต้องมีความแม่นยำ 100% เช่นเราจะทนต่อการอ่านที่สกปรก ฯลฯ อย่างไรก็ตามเราพยายามที่จะเข้าใจว่าเหตุใดฐานข้อมูลจึงโยนข้อผิดพลาดนี้ถึงแม้ว่าเราจะมีคำแนะนำการล็อคเหล่านี้ทั้งหมด ทุกคนสามารถให้ความกระจ่างเกี่ยวกับเรื่องนี้ - อ่อนโยนฉันเป็นโปรแกรมเมอร์ไม่ใช่ DBA :) PS: เราได้ใช้การแก้ไขที่กล่าวถึงด้านล่างก่อนหน้านี้: http://support.microsoft.com/kb/815008
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.