SQL Server. Время до завершения команды

SQL Server. Время до завершения командыВ SQL Server есть возможность получить примерное время завершения долгоиграющих команд, что сбережён нервы администратору БД. К сожалению, не для всех команд есть такая возможность. Вот список команд, с которыми работает данный метод:  

  • ALTER INDEX REORGANIZE
  • AUTO_SHRINK с ALTER DATABASE
  • BACKUP DATABASE
  • CREATE INDEX
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • KILL (Transact-SQL)
  • RESTORE DATABASE
  • UPDATE STATISTICS

Скрипт, для получения всего списка выглядит следующим образом:

-- Процент исполнения длительного запроса ввода-вывода 
SELECT ost.session_id
     , DB_NAME(ISNULL(s.dbid,1)) AS dbname
     , er.command
     , er.percent_complete
     , dateadd (ms, er.estimated_completion_time, getdate()) AS [Прогноз завершения]
     , er.status
     , osth.os_thread_id
     , ost.pending_io_count
     , ost.scheduler_id
     , osth.creation_time
     , ec.last_read
     , ec.last_write
     , s.text
     , owt.exec_context_id
     , owt.wait_duration_ms
     , owt.wait_type
FROM   master.sys.dm_os_tasks AS ost
JOIN   master.sys.dm_os_threads AS osth ON ost.worker_address = osth.worker_address
AND    ost.pending_io_count > 0 AND ost.session_id IS NOT NULL
JOIN   master.sys.dm_exec_connections AS ec ON ost.session_id = ec.session_id
CROSS  APPLY master.sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS s
JOIN   master.sys.dm_os_waiting_tasks AS owt ON ost.session_id = owt.session_id
AND    owt.wait_duration_ms > 0
JOIN   master.sys.dm_exec_requests AS er ON ost.session_id = er.session_id
AND    er.percent_complete > 0
ORDER BY ost.session_id
GO

Так же можно получить информацию только для конкретного id сессии (в текущем примере используется id сессии = 99):

-- Процент исполнения длительного запроса ввода-вывода 
SELECT ost.session_id
     , DB_NAME(ISNULL(s.dbid,1)) AS dbname
     , er.command
     , er.percent_complete
     , dateadd (ms, er.estimated_completion_time, getdate()) AS [Прогноз завершения]
     , er.status
     , osth.os_thread_id
     , ost.pending_io_count
     , ost.scheduler_id
     , osth.creation_time
     , ec.last_read
     , ec.last_write
     , s.text
     , owt.exec_context_id
     , owt.wait_duration_ms
     , owt.wait_type
FROM   master.sys.dm_os_tasks AS ost
JOIN   master.sys.dm_os_threads AS osth ON ost.worker_address = osth.worker_address
AND    ost.pending_io_count > 0 AND ost.session_id IS NOT NULL
JOIN   master.sys.dm_exec_connections AS ec ON ost.session_id = ec.session_id
CROSS  APPLY master.sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS s
JOIN   master.sys.dm_os_waiting_tasks AS owt ON ost.session_id = owt.session_id
AND    owt.wait_duration_ms > 0
JOIN   master.sys.dm_exec_requests AS er ON ost.session_id = er.session_id
AND    er.percent_complete > 0
AND ost.session_id = 99
ORDER BY ost.session_id
GO
Запись опубликована в рубрике В помощь администратору с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: