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

tsql动态确定sp/函数的参数列表

  •  2
  • Chad  · 技术社区  · 14 年前

    我想写一个通用的日志,将其截取到一组存储过程中。我写这篇文章是为了定量衡量我们的前端用户体验,因为我知道前端软件使用的是哪个SP,以及它们是如何使用的。我想用这个来收集一个基线,在我们开始性能调整之前,然后显示调整的结果。

    我可以从@@procid动态提取对象名,但我无法确定所有传递的参数及其值。有人知道这是否可行吗?

    编辑:将我的回答标记为结束此问题的答案。似乎扩展事件对性能的影响最小,但是我不确定最小的分析和扩展事件之间是否有实质性的区别。也许是雨天的事。

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

    我可以在不解析过程的文本的情况下(至少在SQL Server 2005中)获取该过程获取的参数的详细信息。

    select * from INFORMATION_SCHEMA.PARAMETERS where 
    SPECIFIC_NAME = OBJECT_NAME(@@PROCID)
    

    我想这意味着,使用一些适当的Madcap动态SQL,我也可以提取它们的值。

        2
  •  0
  •   Quesi    14 年前

    我不知道该怎么做,但如果我是你,我会考虑追踪。可以使用SQL Server事件探查器仅收集指定存储过程的信息(使用筛选器)。您可以将输出发送到一个表,然后将结果查询到您的心脏内容。输出可以包括IO信息、传递的参数、客户机用户ID和机器等等。

    运行跟踪之后,您可以将结果聚合到报告中,这些报告将显示调用过程的次数、使用的参数等。

    下面是一个可能有帮助的链接:

    http://msdn.microsoft.com/en-us/library/ms187929.aspx

        3
  •  0
  •   Chad    14 年前

    看来,对于我的情况,最好的解决方案是只收集sp:starting和sp:completed,并编写一些tsql来迭代数据并填充跟踪表。

    我个人更喜欢代码生成,但在政治上,我工作的地方他们更喜欢这个解决方案。我们在日志记录中丢失了一些粒度,但这是解决我的问题的一个足够的解决方案。

    编辑:这是一个好的解决方案。即使只分析这两个项目,性能也会显著降低。:(我希望我们有MSFT提供的方法来分析不会降低生产性能的工作负载。甲骨文对此有很好的解决方案,但它也有自己的权衡。我希望看到MSFT能实现类似的功能。新的DMV和扩展事件有助于关联项目。再次感谢马丁的链接。