2009-03-05 18 views
5

Widziałem w Oracle 10g funkcję, która szacuje pozostały czas dla długo działającego zapytania i zastanawiałem się, czy jest to również możliwe w SQL Server (przynajmniej w 2008?)?Szacowanie czasu trwania kwerendy w SQL Server

Załóżmy, że mam bardzo dużą tabelę z dziesiątkami milionów wierszy (dobrze zindeksowanych itp.) I muszę wyszukać pewne konkretne wiersze. Wiem, że zajmie to dużo czasu i jestem z tym fajny, ale chciałbym przedstawić użytkownikowi jakiś pasek postępu.

Jak mogę pokazać postęp?

+0

Jeśli tabela (jedna) jest dobrze zindeksowana i szukasz "niektórych" konkretnych wierszy (mam na myśli kilka) To musi natychmiast zwrócić wiersze. W każdym razie miłe pytanie!;-) – FerranB

+1

nawet z dobrymi indeksami w DataWarehouses niektóre zapytania generujące raporty mogą zająć więcej niż minutę. –

Odpowiedz

5

Zapomniałbym o tym i po prostu kręcę kółkiem!

Poważnie, aby jeszcze bardziej rozwinąć pomysł MrTelly, istnieją dynamiczne widoki zarządzania, które mogą dać ci średni czas wykonania pewnych zapytań - może to może cię gdzieś zabrać.

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

edit: Widziałem procent kompletne w procedurze sp_whoisactive od Adama machanic. Może to inne miejsce do zaglądania. SQL 2016 ma magazyn zapytań, który utrzymuje informacje o pamięci podręcznej planu - substytut pamięci podręcznej planu dmv, który jest czyszczony przy ponownym uruchomieniu komputera.

+0

Świetny pomysł. Możesz uzyskać szacunkowy plan zapytania na podstawie zapytania użytkownika, a następnie sprawdzić pamięć podręczną planu, aby sprawdzić, czy ten plan już istnieje i jak długo trwa średni czas. To niechlujne, a to doda obciążenie serwerowi, ale zadziała. –

1

Nie jestem świadomy narzędzia, które zrobi to automatycznie, ale jest kilka alternatyw. Prześlij zapytanie do bloków ...

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

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

po ukończeniu każdego sql, aby zaktualizować pasek postępu.

Można również nagrać długość czasu dla każdego z wybranych, przechowywać te wartości może na podstawie dla każdego użytkownika. Następnie użyj tych informacji, aby zwrócić długość paska postępu.

Oba te podejścia są dość kludgy, mam nadzieję, że ktoś zna lepsze podejście.

Oczywiście można spróbować odszyfrować plan zapytania i dokonać oceny na podstawie tego, ale w kodzie, który byłby trudny.

2

pokrewne:

Dzisiejsze systemy baz danych, mało zwrotne użytkownika/DBA na ile wykonania kwerendy SQL została zakończona. Dla długich uruchomionych zapytań, taka informacja zwrotna może być bardzo przydatna, na przykład, aby pomóc zdecydować, czy zapytanie powinno zostać zakończone, czy też pozwolić na wykonanie do zakończenia. Chociaż powyższe wymaganie jest łatwe do wyrażenia, opracowanie niezawodnego wskaźnika postępu wykonywania kwerendy jest trudne do spełnienia . W tym artykule badamy powyższy problem i przedstawiamy techniki, które mogą stanowić podstawę do efektywnego szacowania postępów. Wyniki eksperymentalnego sprawdzania poprawności naszych technik w Microsoft SQL Server 2003 są obiecujące.

Powiązane problemy