Оценка продолжительности запроса в SQL Server - PullRequest
5 голосов
/ 06 марта 2009

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

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

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

Ответы [ 3 ]

5 голосов
/ 06 марта 2009

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

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

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

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

2 голосов
/ 23 июля 2013

Связанный:

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

1 голос
/ 06 марта 2009

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

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

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

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

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

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

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

...