2011-01-11 6 views
2

Я поддерживаю приложение, которое периодически вызывает проблемы с производительностью. Клиент хочет знать, как часто страница работает медленно.IIS Log Parser - Требуется запрос, чтобы найти «общее количество запросов> хсек»/«Всего запросов», сгруппированных по URL-адресу

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

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

Что-то вроде этого в SQL, вероятно, будет работать, но не работает в парсере IIS Log.

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

ответ

5

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

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

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

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

В результате у вас возникнет необходимость в ПРИСОЕДИНЕНИИ:

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 

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

Что вы можете сделать, это импортировать результаты обоих запросов в базу данных 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