คำถามติดแท็ก snapshot-isolation

1
ในกรณีที่มีการอัปเดตหลายระเบียนในรายการเดียวมีการจัดเก็บรุ่นกี่เวอร์ชัน
อ้างอิงจากบทความ MSDN โดย Kimberly L. Tripp การแยกธุรกรรมโดยใช้การควบคุมเวอร์ชันของSQL Server 2005 Rowของ Neal Graves "... ทุกรุ่นก่อนหน้าของเร็กคอร์ดที่เฉพาะเจาะจงจะถูกล่ามโซ่ไว้ในรายการที่เชื่อมโยงและในกรณีของการทำธุรกรรมที่อิงกับการทำเวอร์ชันแถวยาวรันลิงก์จะต้องถูกสำรวจในแต่ละการเข้าถึงเพื่อให้ได้เวอร์ชันที่สอดคล้องกันของธุรกรรม แถว" ซึ่งอยู่ในส่วน "การทำความเข้าใจกับการกำหนดเวอร์ชันของแถว" สำหรับการติดตามทั้ง "การกำหนดเวอร์ชันของแถวในการอ่านที่กระทำโดยใช้การกำหนดเวอร์ชันของแถว" และ "การกำหนดเวอร์ชันของแถวในการแยก Snapshot" เพิ่มเติมเกี่ยวกับตัวอย่างของการกำหนดเวอร์ชันของแถวเนื่องจากการปรับเปลี่ยนมีให้ในบริบทของการอัพเดตหลายรายการของเร็กคอร์ดเดียวกันโดยการทำธุรกรรมหลายรายการ (T1, T2, T3) ใน SNAPSHOT เท่านั้น ในกรณีที่มีเพียงหนึ่งธุรกรรมที่อัปเดตบันทึกหลายครั้ง (โดยหลายงบ) จะมีการจัดเก็บหลายรุ่น (เชื่อมโยง) หรือเฉพาะรายการที่ถ่ายในช่วงเวลาที่มีการ "จับภาพ" SNAPSHOT หรือไม่ คำตอบสำหรับคำถามนี้ควรตอบคำถามที่เกี่ยวข้องที่รอดำเนินการของฉันทันที: เหตุใดตัวแยกการกำหนดเวอร์ชันแถวใช้รายการรุ่นที่เชื่อมโยงของบันทึก RCSI ใช้พื้นที่น้อยกว่าหรือเหมือนกันมากกว่า SNAPSHOT หรือไม่ ทำไม?

1
ธุรกรรมแยกระดับ SNAPSHOT กับ TRUNCATE?
ฉันหวังว่าจะมีใครบางคนแสดงความเข้าใจบางอย่างเกี่ยวกับพฤติกรรมนี้ซึ่งฉันไม่ได้คาดหวังเกี่ยวกับการแยก SNAPSHOT กับ TRUNCATE ฐานข้อมูล: อนุญาตการแยก Snapshot = True; Is Snapshot On Read ที่ได้รับการยอมรับ = False ขั้นตอนที่ 1 (แทนที่เนื้อหาของ table foo จาก SELECT ที่ซับซ้อนที่รันเป็นเวลานานด้วยการรวมจำนวนมาก): BEGIN TRAN; TRUNCATE TABLE foo; INSERT INTO foo SELECT...; COMMIT; ขั้นตอนที่ 2 (อ่านจากตาราง foo): SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM foo; หากโพรซีเดอร์ 1 กำลังรันในขณะที่โพรซีเดอร์ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.