代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

当我只有失败调用的结果时,计算中断的时间跨度

  •  0
  • SqlRyan  · 技术社区  · 14 年前

    这意味着我得到了一个如下所示的值表:

    ReportedOutage
    -----------------------
    2010-07-30 06:23:18.093
    2010-07-30 06:23:18.623
    2010-07-30 06:23:18.720
    2010-08-02 14:28:07.123
    

    理想情况下,我希望运行报告并看到如下内容:

    OutageStart              OutageEnd
    -----------------------  -----------------------
    2010-07-30 06:23:18.093  2010-07-30 06:23:18.720
    2010-08-02 14:28:07.123  2010-08-02 14:28:07.123
    

    由于日志中只有失败的记录,如何计算各种中断的长度?我可以从 MIN(Reported)

    你有什么想法吗?我意识到我可以创建一个过程,每分钟检查一次站点,并记录中断和成功的情况,这会使这变得更容易,但我正在尝试在添加另一个步骤之前利用现有的内容。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

    听起来你基本上需要猜测两次访问之间的最长时间。所以如果你 事实上 每10天只有一次访问,那么表中的所有内容都可以代表一次停机。。。但很可能没有。

    具体如何实现这一点取决于您的环境—我知道如何在C#中实现这一点,但我不想在纯SQL中尝试,例如:)

        2
  •  1
  •   Assaf    14 年前

    除非你有关于服务器被点击频率的其他信息,否则你无法回答你想要回答的问题。

    即使您有这些数据,对服务器中断进行严格的分析也并非易事:

    如果您有关于某个时间间隔(比如周一早上6点到7点)内站点历史上被攻击的频率的信息,您可以使用泊松过程对服务器故障的概率进行建模,并将其与该时间间隔内的数据进行拟合。这将为您提供在该时间间隔内发生停机的可能性,如果您正确地建模了停机的时间长度(或者猜对了),您可以得到给定一天中所有停机的预期持续时间。

    对于大多数应用程序来说,实现您在文章中提到的检查过程将更简单、更准确。