代码之家  ›  专栏  ›  技术社区  ›  Jeff Meatball Yang

如何记录存储过程的频率和上次使用时间?

  •  3
  • Jeff Meatball Yang  · 技术社区  · 15 年前

    我想知道一组存储过程的运行频率以及最后一次使用它们的时间。

    我正在考虑将调用添加到数据库中每个存储过程的顶部,以插入/更新表,其架构如下:

    SprocName    ExecCount   LastExec
    ----------------------------------
    GetCompany   434         2009-03-02
    ExportDist   2           2008-01-05
    

    显然,向每个存储过程中添加代码并不是很有效。

    是否有SQL Server 2005的内置功能可以帮助您?

    还是有更好的方法?

    5 回复  |  直到 15 年前
        1
  •  3
  •   AdaTheDev    15 年前

    有一个msdn博客 here 这涉及到各种选择。对于SQL 2005,这可以归结为:

    • 执行服务器端跟踪,注意这不是轻量级选项 做
    • 更改存储过程以包括执行的日志记录
        2
  •  2
  •   databyte    15 年前

    您可能需要检查表sys.dm_exec_query_stats的内容。

    这是一篇类似的博文: http://blog.sqlauthority.com/2008/03/22/sql-server-2005-find-highest-most-used-stored-procedure/

        3
  •  1
  •   Iain Hoult    15 年前

    我找到了一个 thread 在一个讨论使用的论坛上 sys.syscacheobjects 找出答案????

        4
  •  1
  •   jvanderh    15 年前

    我的回答经验不多,但我认为这里显示的其他选项(如跟踪)会损害性能,而在每个过程的顶部添加一行在执行过程中会非常轻量级(根据您拥有的数量,即使是很难的工作)。

    我将构建一个新的SP,它记录并将调用的SP的名称作为参数,并具有插入或更新的逻辑。这样,您只需向另一个SP添加一行,并将其名称作为参数传递。

        5
  •  1
  •   John Sansom    15 年前

    实现目标的最准确方法是使用存储过程中内置的自定义日志记录解决方案。

    您可以使用其他人回避的SQL Server动态管理视图(DMV),大致了解正在您的服务器上执行的查询/存储过程,但是这些DMV的实际用途是提供对性能优化的深入了解,而不是提供审核跟踪。

    例如: How to identify the most costly SQL Server queries using DMV’s

    有关DMV提供的数据(sys.dm_exec_query_stats等)仅详细说明当前存储在SQL Server计划缓存中的查询计划,因此只能提供服务器活动的有限透视图。

    SQL Server联机丛书: sys.dm_exec_query_stats