การแก้ไข: ประสิทธิภาพการทำงานช้าหรือการชะงักงันเมื่อคุณคืนค่าฐานข้อมูล และเรียกใช้คำสั่งในเวลาเดียวกันใน SQL Server 2012

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 2725950 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
Microsoft กระจายการแก้ไขปัญหาของ Microsoft SQL Server 2012 เป็นแฟ้มหนึ่งแฟ้มที่สามารถดาวน์โหลดได้ เนื่องจากการแก้ไขเป็นแบบสะสม แต่ละรุ่นใหม่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และแก้ไขความปลอดภัยทั้งหมดที่ถูกรวมเข้ากับเซิร์ฟเวอร์ 2012 ก่อนหน้านี้ของ SQL แก้ไขนำออกใช้
ขยายทั้งหมด | ยุบทั้งหมด

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

อาการ

สถานการณ์สมมติที่ 1

พิจารณาสถานการณ์สมมติต่อไปนี้:
  • คุณคืนค่าฐานข้อมูลใน Microsoft SQL Server 2012
  • ก่อนที่จะเสร็จสิ้นการดำเนินการคืนค่าฐานข้อมูล กระบวนการอื่นอ้างอิงในมุมมองของแค็ตตาล็อกsys.database_recovery_statusและจำเป็นต้องมีการล็อกบนฐานข้อมูลเดียวกัน ตัวอย่างเช่น คุณเรียกใช้คำสั่งSELECTดังต่อไปนี้:

    SELECT * FROM sys.database_recovery_status
ในสถานการณ์สมมตินี้ ประสิทธิภาพการทำงานช้าเกิดขึ้นในกระบวนการสำหรับคำสั่งSELECTที่รอจนกว่ากระบวนการคืนค่าฐานข้อมูลเสร็จเรียบร้อยแล้ว

สถานการณ์สมมติ 2

พิจารณาสถานการณ์สมมติต่อไปนี้:
  • คุณคืนค่าฐานข้อมูลใน SQL Server 2012
  • ก่อนที่จะเสร็จสิ้นการดำเนินการคืนค่าฐานข้อมูล คุณเรียกใช้คำสั่งต่อไปนี้:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    หมายเหตุ ที่ DataBaseID แสดง ID ของฐานข้อมูลที่คุณทำการดำเนินการคืนค่าฐานข้อมูล
ในสถานการณ์สมมตินี้ การล็อกตายเกิดขึ้นในกระบวนการคืนค่าฐานข้อมูล การชะงักงันนี้ทำให้เกิดกระบวนการคืนค่าฐานข้อมูลล้มเหลว

สาเหตุ

สองสถานการณ์ที่อธิบายไว้ในส่วน "อาการ" เกิดขึ้นจากสาเหตุเดียวกัน

ในส่วนของ "Scenario1" ปัญหาเกิดขึ้นเนื่องจากกระบวนการคืนค่าฐานข้อมูลที่จำเป็นต้องมีการล็อกแบบเอกสิทธิ์เฉพาะบุคคลบนฐานข้อมูล เมื่อคุณเรียกใช้คำสั่งที่ระบุไว้ในส่วนนั้น มีการล็อกที่ใช้ร่วมกันเป็นสิ่งจำเป็นบนฐานข้อมูลเดียวกัน ดังนั้น ล็อกที่ใช้ร่วมกันรอล็อกแบบเอกสิทธิ์เฉพาะบุคคลจนกว่ามีปล่อยล็อกแบบเอกสิทธิ์เฉพาะบุคคล

ในส่วน "สถานการณ์สมมติ 2" เมื่อคุณเรียกใช้คำสั่งที่ระบุไว้ในส่วนนั้น มีการล็อกที่ใช้ร่วมกันถูกต้องทั้ง บนฐานข้อมูลเดียวกัน และ ในตารางsys.sysdbreg ในขั้นตอนสุดท้ายของกระบวนการคืนค่าฐานข้อมูล กระบวนการต้องใช้ล็อคอัพเดsys.sysdbregตาราง อย่างไรก็ตาม ล็อกที่ใช้ร่วมกันจะไม่ถูกปล่อยจากฐานข้อมูล ดังนั้น การล็อกตายเกิดขึ้นในตารางsys.sysdbregและมีกำหนดกระบวนการคืนค่าฐานข้อมูลที่จะใช้ในการล็อกตาย

การแก้ไข

ปรับปรุงข้อมูล

