Питання Моніторинг виконання SQL-запиту в SQL SERVER


Я побачив подібне питання, в якому запитувалося, як стежити за ходом операції резервного копіювання / відновлення: Чи існує SQL-сценарій, який я можу використати для визначення ходу резервного копіювання або відновлення SQL Server?

Я хотів би знати, чи є аналогічний запит / спосіб, щоб побачити, скільки часу залишив запит, доки він не закінчиться. Наприклад, один запит зазвичай пройшов 5 хвилин. Я хотів би дізнатись, скільки часу залишається до закінчення терміну виконання запиту.

Спасибі заздалегідь, Роні.


16
2017-07-20 12:03


походження


Привіт, Роні, щоб з'ясувати, ви хочете стежити за ходом виконання запиту, який виконує резервну копію / відновлення? Або запит взагалі? - Alex KeySmith


Відповіді:


Неможливо дізнатися, скільки часу залишається. Час виконання запиту залежить від багатьох речей, що виходять за межі фактичного запиту: блокування / блокування інших запитів, інших процесів, що споживають ресурси (використання процесора / диска), операційної системи, мережі тощо. Що робити, якщо ваш 5-хвилинний запит запущений, але хтось ще запускає великий звіт, тепер ваш запит може працювати 5:30. Що робити, якщо хтось починає завантажувати великий файл і свинячи всю пропускну здатність мережі? Що робити, якщо ОС вирішить щось робити у фоновому режимі тощо. До тих пір, поки всі рядки не будуть повернуті, запит не буде виконано, але він може працювати в змінному тимчасовому кадрі.


16
2017-07-20 12:07



Дійсно На деяких (погано налаштованих / перевантажених) системах один інтенсивний запит може заблокувати важливу таблицю - і раптово, запити, які зазвичай закінчуються під другим пробігом протягом десятків хвилин. Ви можете спостерігати за часом запиту та вгадати: "в середньому цей запит завершується в 5:41, зараз він працює 3:15", але це просто: здогадка (навіть не оцінка). - Piskvor
Я бачив заставки 3D-рендеринга, що працюють на коробках виробничих баз даних! - KM.
Наприклад, у Oracle ми переглянули v $ session_longops, що відображає статус операцій. download.oracle.com/docs/cd/B19306_01/server.102/b14237/...  Я впевнений, що в SQL SERVER немає подібної речі? Роні. - Roni Vered
@Roni Vered, існує безліч способів отримати інформацію від SQL Server про запуск запитів, але немає значення "TIME_RAMINING". Можливо, ви зможете обчислити середнє значення на основі попередніх циклів, див. stackoverflow.com/questions/617170/... - KM.
ДОБРЕ. Велике спасибі за ваші зусилля. - Roni Vered


sys.dm_exec_requests має таку інформацію, тож щось подібне дасть вам прогрес:

SELECT 
percent_complete
FROM sys.dm_exec_requests
--where session_id=51 or command like 'restore%'

12
2017-12-14 21:39



Цей запит корисний лише у випадку, якщо у вас є дозвіл VIEW SERVER STATE. Якщо ви цього не зробите, ви побачите лише результати, які ви щойно подали, - це трохи марно! Щоб встановити, чи є у вас дозволи, запустіть наступний "SELECT * FROM fn_my_permissions (NULL, 'SERVER');" - Якщо ви не бачите запис з ім'ям permission_ VIEW SERVER STATE, то у вас немає дозволу. - samaspin
Також ця інформація надається лише тоді, коли виконуються певні команди. Це, наприклад ROLLBACK, RECOVERY або BACKUP DATABASE. - user35443


Що ти хочеш Статистика запитів у реальному часі.

Ви можете активувати його в останній версії SSMS за допомогою кнопки поруч із тими, що дають вам звичайний план запитів:

enter image description here

Після цього ви отримаєте прямий план запиту:

enter image description here

Унизу ви бачите загальний прогрес:

enter image description here


12
2018-03-16 16:00





Так, ви можете дізнатися приблизний проміжок часу, якщо не буде несподіваної ситуації, яка вплине на виконання цього процесу.

Select total_elapsed_time,
 * from sys.dm_exec_sessions where session_id="your Id here" 

4
2017-09-30 21:04