อาการ
สมมติว่าคุณมี Microsoft SQL Server ๒๐๑๔, ๒๐๑๖หรือ๒๐๑๗ติดตั้งอยู่ คุณอาจพบปัญหาต่อไปนี้อย่างน้อยหนึ่งอย่าง:
-
อินสแตนซ์ SQL Server จะปรากฏขึ้นไม่ตอบสนองและข้อผิดพลาด "ตัวจัดกำหนดการส่งไม่ใช่" เกิดขึ้น คุณอาจต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อกู้คืน
-
การย้อนกลับของทรานแซคชันอาจใช้เวลานานในการดำเนินการให้เสร็จสมบูรณ์ ในกรณีส่วนใหญ่แล้วการรีสตาร์ตอินสแตนซ์จะทำให้ฐานข้อมูลกู้คืนได้เร็วกว่าการย้อนกลับ โปรดสังเกตว่าการย้อนกลับอาจใช้เวลานานในการทำให้เสร็จสมบูรณ์ให้ดูที่ส่วน "ข้อมูลเพิ่มเติม" ด้านล่างสำหรับรายละเอียดเกี่ยวกับการตรวจสอบ rollbacks ก่อนที่จะพยายามเริ่มการทำงานใหม่
-
คุณอาจเห็นสูงรอบน spinlocks เช่น SOS_OBJECT_STORE
การแก้ไข
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมต่อไปนี้สำหรับ SQL Server:
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
การอัปเดตที่สะสมล่าสุดสำหรับ SQL Server ๒๐๑๗
ข้อมูล service pack สำหรับ SQL Server
การอัปเดตนี้ได้รับการแก้ไขใน service pack ต่อไปนี้สำหรับ SQL Server:
เซอร์วิสแพ็คจะได้รับการสะสม Service pack ใหม่แต่ละชุดจะมีการแก้ไขทั้งหมดที่อยู่ใน service pack ก่อนหน้านี้พร้อมกับการแก้ไขใหม่ คำแนะนำของเราคือการนำ service pack ล่าสุดและการอัปเดตที่สะสมล่าสุดสำหรับ service pack นั้นไปใช้ คุณไม่จำเป็นต้องติดตั้ง service pack ก่อนหน้าก่อนที่คุณจะติดตั้ง service pack ล่าสุด ใช้ตาราง1ในบทความต่อไปนี้เพื่อค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ service pack ล่าสุดและการอัปเดตล่าสุดที่สะสม
วิธีการพิจารณาเวอร์ชัน รุ่น และระดับการอัปเดต SQL Server และส่วนประกอบ
ข้อมูลเพิ่มเติม
มีเหตุผลหลายประการที่การย้อนกลับอาจใช้เวลานานเช่นทรานแซคชันที่ใช้งานเป็นระยะเวลานานจำนวน VLFs ในไฟล์บันทึกธุรกรรม, i/o i/o เป็นต้น เพื่อตรวจสอบว่าปัญหาที่อธิบายไว้ในบทความนี้เป็นสาเหตุหลักของการย้อนกลับที่ช้าเราขอแนะนำให้ใช้เทคนิคต่อไปนี้เพื่อตรวจสอบความคืบหน้าของการดำเนินการย้อนกลับ:
-
จาก sys.dm_exec_requestsให้ระบุ session_id คำสั่งถูกตั้งค่าเป็น "การฆ่า/ย้อนกลับ" และตรวจสอบให้แน่ใจว่าเซสชันจะได้รับการสะสมทั้งเวลา IO และ CPU ที่ระบุความคืบหน้า ถ้า IO ไม่ได้รับการเปลี่ยนแปลงอาจเป็นการบ่งชี้ว่าคุณกำลัง encountering ปัญหาที่อธิบายไว้ในบทความนี้
-
คิวรี sys.dm_tran_database_transactions ระบุสถานะปัจจุบันของการย้อนกลับโดยใช้คิวรีดังต่อไปนี้:
เลือก getdate () เป็น CurrentTime, database_transaction_next_undo_lsn, database_transaction_begin_lsn, t.transaction_id, database_transaction_begin_time, database_transaction_log_record_count, db_name (t.database_id)
จาก sys.dm_tran_database_transactions t
เข้าร่วม sys.dm_exec_requests s บน t.transaction_id = s.transaction_id
ที่ t.database_id = db_id (' <ชื่อฐานข้อมูล') และ s.session_id =<Session_id ดำเนินการการย้อนกลับ>
หมายเหตุ:
ในแบบสอบถามด้านบน
database_transaction_next_undo_lsn เป็น lsn ของระเบียนถัดไปที่จะเลิกทำ database_transaction_begin_lsn เป็น lsn ของระเบียนเริ่มต้นสำหรับทรานแซคชันในบันทึกธุรกรรม
database_transaction_next_undo_lsn ควรลดลงด้วยแต่ละ snapshot ของคิวรีนี้ การย้อนกลับจะเสร็จเรียบร้อยแล้วเมื่อ database_transaction_next_undo_lsn ถึง database_transaction_begin_lsn
เป้าหมายที่นี่คือการใช้ snapshots ของคิวรีก่อนหน้านี้ในช่วงเวลาที่กำหนดไว้ล่วงหน้าแล้วใช้ delta ของ LSNs ที่ดำเนินการในdatabase_transaction_next_undo_lsnภายในช่วงเวลาดังกล่าวและ extrapolate เวลาที่ใช้ในการคำนวณเวลาที่จะใช้สำหรับdatabase_transaction_next_undo_lsnไปถึงdatabase_transaction_begin_lsn
ถ้าการย้อนกลับมีความคืบหน้าในอัตราที่เหมาะสมระหว่างแต่ละ snapshot เราขอแนะนำว่าการย้อนกลับจะได้รับอนุญาตให้เสร็จสมบูรณ์ได้โดยไม่ต้องเริ่มต้นอินสแตนซ์ SQL Server ใหม่
ดูบทความต่อไปนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกู้คืนที่ทำงานเป็นเวลานาน:
-
SQL Server (๒๐๐๐, ๒๐๐๕, ๒๐๐๘): การกู้คืน/การย้อนกลับใช้เวลานานกว่าที่คาดไว้
-
วิธีที่โครงสร้างไฟล์บันทึกสามารถส่งผลต่อเวลาการกู้คืนของฐานข้อมูล
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
อ้างอิง
เรียนรู้เกี่ยวกับคำ ศัพท์เฉพาะทางที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์