2

我支持偶尔出现性能问题的应用程序。客户想知道一个页面多久变慢一次。

即一个页面花费的总时间大于 x secs / 页面的请求总数

我想编写一个查询来获取所需的数据。

SQL 中这样的东西可能会起作用,但在 IIS 日志解析器中不起作用。

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

1 回答 1

5

这里的问题是您需要两个查询。

  • 一个用于计算每页的请求总数,而不考虑花费的时间

    SELECT cs-uri-stem, COUNT(*) AS all-requests 
    FROM ex*.log 
    GROUP BY cs-uri-stem
    
  • 1 计算耗时 > 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 
于 2011-01-12T02:14:30.980 回答