KB4338890 - KHẮC PHỤC: Lỗi "Bộ lập lịch không mang lại" và SQL Server xuất hiện không phản hồi trong SQL Server 2014, 2016 và 2017

Áp dụng cho
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Triệu chứng

Giả sử bạn đã cài đặt Microsoft SQL Server 2014, 2016 hoặc 2017.  Bạn có thể gặp một hoặc nhiều sự cố sau:

  • Trường SQL Server xuất hiện không phản hồi và xuất hiện lỗi "Bộ lập lịch Không năng suất". Bạn có thể phải khởi động lại máy chủ để khôi phục.
  • Việc quay lui giao dịch có thể mất nhiều thời gian để hoàn tất. Trong hầu hết các trường hợp, việc khởi động lại phiên bản sẽ cho phép cơ sở dữ liệu khôi phục nhanh hơn nhiều so với quay lui. Lưu ý rằng có nhiều lý do quay lui có thể mất nhiều thời gian để hoàn thành, hãy xem phần "Thông tin thêm" dưới đây để biết chi tiết về việc theo dõi quay lui trước khi cố gắng khởi động lại.
  • Bạn có thể thấy chờ đợi cao trên khóa quay chẳng hạn như SOS_OBJECT_STORE.

Giải pháp

Sự cố này đã được khắc phục trong các bản cập nhật tích lũy sau đây SQL Server:

Bản cập nhật Tích lũy 9 cho SQL Server 2017

Bản cập nhật tích lũy 2 cho SQL Server 2016 SP2

Giới thiệu về các bản cập nhật tích lũy SQL Server:

Mỗi bản cập nhật tích lũy mới dành cho SQL Server sẽ chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật được bao gồm trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất dành cho doanh SQL Server:

Bản cập nhật tích lũy mới nhất cho SQL Server 2017

Bản cập nhật tích lũy mới nhất cho SQL Server 2016

Bản cập nhật tích lũy mới nhất cho SQL Server 2014

Thông tin gói dịch vụ dành cho người SQL Server

Bản cập nhật này đã được khắc phục trong gói dịch vụ sau đây dành SQL Server:

Gói Dịch vụ 3 cho SQL Server 2014

Giới thiệu về Gói dịch vụ dành SQL Server:

Các gói dịch vụ được tích lũy. Mỗi gói dịch vụ mới đều chứa tất cả các bản sửa lỗi trong các gói dịch vụ trước đó, cùng với mọi bản sửa lỗi mới. Đề xuất của chúng tôi là áp dụng gói dịch vụ mới nhất và bản cập nhật tích lũy mới nhất cho gói dịch vụ đó. Bạn không phải cài đặt gói dịch vụ trước đó trước khi cài đặt gói dịch vụ mới nhất. Sử dụng Bảng 1 trong bài viết sau để tìm thêm thông tin về gói dịch vụ mới nhất và bản cập nhật tích lũy mới nhất.

Cách xác định phiên bản, phiên bản và mức cập nhật của phiên bản và SQL Server phần của nó

Xem thêm Thông tin

Có nhiều lý do tại sao quay lui có thể mất một thời gian dài chẳng hạn như một giao dịch dài chạy, một số lượng lớn VLFs trong tệp nhật ký giao dịch, I/O chậm, v.v. Để xác minh rằng sự cố được mô tả trong bài viết này là nguyên nhân gốc gây ra tình trạng quay lui chậm, chúng tôi khuyên bạn nên sử dụng các kỹ thuật sau để theo dõi tiến độ của thao tác quay lui:

  • Từ sys.dm_exec_requests, xác định session_id có lệnh được đặt là "KILLED/ROLLBACK" và đảm bảo rằng phiên đang tích lũy thời gian IO và CPU cho biết tiến độ. Nếu IO không thay đổi thì đó có thể là chỉ báo cho biết bạn đang gặp phải sự cố được mô tả trong bài viết này.
  • Truy sys.dm_tran_database_transactions để xác định trạng thái hiện tại của cuộn ngược bằng cách sử dụng truy vấn như sau:

Lưu ý

  • SELECT getdate() dưới dạng 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)
  • FROM sys.dm_tran_database_transactions t
  • THAM GIA sys.dm_exec_requests s
       BẬT t.transaction_id=s.transaction_id
  • WHERE t.database_id=db_id('<Tên Cơ sở dữ liệu') và s.session_id=<Session_id thực hiện thao tác quay lui>

Lưu ý:

Trong truy vấn ở trên,

database_transaction_next_undo_lsn là LSN của bản ghi tiếp theo cần hoàn tác. database_transaction_begin_lsn là LSN của bản ghi bắt đầu cho giao dịch trong nhật ký giao dịch.

database_transaction_next_undo_lsn sẽ giảm theo từng ảnh tức thời của truy vấn này. Quá trình quay lui sẽ hoàn tất thành công database_transaction_next_undo_lsn đạt database_transaction_begin_lsn.

Mục tiêu ở đây là để chụp một vài ảnh chụp nhanh của truy vấn trước đó trong một khoảng thời gian được xác định trước và sau đó sử dụng delta của các LSN được xử lý trong database_transaction_next_undo_lsn trong khoảng thời gian đó và bổ sung thêm thời gian thực hiện để ước tính thời gian cần thiết cho database_transaction_next_undo_lsn để đạt đến database_transaction_begin_lsn.

Nếu quá trình quay lui đang diễn ra với tốc độ ổn giữa mỗi ảnh chụp nhanh, chúng tôi khuyên bạn nên tự hoàn tất quay lui mà không cần phải khởi động lại SQL Server tiếp.

Xem các bài viết sau để biết thêm thông tin về quá trình khôi phục trong thời gian dài:

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft dùng để mô tả các bản cập nhật phần mềm.