ฉันถูกถามคำถามนี้ในการสัมภาษณ์และไม่มีคำตอบ ทุกคนที่นี่สามารถอธิบายได้หรือไม่
ฉันถูกถามคำถามนี้ในการสัมภาษณ์และไม่มีคำตอบ ทุกคนที่นี่สามารถอธิบายได้หรือไม่
คำตอบ:
การล็อคฐานข้อมูลสามารถมีอยู่ในแถวหน้าหรือตารางหรือดัชนีทั้งหมด เมื่อทรานแซคชันกำลังดำเนินอยู่การล็อกที่ถูกล็อกโดยทรานแซคชันจะใช้ทรัพยากร การเพิ่มระดับการล็อคคือที่ที่ระบบรวมการล็อคหลาย ๆ อันในระดับที่สูงกว่า (ตัวอย่างเช่นการรวมการล็อคหลายแถวเข้ากับหน้าหรือหลายหน้าไปยังตารางทั้งหมด) โดยทั่วไปแล้วเพื่อกู้คืนทรัพยากรที่เกิดจากการล็อคแบบละเอียด
มันจะทำสิ่งนี้โดยอัตโนมัติแม้ว่าคุณสามารถตั้งค่าสถานะบนตาราง (ดู ALTER TABLE ในหนังสือบนบรรทัด) เพื่อควบคุมนโยบายสำหรับการเพิ่มระดับการล็อกบนตารางนั้น โดยเฉพาะอย่างยิ่งการเลื่อนระดับการล็อกก่อนกำหนดหรือมากเกินไปที่เคยเป็นปัญหากับ Sybase และ SQL Server เวอร์ชันเก่าเมื่อคุณมีกระบวนการสองกระบวนการที่เขียนแถวแยกกันในหน้าเดียวกันพร้อมกัน หากคุณย้อนกลับไปไกลพอ (IIRC SQL Server 6.5) SQL Server ไม่มีการล็อกแถว แต่จริง ๆ แล้วสามารถล็อคตารางหรือหน้าได้เท่านั้น เมื่อสิ่งนี้เกิดขึ้นคุณจะได้รับความขัดแย้งระหว่างส่วนแทรกของบันทึกในหน้าเดียวกัน บ่อยครั้งที่คุณจะใส่ดัชนีคลัสเตอร์ในตารางเพื่อแทรกใหม่ไปยังหน้าต่างๆ
มันเป็นวิธีการลดค่าใช้จ่ายของระบบโดยการแปลงล็อคเม็ดเล็ก ๆ ให้เป็นเม็ดเล็กหยาบ ข้อมูลรายละเอียดเพิ่มเติมสามารถพบได้ที่นี่และที่นี่
ตัวอย่างเช่นหากคุณมีการล็อคจำนวนมาก (โดยปกติจะเป็นร้อยหรือมากกว่า) ในแถวที่ระบุในตารางเมื่อคุณเกินจำนวนการล็อคสูงสุดที่อนุญาตแล้วการแลกเปลี่ยนเหล่านี้อาจเป็นการแลกเปลี่ยนสำหรับการล็อคทั้งตาราง
SQL Server ทำการล็อคการเลื่อนระดับเพื่อลดค่าใช้จ่ายของหน่วยความจำโดยการแปลงการล็อกระดับต่ำแบบละเอียดจำนวนมากเป็นการล็อกระดับสูงแบบหยาบ
เป็นตำนานที่ว่าการล็อกแถวถูกเลื่อนระดับเป็นหน้าล็อกตามที่กล่าวไว้ข้างต้นโดย @ConcernedOfTunbridgeWells ผิด
หากตารางมีแถวที่มีการอัพเดทน้อยมากโปรแกรมเอ็นจิน SQL จะลองใช้ Row-Lock ในแถวเหล่านั้นหรือล็อคหน้าในหน้าเหล่านั้น สมมติว่ามันใช้ Row-Lock แต่ถ้าการอัพเดทแถวเพิ่มขีด จำกัด (~ 5k ล็อค) ดังนั้นแทนที่จะใช้การล็อคแถวหลายครั้งมันจะล็อคตารางเดียว ดังนั้นสิ่งนี้จะช่วยลดค่าใช้จ่ายของหน่วยความจำโดยการปล่อย Row-Lock หลาย ๆ อันและใช้ Table-Lock เพียงอันเดียว แต่เพิ่มการทำงานพร้อมกัน เกิดขึ้นได้เหมือนกันกับการล็อกหน้า
เกณฑ์ล็อกเป็นที่อย่างน้อย 5000 ล็อคและขึ้นอยู่กับปัจจัยหลายประการคำอธิบายรายละเอียดของล็อกได้รับการกล่าวถึงที่นี่ใน MSDN BOL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx
การเพิ่มล็อคหมายถึงการแปลงการล็อคเป็นโหมด จำกัด มากขึ้น เรื่องนี้เห็นบ่อยที่สุดในฐานข้อมูล แบบสอบถามอาจมีทรัพยากรถูกล็อคไว้สำหรับ "ที่ใช้ร่วมกัน" และเลื่อนระดับเป็น "เอกสิทธิ์" เพื่อทำการอัปเดต