การแก้ไข: การล็อกตารางจะไม่ escalated เมื่อคุณแทรกแถวจำนวนมากลงในตารางใน SQL Server 2008

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 2448971 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

พิจารณาสถานการณ์ต่อไปนี้::

  • คุณใส่จำนวนแถวในตารางใน Microsoft SQL Server 2008 โดยใช้แบบสอบถามต่อไปนี้อย่างใดอย่างหนึ่ง:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    หมายเหตุ
    • กระบวนการ<target_table></target_table>ตัวยึดแทนชื่อตารางเป้าหมายที่แท้จริง
    • กระบวนการ<predicate></predicate>ตัวยึดแทน predicate ที่แท้จริง
    • กระบวนการ<source_table></source_table>ตัวยึดแสดงตารางแหล่งที่แท้จริง
  • เกินเพดานจัดล็อกของตาราง
ในสถานการณ์สมมตินี้ โปรแกรมฐานข้อมูลไม่ escalate ล็อกของตาราง

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจาก SQL Server ไม่เป็นการภายในจำนวนล็อกใหม่ทั้งหมดที่สร้างขึ้น โดยการดำเนินการ INSERT ดังนั้น เพดานจัดการล็อกอาจไม่มีทริกเมื่อจำเป็น

การแก้ไข

ข้อมูล Service Pack

เมื่อต้องการแก้ไขปัญหานี้ ขอรับ service pack ล่าสุดสำหรับ SQL Server 2008

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
968382วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server 2008

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "การใช้งาน"
ปัญหานี้ได้ก่อนแก้ไขใน SQL Server 2008 Service Pack 2 สำหรับ SQL Server 2008

ข้อมูลเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการล็อก แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft TechNet:
ข้อมูลทั่วไปเกี่ยวกับการจัดการล็อก
การตรวจสอบว่า มีล็อกของตาราง escalated เรียกใช้คำสั่ง Transact SQL ต่อไปนี้:
USE tempdb
GO

CREATE TABLE x 
(
i INT NOT NULL PRIMARY KEY
)
GO

BEGIN TRAN
INSERT x
SELECT TOP (40000)
ROW_NUMBER() OVER 
(
ORDER BY (SELECT NULL)
) AS r
FROM 
master..spt_values a, 
master..spt_values b
ORDER BY
r

SELECT
COUNT(*)
FROM sys.dm_tran_locks
WHERE 
request_session_id = @@SPID 
ROLLBACK
GO

DROP TABLE x   
ถ้ามีล็อกของตาราง escalated คำสั่ง SELECT ล่าสุดส่งกลับค่าอย่างใดอย่างหนึ่ง1หรือ2. ถ้าไม่ escalated ใช้ล็อกของตาราง คำสั่ง SELECT ล่าสุดส่งกลับค่าอย่างใดอย่างหนึ่ง40,066หรือ40,067.


คุณสมบัติ

หมายเลขบทความ (Article ID): 2448971 - รีวิวครั้งสุดท้าย: 5 พฤศจิกายน 2553 - Revision: 2.0
ใช้กับ
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
Keywords: 
kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2448971 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:2448971

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com