Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę się zalogować i znaleźć najdroższe zapytania?

  1. Użyj programu SQL Server Profiler (w menu narzędzi w SSMS), aby utworzyć ślad, który rejestruje te zdarzenia:

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. Możesz zacząć od standardowego szablonu śledzenia i przyciąć go. Nie określiłeś, czy dotyczy to konkretnej bazy danych, czy całego serwera, jeśli dotyczy to konkretnych baz danych, dołącz kolumnę DatabaseID i ustaw filtr na swoją bazę danych (SELECT DB_ID('dbname') ). Upewnij się, że dla każdego zdarzenia uwzględniono logiczną kolumnę danych Odczyty. Ustaw śledzenie, aby logować się do pliku. Jeśli zostawiasz ten ślad, aby działał bez nadzoru w tle, dobrym pomysłem jest ustawienie maksymalnego rozmiaru pliku śledzenia, powiedzmy 500MB lub 1GB, jeśli masz dużo miejsca (wszystko zależy od tego, ile aktywności jest na serwerze, więc będziesz musiał to ssać i zobaczyć).

  3. Uruchom na krótko śledzenie, a następnie wstrzymaj go. Przejdź do Plik->Eksportuj->Definicja śledzenia skryptu, wybierz wersję bazy danych i zapisz do pliku. Masz teraz skrypt sql, który tworzy ślad, który ma znacznie mniejsze obciążenie niż uruchamianie przez GUI profilera. Po uruchomieniu tego skryptu wygeneruje on identyfikator śledzenia (zwykle @ID=2 ); zanotuj to.

  4. Gdy masz plik śledzenia (.trc) (albo śledzenie zostało zakończone z powodu osiągnięcia maksymalnego rozmiaru pliku, albo zatrzymałeś uruchomione śledzenie za pomocą

    EXEC sp_trace_setstatus @ID, 0
    EXEC sp_trace_setstatus @ID, 2

Możesz załadować ślad do profilera lub użyć ClearTrace (bardzo przydatne) lub załadować go do tabeli w następujący sposób:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Następnie możesz uruchomić zapytanie, aby zagregować dane, takie jak to:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Po zidentyfikowaniu kosztownych zapytań możesz wygenerować i zbadać rzeczywiste plany wykonania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Driver.getConnection zawiesza się przy użyciu sterownika SQLServer i Javy 1.6.0_29

  2. Zero impasu SQL z założenia - jakieś wzorce kodowania?

  3. Jak wybrać dane tabeli z innej bazy danych w SQL Server?

  4. Jak wyświetlić listę wszystkich kluczy obcych odwołujących się do danej tabeli w SQL Server?

  5. Utworzyć wyzwalacz, aby rejestrować kod SQL, którego dotyczy tabela?