2011-01-11 3 views
2

Ich unterstütze eine Anwendung mit gelegentlichen Leistungsproblemen. Der Client möchte wissen, wie oft eine Seite langsam ist.IIS-Log-Parser - Need-Abfrage, um "Gesamtzahl der Anforderungen, die x Seks dauern"/"Gesamtzahl der Anforderungen" nach URL gruppiert

das heißt insgesamt mal eine Seite nahm größer als x Sekunden/Gesamtzahl der Anfragen für die Seite

Ich mag würde eine einzelne Abfrage schreiben, um die gewünschten Daten zu holen.

So etwas in SQL würde wahrscheinlich funktionieren, funktioniert aber nicht in IIS-Log-Parser.

select URL, count(case when time > 100 then 1 else null end), count(*) 
from table1 
group by URL 

Antwort

5

Das Problem hier ist, dass Sie zwei Abfragen benötigen.

  • One die Gesamtzahl der Anfragen pro Seite zählen, unabhängig von

    SELECT cs-uri-stem, COUNT(*) AS all-requests 
    FROM ex*.log 
    GROUP BY cs-uri-stem 
    
  • man die Anzahl der Seiten der Zeit genommen, wo zeit genommen> X Sekunden

    SELECT cs-uri-stem, COUNT(*) as total-requests 
    FROM ex*.log 
    WHERE time-taken > 1000 <- time_taken is milliseconds 
    GROUP BY cs-uri-stem 
    
zu zählen

Das Ergebnis, nach dem Sie suchen, würde einen JOIN erfordern:

SELECT a.cs-uri-stem, COUNT(*) as total-requests, b.all-requests 
FROM ex*.log AS a 
JOIN (
    SELECT cs-uri-stem, COUNT(*) AS all-requests 
    FROM ex*.log 
    GROUP BY cs-uri-stem 
) AS b ON b.cs-uri-stem = a.cs-uri-stem 
WHERE a.time-taken >1000 
GROUP BY a.cs-uri-stem 

Leider gibt es keine Unterstützung für JOINs in LogParser.

Was Sie tun können, ist es, die Ergebnisse der beiden Abfragen in eine SQL-Datenbank importieren und die Abfrage ausführen es:

SELECT a.cs-uri-stem, COUNT(*) as total-requests, b.all-requests 
FROM long_running_pages AS a 
JOIN all_pages_grouped b ON (a.cs-uri-stem = b.cs-uri-stem) 
GROUP BY a.cs-uri-stem