IIS Log Parser - нужен запрос, чтобы найти «общее количество запросов, занимающих> x секунд» / «общее количество запросов», сгруппированные по URL - PullRequest
2 голосов
/ 12 января 2011

Я поддерживаю приложение, в котором иногда возникают проблемы с производительностью.Клиент хочет знать, как часто страница медленная.

т.е. общее количество раз, когда страница заняла больше, чем x секунд / общее число запросов на страницу

Я хотел бы написать один запросчтобы получить нужные данные.

Что-то подобное в SQL, вероятно, будет работать, но не работает в анализаторе журнала IIS.

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

1 Ответ

5 голосов
/ 12 января 2011

Проблема в том, что вам нужно два запроса.

  • Один для подсчета общего количества запросов на страницу независимо от времени, потраченного

    SELECT cs-uri-stem, COUNT(*) AS all-requests 
    FROM ex*.log 
    GROUP BY cs-uri-stem
    
  • Один для подсчета количества страниц, где время-taken> X секунд

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

Для того, чтобы получить результат, требуется JOIN:

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 

К сожалению, в LogParser нет поддержки JOIN.

Что вы можете сделать, это импортировать результаты обоих запросов в базу данных SQL и выполнить запрос там:

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 
...