แพคเกจโปรแกรมปรับปรุงที่สะสม 1 สำหรับ SQL Server 2012 Service Pack 1

วิธีแก้ปัญหานี้ก่อนวางจำหน่ายใน 1 การปรับปรุงสะสม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับแพคเกจโปรแกรมปรับปรุงนี้สำหรับ SQL Server 2012 Service Pack 1 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
2765331 แพคเกจโปรแกรมปรับปรุงที่สะสม 1 สำหรับ SQL Server 2012 Service Pack 1
หมายเหตุ เนื่องจาก builds สะสม แต่ละรุ่นแก้ไขใหม่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และแก้ไขความปลอดภัยทั้งหมดที่ถูกรวมเข้ากับเซิร์ฟเวอร์ 2012 ก่อนหน้านี้ของ SQL แก้ไขนำออกใช้ เราขอแนะนำให้ คุณพิจารณานำออกใช้การแก้ไขครั้งล่าสุดที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
2772858 สร้าง 2012 เซิร์ฟเวอร์ SQL ที่ถูกนำออกใช้หลังจากที่มีการนำออกใช้ SQL Server 2012 Service Pack 1

แพคเกจโปรแกรมปรับปรุงที่สะสม 3 สำหรับ SQL Server 2012

วิธีแก้ปัญหานี้ก่อนวางจำหน่ายใน 3 ปรับปรุงที่สะสม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับแพคเกจโปรแกรมปรับปรุงนี้สำหรับ SQL Server 2012 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
2723749 อัพเดต 3 สำหรับ SQL Server 2012
หมายเหตุ เนื่องจาก builds สะสม แต่ละรุ่นแก้ไขใหม่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และแก้ไขความปลอดภัยทั้งหมดที่ถูกรวมเข้ากับเซิร์ฟเวอร์ 2012 ก่อนหน้านี้ของ SQL แก้ไขนำออกใช้ เราขอแนะนำให้ คุณพิจารณานำออกใช้การแก้ไขครั้งล่าสุดที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
2692828 สร้าง 2012 เซิร์ฟเวอร์ SQL ที่ถูกนำออกใช้หลังจาก 2012 เซิร์ฟเวอร์ SQL ที่ถูกนำออกใช้

สถานะ

Microsoft ยืนยันว่า ปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่ระบุไว้ในส่วน"ใช้งาน"

การหลีกเลี่ยงปัญหา

เมื่อต้องแก้ไขปัญหาในสถานการณ์สมมติ 2 ใช้หนึ่งในวิธีต่อไปนี้
วิธีที่ 1


ปรับเปลี่ยนคำสั่งเพื่อหลีกเลี่ยงการล็อกที่ใช้ร่วมกันบนตารางsys.sysdbregโดยใช้คำแนะนำ "NOLOCK" ลง
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
วิธีที่ 2
การตั้งค่าระดับความสำคัญของคำสั่งที่ "ต่ำ" การชะงักงัน
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
หมายเหตุ เมื่อคุณใช้วิธีการที่สองเพื่อหลีกเลี่ยงการล็อกตายทั้ง ในคำสั่ง และ ในกระบวนการคืนค่าฐานข้อมูล รหัสในคำสั่ง IF จะไม่มีดำเนิน

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการล็อกแบบเอกสิทธิ์เฉพาะบุคคล การล็อกที่ใช้ร่วมกัน และล็อกการปรับปรุง ไปเว็บไซต์ MSDN ต่อไปนี้:
ข้อมูลทั่วไปเกี่ยวกับโหมดการล็อก
สำหรับข้อมูลเพิ่มเติมรูปแบบที่ให้บริการแบบเพิ่มหน่วยสำหรับ SQL Server คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
935897 แบบจำลองแบบเพิ่มหน่วยให้บริการจะพร้อมใช้งานจากทีม SQL Server จะจัดส่งโปรแกรมแก้ไขด่วนสำหรับการรายงานปัญหา
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเค้าร่างตั้งชื่อสำหรับการปรับปรุง SQL Server คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
822499 แบบแผนการตั้งชื่อสำหรับแพคเกจการปรับปรุงซอฟต์แวร์ของ Microsoft SQL Server
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำศัพท์ของการปรับปรุงซอฟต์แวร์ ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft
824684 คำอธิบายเกี่ยวกับคำศัพท์เฉพาะทางมาตรฐานที่ใช้เพื่ออธิบายชุดปรับปรุงซอฟต์แวร์ของ Microsoft

คุณสมบัติ

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

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

 

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