SQL Server Management Studio, jak skrócić czas wykonywania do milisekund


220

Kiedy przesyłam partię (np. Wykonuję zapytanie) w SSMS, widzę czas potrzebny do wykonania na pasku stanu. Czy można skonfigurować SSMS, aby wyświetlał czas zapytania z rozdzielczością milisekund?

Oto pasek, o którym mówię, z fragmentem zainteresowania zaznaczonym na czerwono:

wprowadź opis zdjęcia tutaj


3
Naprawdę nie odpowiadając na twoje pytanie, ale możesz użyć SQL Server Profiler (narzędzie rejestrujące), aby sprawdzić czas trwania zapytania. Czas trwania jest mierzony w milisekundach.
AGuyCalledGerald

Odpowiedzi:


66

Walczyłem z tym, dopóki nie znalazłem tego ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Ponadto, jeśli otworzysz okno Właściwości, możesz znaleźć magiczny „Czas połączenia”, który może dać ci trochę czasu wykonania ... Mam nadzieję, że to pomoże ...


18
Część dotycząca okna Właściwości jest naprawdę odpowiedzią na ten wątek. „Elapsed Time” siedzi tam i patrzy ci w twarz.
Eric

A teraz ustawiam tę odpowiedź jako odpowiedź zaakceptowaną, ponieważ jest najbardziej poprawna.
Michael Goldshteyn,

363

Co chcesz zrobić, to:

set statistics time on

-- your query

set statistics time off

Dzięki temu wynik będzie wyglądał mniej więcej tak w oknie Wiadomości:

Czasy wykonania programu SQL Server: czas procesora = 6 ms, czas, który upłynął = 6 ms.


1
Ale to powoduje ustawienie czasu w oknie Wiadomości, co oznacza, że ​​muszę ręcznie przejść do niego po wykonaniu zapytania. Ponadto wyniki wydają się nie mieć sensu, na przykład: czas procesora = 1357 ms, czas, który upłynął = 169 ms. Jak to się sumuje, nawet jeśli mam 8 rdzeni z hiperwątkiem (tj. 16 wirtualnych)?
Michael Goldshteyn

2
@MichaelGoldshteyn, jeśli chodzi o to, dlaczego czas procesora jest dłuższy, to dlatego, że masz procesor wielordzeniowy lub hiperwątkowy.

25
@MichaelGoldshteyn 1357/8 = 169,625. Zbieg okoliczności?
Dan J

3
@ DanJ, ​​DB nie robi wszystkiego od pamięci. Często we / wy jest zaangażowany, a we / wy oznacza więcej czasu, który upłynął.
Michael Goldshteyn

9
@binki Masz rację, że mój 1555-letni komentarz był niedokładny.
benizi

125

Włącz statystyki klienta , wykonując jedną z następujących czynności:

  • Menu: Zapytanie> Uwzględnij statystyki klienta
  • Pasek narzędzi: Kliknij przycisk (obok Uwzględnij rzeczywisty czas wykonania)
  • Klawiatura: Shift-Alt-S

Następnie otrzymujesz nową kartę, która rejestruje czasy, dane IO i liczby wierszy itp. Dla (do) ostatnich 10 ekscesów (plus średnie!):

wprowadź opis zdjęcia tutaj


Jest to to samo, co odpowiedź @Ymagine First z listopada'12. Zobacz odpowiedź powyżej ...
Bogdan Bogdanov

W tej witrynie (jak na ironię) wystąpił wówczas błąd SQL, więc wyodrębniłem kluczowe informacje z pamięci podręcznej Google i opublikowałem jako nową odpowiedź. Nie chciałem ukraść kredytu i być może powinienem był zredagować oryginalną odpowiedź.
NickG

Wygląda na to, że nie mam wystarczającej liczby punktów do edycji pytań, więc prawdopodobnie dlatego tego nie zrobiłem.
NickG

3
Do Twojej wiadomości statystyki czasowe podano w milisekundach: brentozar.com/archive/2012/12/…
congusbongus,

17

Aby uzyskać czas wykonania jako zmienną w twoim proc:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

I zobacz to

Mierzenie wydajności zapytania: „Koszt zapytania planu wykonania” w porównaniu do „zajętego czasu”


1
Datepart NS reprezentuje nanosekundę, dla milisekund użyj MS
Milan Matějka

12

Chciałem tego samego i natknąłem się na następujący link, który był genialny:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Pokazuje trzy różne sposoby pomiaru wydajności. Wszystko dobre dla własnych mocnych stron. Ten, który wybrałem, był następujący:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Wstaw zapytanie tutaj

SET @ Time2 = GETDATE ()

WYBIERZ DATEDIFF (MILLISECOND, @ Time1, @ Time2) AS Elapsed_MS


Spowoduje to wyświetlenie wyników zapytania, a następnie czasu do jego ukończenia.

Mam nadzieję że to pomoże.


Znalazłem to niestałe, czasem pokazuje czas, a czasem tylko 0.
RMati

2

Nie wiem o rozszerzeniu paska informacji.

Możesz jednak ustawić czasy domyślnie dla wszystkich zapytań wyświetlanych na karcie „Wiadomości”.

Znajdując się w oknie zapytania, przejdź do pozycji menu zapytania, wybierz „opcje zapytania”, następnie wybierz „zaawansowane” w grupie „Wykonanie” i zaznacz pola wyboru „ustaw czas statystyki” / „ustaw statystyki we / wy”. Wartości te pojawią się w obszarze komunikatów dla każdego zapytania bez konieczności włączania i wyłączania ustawionych statystyk.

Możesz także użyć Shift + Alt + S, aby włączyć statystyki klienta w dowolnym momencie


0

Możesz wypróbować ten kod:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.