2010-06-24 30 views
2

我想写一个通用日志记录片段 - 它存储到一个存储过程的集合。我写这篇文章是为了对我们的前端用户体验进行定量衡量,因为我知道前端软件使用哪些SP以及如何使用它们。我希望在开始进行性能调整之前使用它来收集基线,然后展示调整的结果。TSQL动态确定SP /功能的参数列表

我可以动态地从@@ PROCID拉对象名称,但我一直无法确定传递的所有参数及其值。任何人都知道这是可能的吗?

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

回答

0

出现最好的解决方案,我的情况是做分析收集只SP:开始和SP:完成并写入一些TSQL遍历数据和填充跟踪表。

我个人倾向于代码生成这一点,但在政治上在那里我的工作他们喜欢这种解决方案。我们在记录中丢失了一些粒度,但这是解决我的问题的充分方法。

编辑:这是结束一个确定的解决方案。即使只分析这两项,也会使性能显着降低。 (我希望我们有一个MSFT提供了一种方式来描述不影响生产性能的工作负载,甲骨文有很好的解决方案,但它也有它的折衷,我很高兴看到MSFT实现类似的东西。 DMV和扩展事件有助于关联项目。再次感谢链接Martin。

+0

你是什么版本的SQL Server? – 2010-06-25 21:11:49

+0

@Martin 2008 R1 – Chad 2010-06-28 20:00:18

+0

在这种情况下,您可以使用比SQL跟踪http://msdn.microsoft更轻量更灵活的扩展事件。com/en-us/library/dd822788%28SQL.100%29.aspx – 2010-06-28 22:42:01

0

我不知道如何做到这一点从我的头顶,但我会考虑运行的轨迹,而不是如果我是你。您可以使用SQL Server Profiler仅收集您指定的存储过程(使用过滤器)的信息。您可以将输出发送到表格,然后将结果查询到您的内容。输出可以包括IO信息,传递了什么参数,客户端用户标识和计算机等等。

运行轨迹可以聚集结果到报告中,将显示一个程序调用多少次后,用什么参数,等等

这里是一个链接,可能会有帮助:

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

+0

我很欣赏评论!是的,我一直在从目前的痕迹中提取一些,但希望找到一个不太干扰的方式来做到这一点。可以达到我想要的代码生成只是希望有一个更简单的方法来做到这一点再次感谢 – Chad 2010-06-24 19:02:51

2

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

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

我想这意味着我可以用适当的madcap动态SQL来提取它们的值。

+1

+1 - 。!我打我自己的永远注意到,INFORMATION_SCHEMA视图 – Thomas 2010-06-24 21:04:30

+0

我希望我传递的价值观,不只是参数类型的信息。感谢您的帖子。 – Chad 2010-07-06 16:13:19