【问题标题】:TSQL Dynamically determine parameter list for SP/FunctionTSQL 动态确定 SP/Function 的参数列表
【发布时间】:2011-03-07 23:14:43
【问题描述】:

我想将一个通用的日志记录片段写入存储过程的集合中。我写这篇文章是为了对我们的前端用户体验进行定量测量,因为我知道前端软件使用了哪些 SP 以及它们是如何使用的。我想在我们开始性能调整之前用它来收集基线,然后显示调整的结果。

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

编辑:将我的回复标记为关闭此问题的答案。似乎扩展事件是对性能影响最小的项目,但是我不确定最小分析和扩展事件之间是否存在任何实质性差异。也许是在下雨天。

【问题讨论】:

    标签: sql tsql stored-procedures parameters


    【解决方案1】:

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

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

    我想这意味着我可以通过一些适当的疯狂动态 SQL 来提取它们的值。

    【讨论】:

    • +1! - 我自责没注意到 INFORMATION_SCHEMA 视图。
    • 我想要传入的值,而不仅仅是参数类型信息。感谢您的帖子。
    【解决方案2】:

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

    运行跟踪后,您可以将结果汇总到报告中,显示过程被调用的次数、使用的参数等...

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

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

    【讨论】:

    • 感谢您的评论!是的,我目前一直在从痕迹中提取其中的一些内容,但希望能找到一种侵入性较小的方法来做到这一点。我可以通过代码生成实现我想要的。只是希望有一个更简单的方法来做到这一点。再次感谢。
    【解决方案3】:

    似乎对我的情况最好的解决方案是进行分析,只收集 SP:starting 和 SP:completed 并编写一些 TSQL 来遍历数据并填充跟踪表。

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

    编辑:这最终成为一个好的解决方案。即使仅对这两个项目进行概要分析,也会显着降低性能。 :( 我希望我们有一个 MSFT 提供的方法来分析不会降低生产性能的工作负载。Oracle 对此有很好的解决方案,但它也有它的权衡。我希望看到 MSFT 实现类似的东西。新的DMV 和扩展事件有助于关联项目。再次感谢 Martin 的链接。

    【讨论】:

    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2021-06-08
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多