摘要
对于使用SQL server和.net分析简单数据的最简单方法,我提出了一些建议。
详细信息
非常简单的数据-只是需要非常简单的方法来分析(用我简单的大脑)
我有一个Server表:
(Int)
这个表记录了在各种应用程序中运行各种方法所需的时间。此表可能有数万行。我想很容易地从中提取有用的信息(其中一些是实时的)。我不知道做这件事的最好办法。我想要的这类数据是:
数据.方法调用的平均时间-十大最慢的方法调用-十大最快的方法调用
指的是:最后一分钟、最后一小时、最后一天、最后一周、最后十周的每一天。
申请:-所有-每个单独
发布于 2009-04-25 21:28:09
我认为ojblass指的是您在问题中遗漏的DataTime字段。
misleading中的实际时间戳数据类型在名称上具有误导性。这与日期和时间无关。它是一个二进制的“版本号”。它主要用于在更新表中的行时处理并发问题,但对于任何分析任务都是无用的。
我建议你改进一下你的列名。调用列"DateTime“是令人困惑的,如果您不小心的话,可能会给您编写查询带来一些麻烦。
不管怎样..。如果直接用TSQL编写,您要查找的查询范围从简单到相当复杂。
下面是一些示例(我还没有检查这些语法,因此它们最多是“近似的”):
特定方法的平均时间
select avg(TimeInMs) as AvgTime from Table
where ApplicaitonName = @ApplicationName特定方法在最后1分钟内的平均时间
select avg(TimeInMs) as AvgTime from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -1, getdate())您最终会想要为其中的大多数编写存储过程。你提到的一些查询需要分组等等.如果你走这条路,我建议你买一本关于TSQL的书。
如果您在应用程序中使用LINQ执行此操作,则不会有太大的不同,但通常LINQ更容易编写(当然,这是有争议的)。
下面是两个在C#中使用LINQ的查询(同样,我还没有测试这些查询,所以我可能会犯一些小语法错误)。
var ctx = new MyDataContext();
var q = (from item in ctx.Table
where item.ApplicationName == "MyApplication"
select item.TimeInMs).Average();
var ctx = new MyDataContext();
var q = (from item in ctx.Table
where item.ApplicationName == "MyApplication" &&
item.DateTime <= DateTime.Now.AddMinutes(-1)
select new item.TimeInMs).Average();如何进行分析取决于您所使用的技术以及您对结果所做的操作。
更新:回答评论中的后续问题:
我想不出通过在另一个表中存储所需的时间间隔(游标和通过Execture命令动态构造的TSQL )来处理它的好方法。
在TSQL中,获得所需结果的更简单的查询看起来可能是这样(我并不主张这是“最佳”方式,但它工作得很快,而且速度相当快)。
select avg(TimeInMs) as AvgTime, 'Last 1 minute' as TimePeriod from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -1, getdate())
union
select avg(TimeInMs) as AvgTime, 'Last 2 minutes' as TimePeriod from Table
where ApplicaitonName = @ApplicationName and
[DateTime] >= DATEADD(minute, -2, getdate())
-- //repeat union as many times as needed for each time period发布于 2009-04-25 20:17:53
如果不添加时间戳信息,就无法进行有意义的分析。最多可以创建查询,以汇总应用程序性能的统计信息。
select count(*) from table_name where ApplicationName = "BAR.EXE";
select sum(TimeInMs) from table_name group by ApplicationName;除了编写代码来除以这些数字之外,您不能做很多事情。
Update:使用时间戳信息,您可以调整上述示例的where子句以选择您感兴趣的范围。考虑到您问题的不精确性,我可能建议将数据导入Excel (我没有安装Excel ),并以各种方式对数据进行按摩,而不是直接处理SQL。
https://stackoverflow.com/questions/789648
复制相似问题