อาการ
พิจารณาสถานการณ์ต่อไปนี้:
-
คุณแทรกแถวหลายแถวลงในตารางใน Microsoft SQL Server ๒๐๐๘หรือใน SQL Server ๒๐๐๘ R2 โดยใช้หนึ่งในคิวรีต่อไปนี้:
-
INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
-
SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
หมายเหตุ
-
พื้นที่ที่สำรองไว้ของ ><target_table แสดงชื่อตารางเป้าหมายที่แท้จริง
-
พื้นที่ที่สำรองไว้ของ เพรดิเคต<> แสดงเพรดิเคตที่แท้จริง
-
พื้นที่ที่สำรองไว้ของ ><source_table จะแสดงตารางต้นฉบับที่แท้จริง
-
-
เกินขีดจำกัดการเลื่อนระดับการล็อกของตาราง
ในสถานการณ์สมมตินี้กลไกจัดการฐานข้อมูลไม่ได้เลื่อนระดับการล็อกของตาราง
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจาก SQL Server จะไม่นับรวมล็อกใหม่ทั้งหมดที่สร้างขึ้นโดยการแทรกการดำเนินการ ดังนั้นค่าเกณฑ์การเลื่อนระดับการล็อกอาจไม่ถูกทริกเกอร์เมื่อจำเป็น
การแก้ไข
ข้อมูล service pack สำหรับ SQL Server ๒๐๐๘
เมื่อต้องการแก้ไขปัญหานี้ให้รับ service pack ล่าสุดสำหรับ SQL Server 2008 สำหรับข้อมูลเพิ่มเติมให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๙๖๘๓๘๒ วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server ๒๐๐๘
ข้อมูล service pack สำหรับ SQL Server ๒๐๐๘ R2
เมื่อต้องการแก้ไขปัญหานี้ให้ขอรับ service pack ล่าสุดสำหรับ SQL Server ๒๐๐๘ R2 สำหรับข้อมูลเพิ่มเติมให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๕๒๗๐๔๑วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server ๒๐๐๘ R2
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"ปัญหานี้ได้รับการแก้ไขแล้วใน SQL Server ๒๐๐๘ Service Pack 2 สำหรับ SQL Server 2008 ปัญหานี้ได้รับการแก้ไขแล้วใน SQL Server ๒๐๐๘ R2 Service Pack 1 สำหรับ sql Server ๒๐๐๘ R2 ครั้งแรก
ข้อมูลเพิ่มเติม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเลื่อนระดับการล็อกแวะไปที่เว็บไซต์ Microsoft TechNet ดังต่อไปนี้:
ข้อมูลทั่วไปเกี่ยวกับการเลื่อนระดับการล็อกเมื่อต้องการตรวจสอบว่าล็อกของตารางถูกเลื่อนระดับหรือไม่ให้เรียกใช้คำสั่ง Transact SQL ต่อไปนี้:
USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x
ถ้าการล็อกของตารางถูกเลื่อนระดับแล้วคำสั่ง SELECT สุดท้ายจะส่งกลับค่าเป็น1หรือ2 ถ้าการล็อกของตารางไม่ได้เลื่อนระดับแล้วคำสั่ง SELECT สุดท้ายจะส่งกลับค่าของ๔๐,๐๖๖หรือ๔๐,๐๖๗