Оценка продолжительности запроса в SQL Server

StackOverflow https://stackoverflow.com/questions/617170

  •  03-07-2019
  •  | 
  •  

Вопрос

Я видел в Oracle 10g функцию, которая оценивает оставшееся время для долго выполняемого запроса, и мне было интересно, возможно ли это и в SQL Server (по крайней мере, в 2008 году?)?

Предположим, у меня есть очень большая таблица с десятками миллионов строк (хорошо проиндексированная и т.д.и т.д.), и мне нужно выполнить поиск по некоторым конкретным строкам.Я знаю, что это займет много времени, и меня это устраивает, но я хотел бы представить пользователю своего рода индикатор выполнения.

Как я могу показать прогресс?

Это было полезно?

Решение

Я бы забыл об этом и просто поставил вращающийся круг!

Если серьезно, то, если развить идею MrTelly дальше, существуют динамические представления управления, которые могут дать вам среднее время выполнения для определенных запросов - возможно, это поможет вам куда-то продвинуться.

http://msdn.microsoft.com/en-us/library/ms188754.aspx

Редактировать:Я видел процент завершения процедуры sp_whoisactive от Адама Маханика.Может быть, это еще одно место, куда стоит заглянуть.В SQL 2016 есть хранилище запросов, в котором сохраняется информация кэша плана - замена кэша плана dmv, который очищается при перезагрузке.

Другие советы

Похожие:

Современные системы баз данных практически не предоставляют пользователю / администратору базы данных обратной связи о том, какая часть выполнения SQL-запроса была завершена.Долгое выполнение запросов, такая обратная связь может быть очень полезно, например, для помогите решить запросе должны быть расторгнут или разрешено запускать к завершению.Хотя вышеуказанное требование легко выразить, разработка надежного индикатора прогресса выполнения запроса является сложной задачей.В этой статье мы изучаем вышеуказанную проблему и представляем методы, которые могут стать основой для эффективной оценки прогресса.Результаты экспериментальной проверки наших методов в Microsoft SQL Server являются многообещающими.

Мне не известен инструмент, который сделает это автоматически, но есть несколько альтернатив. Разбейте ваш запрос на блоки ...

select blah from table where IdRange between (1 and 100000)

select blah from table where IdRange between (100001 and 200000)

после завершения каждого sql обновите индикатор выполнения.

Или вы можете записать время, затраченное на каждый из ваших выборов, сохранить эти значения, возможно, для каждого пользователя. Затем используйте эту информацию для возврата длины индикатора выполнения.

Оба эти подхода довольно клёвые, надеюсь, кто-то знает лучший подход.

Конечно, вы можете попытаться расшифровать план запроса и принять решение на его основе, но в коде это будет сложно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top