KB4338890. ВИПРАВЛЕННЯ. У версіях SQL Server 2014, 2016 і 2017 SQL Server не відповідає

Застосовується до
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)

Ознаки

Припустимо, у вас інстальовано Microsoft SQL Server 2014, 2016 або 2017.  Може виникнути одна або кілька з наведених нижче проблем.

  • Екземпляр SQL Server не відповідає, і з'являється повідомлення про помилку "Невідповідний планувальник". Можливо, для відновлення знадобиться перезавантажити сервер.
  • Відкочування транзакції може тривати довго. У більшості випадків перезавантаження екземпляра дозволяє базі даних відновлюватися набагато швидше, ніж відкочування. Зверніть увагу, що відкочування може тривати багато часу (див. розділ "Додаткові відомості" нижче, щоб дізнатися більше про моніторинг відкочування перед спробою перезавантаження).
  • Ви можете побачити високі очікування на спінлоках, таких як SOS_OBJECT_STORE.

Спосіб усунення проблеми

Цю проблему вирішено в наведених нижче сукупних оновленнях для SQL ServerSQL Server:

Сукупний пакет оновлень 9 для SQL ServerSQL Server 2017

Сукупний пакет оновлень 2 для SQL ServerSQL Server 2016 SP2

Відомості про сукупні оновлення для SQL ServerSQL Server :

Кожне нове сукупне оновлення для SQL Server містить усі виправлення та виправлення системи безпеки, які входили до попереднього сукупного пакета оновлень. Перегляньте останні сукупні оновлення для SQL Server.

Останнє сукупне оновлення для SQL ServerSQL Server 2017

Останнє сукупне оновлення для SQL ServerSQL Server 2016

Останнє сукупне оновлення для SQL ServerSQL Server 2014

Відомості про пакет оновлень для SQL ServerSQL Server

Це оновлення виправлено в такому пакеті оновлень для SQL ServerSQL Server:

Пакет оновлень 3 для SQL Server 2014

Пакети оновлень для SQL Server

Пакети оновлень накопичуються. Кожен новий пакет оновлень містить усі попередні виправлення разом із новими виправленнями. Ми радимо використовувати для них найновіший пакет оновлень і останній сукупний пакет оновлень. Інсталювати попередній пакет оновлень перед інсталяцією останнього пакета оновлень не обов'язково. Щоб дізнатися більше про останній пакет оновлень і останній сукупний пакет оновлень, скористайтеся таблицею 1 у таблиці 1 цієї статті.

Визначення версії, випуску та рівня оновлення SQL Server і його компонентів

Додаткова інформація

Існує багато причин, чому відкат може зайняти багато часу, наприклад, тривала транзакція, велика кількість VLF у файлі журналу транзакцій, повільний ввід/вивід тощо. Щоб переконатися, що проблема, описана в цій статті, є основною причиною повільного відкочування, ми пропонуємо скористатися наведеними нижче методами моніторингу перебігу операції відкочування.

  • У sys.dm_exec_requests визначте session_id, для команди якого встановлено значення "KILLED/ROLLBACK" (KILLED/ROLLBACK), і переконайтеся, що сеанс накопичує час вводу-виводу та процесора, що вказує на прогрес. Якщо ввід-вивід не змінюється, це може свідчити про те, що ви зіткнулися з проблемою, описаною в цій статті.
  • Query sys.dm_tran_database_transactions визначити поточний стан відкочування за допомогою такого запиту:

Примітка.

  • SELECT 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 т
  • ПРИЄДНАННЯ sys.dm_exec_requests
       ON t.transaction_id=s.transaction_id
  • WHERE 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 має зменшуватися з кожним знімком цього запиту. Відкочування завершиться, коли database_transaction_next_undo_lsn досягне database_transaction_begin_lsn.

Мета полягає в тому, щоб зробити кілька знімків попереднього запиту протягом заздалегідь визначеного інтервалу, а потім використати дельту LSN, оброблених у database_transaction_next_undo_lsn протягом цього інтервалу, та екстраполювати час, витрачений на те, щоб оцінити час, потрібний database_transaction_next_undo_lsn , щоб досягти database_transaction_begin_lsn.

Якщо відкочування відбувається з пристойною швидкістю між кожним знімком, радимо дозволити відкочуванню завершитися самостійно, не перезапускаючи SQL Server екземпляр.

Докладні відомості про довготривале відновлення можна знайти в таких статтях:

Стан

Корпорація Microsoft підтвердила, що це одна з проблем з продуктами Microsoft, перелічених у розділі "Застосовується до".

Посилання

Дізнайтеся, за допомогою яких термінів корпорація Майкрософт описує оновлення програмного забезпечення.