TSQL动态确定SP / Function的参数列表

时间:2010-06-24 18:21:19

标签: sql tsql stored-procedures parameters

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

我不知道如何做到这一点,但如果我是你,我会考虑改为追踪。您可以使用SQL Server Profiler仅收集您指定的存储过程的信息(使用过滤器)。您可以将输出发送到表格,然后根据您的心脏内容查询结果。输出可以包括IO信息,传递的参数,客户端用户ID和机器等等。

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

这是一个可能有用的链接:

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

答案 2 :(得分:0)

对我的情况看来最好的解决方案是只进行分析收集SP:启动和SP:完成并编写一些TSQL来迭代数据并填充跟踪表。

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

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