@SolomonRutzky ma rację.
SQL Profiler Trace to jedyny sposób ( bez edycji Sproc ).
Edytuj swój proces:
Jednak kolejną najlepszą rzeczą jest nieznaczna edycja danego Sproc.
Zadeklaruj zmienną DateTime na początku bieżącym czasem.
Na końcu Sproc, zarejestruj Sproc_StartTime, Sproc_EndTime i wartości parametrów w tabeli.
Możesz nawet dodać pewną logikę warunkową, aby użyć funkcji DateDiff () do rejestrowania tylko wtedy, gdy dłuższy czas był używany do przetwarzania Sproc.
Może to przyspieszyć twój Sproc i zmniejszyć zużycie miejsca przez twoją tabelę logów, gdy Sproc jest na szczycie.
Następnie masz plik dziennika, który możesz przeszukiwać i analizować przez miesiące (bez śledzenia uruchomionego w Prod).
Po zakończeniu dostrajania Sproc, po prostu usuń kilka dodanych linii logiki Timer i Logger.
Wartości parametrów planu buforowanego:
Powinienem wspomnieć, że uwzględnienie bieżących wartości parametrów planu buforowanego w tabeli dziennika może pomóc w ustaleniu, czy zwiększają one problem z wydajnością .
Używam, OPTIMIZE FOR
aby ustawić sposób obsługi parametrów w moim Sproc, gdy wiem, że będzie on używany do krojenia i krojenia danych.
Uważam, że użycie OPTIMIZE FOR
daje spójne i szybkie wyniki przy użyciu tego samego Sproc z parametrami jak filtry opcjonalne .
To zdecydowanie jedna zmienna mniejsza do rozważenia, jeśli określisz, jak sobie z nimi poradzić.
Poniżej znajduje się przykład tego, co możesz dodać na dole swojej instrukcji Select:
OPTION(OPTIMIZE FOR (@SiteID = 'ABC',
@LocationID = NULL, @DepartmentID = NULL,
@EmployeeID = NULL, @CustomerID = NULL,
@ProductID = NULL, @OrderID = NULL, @OrderStatusID = NULL,
@IncludedCancelledOrders = 1,
@StartDate UNKNOWN, @EndDate UNKNOWN))