2009-09-21 8 views
8

Próbuję rozwiązać this problem pomocą SQL Profiler (SQL 2008)Czy istnieje sposób filtrowania śledzenia programu SQL Profiler?

Po kilku dniach z systemem śledzenia produkcji, wreszcie błąd się ponownie, a teraz staram się zdiagnozować przyczynę. Problem polega na tym, że śledzenie ma 400k wierszy, z których 99,9% pochodzi z "Report Server", którego nie wiem nawet dlaczego jest włączony, ale wydaje się, że co pewien czas pinguje SQL Server ...

Czy istnieje sposób na odfiltrowanie niektórych zapisów ze śladu, aby móc spojrzeć na resztę?
Czy mogę to zrobić z bieżącym plikiem .trc, czy będę musiał ponownie uruchomić śledzenie?
Czy istnieją inne aplikacje do obejrzenia pliku .trc, który może dać mi tę funkcję?

Odpowiedz

18

Możesz załadować przechwycony ślad do programu SQL Server Profiler: Viewing and Analyzing Traces with SQL Server Profiler.

Lub można załadować do narzędzia takiego jak ClearTrace (wersja bezpłatna), aby wykonać analizę obciążenia.

można załadować do tabeli SQL Server tak:

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

Następnie można uruchomić kwerendę agregowanie danych, takich jak ten:

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 

zobacz także: MS SQL Server 2008 - How Can I Log and Find the Most Expensive Queries?

Często też konfiguruje się filtry przechwyconego śladu przed jego uruchomieniem. Na przykład często używanym filtrem jest ograniczenie tylko do zdarzeń, które wymagają więcej niż pewnej liczby odczytów, powiedzmy 5000.

+0

Hej Mitch, gdzie dostałeś takie funkcje. czy możesz zasugerować mi źródło tego i podobne funkcje? –

+0

różne źródła, w tym pierwszy link powyżej, blogi i książki. Wiele blogów MVP SQL Server zawiera przydatne informacje. –

3

Załaduj lokalnie .trc, a następnie użyj zapisz do bazy danych do lokalnej bazy danych, a następnie zapytaj o zawartość swoich serc.

3

Te sugestie są świetne w przypadku istniejącego śledzenia - jeśli chcesz odfiltrować śledzenie w momencie wystąpienia, możesz skonfigurować filtry zdarzeń na śladzie przed jego uruchomieniem.

Najbardziej przydatny filtr w moim doświadczeniu jest nazwa aplikacji - do tego trzeba upewnić się, że każdy ciąg połączenia używany do łączenia się z bazą danych ma odpowiednią wartość nazwa aplikacji w nim, czyli zrobić:

”.. .Server = MYDB1; Integrated Authentication = SSPI; Application Name = myPortal; ...”

następnie we właściwościach śladowych dla nowego śladu, wybierz zakładkę Events Selection, a następnie kliknij filtry kolumn ...

Wybierz filtr ApplicationName i dodaj wartości do LIKE, aby zawierały tylko wskazane połączenia, tj. Użycie MyPortal w polu LIKE będzie zawierał tylko zdarzenia dla połączeń, które mają tę nazwę aplikacji.

To powstrzyma cię od zebrania wszystkich błędów, które Reporting Services generuje i na przykład dokonuje kolejnej analizy o wiele szybciej.

Dostępnych jest również wiele innych filtrów, więc jeśli wiesz, czego szukasz, takich jak długie wykonanie (Czas trwania) lub duże IO (Odczyt, Zapis), możesz również filtrować na tym.

2

Od SQL Server 2005 można filtrować zawartość pliku .trc bezpośrednio z programu SQL Profiler; bez importowania go do tabeli SQL. Wystarczy postępować zgodnie z procedurą zasugerował tutaj:

http://msdn.microsoft.com/en-us/library/ms189247(v=sql.90).aspx

Dodatkowa podpowiedź: można użyć „%” jako zamiennika dowolnego filtra. Na przykład, jeśli chcesz filtrować według HOSTNAME jak SRV, możesz użyć SRV%.

Powiązane problemy