21.4.23

Tips for DBA: Percentage of work completed for DBA commands

Как вы наверняка знаете, повторное исполнение команды KILL для сеанса показывает процент завершения отката прерванной инструкции. Это замечательная возможность, которая позволяет сберечь нервы администратора баз данных. Однако, есть и другие долгоиграющие команды, процент завершения которых тоже интересно было бы отслеживать. Ну, например, примерно таким же образом, как сообщает о прогрессе своей работы команда BACKUP. Вашему вниманию предлагается сценарий, который позволяет отслеживать прогресс исполнения следующих команд:

  • 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

В сценарии использованы следующие административные представления и функции:

sys.dm_os_tasks
sys.dm_os_threads
sys.dm_exec_connections
sys.dm_exec_sql_text
sys.dm_os_waiting_tasks
sys.dm_exec_requests

Текст сценария:

-- Процент исполнения длительного запроса ввода-вывода
SELECT ost.session_id
     ,
DB_NAME(ISNULL(s.dbid,1)) AS dbname
     , er.command
     , er.percent_complete
     , 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

Комментариев нет:

Отправить комментарий