我希望能够以某种方式标记SQL查询,因此我可以将查询执行与触发查询的Web请求相关联。我已经有了一个唯一的请求ID,我标记了我的日志和其他监控,因此我可以轻松地对网络日志和新文件进行完整的跟踪。例如。
但是当我查看长时间运行的SQL查询的报告时,我无法将其追溯到触发SQL查询的请求。我真的希望能够以某种方式用我的请求ID标记查询。
我在网上找不到任何东西。当我搜索时,我发现有关在SQL中存储标签和标签云的博客。不是我真正需要的。
希望这个问题有道理。
答案 0 :(得分:0)
这是一篇非常有趣的帖子......
我希望,在存储过程中添加一个额外的可空参数将确保探查器将捕获在调用期间(在跟踪中)传递的唯一ID,无论您是否在过程内使用该参数(即做一些有意义的事情......比如插入具有唯一ID,过程名称,时间戳等的审计表。 但我认为这将使生活变得困难,因为你现在必须更新所有程序。
如果您已经启用了日志记录(Web服务器)并且它在请求(日志文件)中捕获了相同的唯一ID以及时间戳,那么您可能可以编写一个小的实用程序应用程序来读取日志文件并查找匹配的条目仅在时间戳的跟踪表中。 唯一可能出错的是,如果您的Web服务器和数据库服务器有不同的时间(您需要相应地抵消计算)。
我不知道这是否会有所帮助,但这肯定是一个非常有趣的项目,我希望有人经历过这个事情,并提出了一个很好的解决方案。 如果存在这样的解决方案,将密切关注这篇文章....
一切顺利......
答案 1 :(得分:0)
如果我理解正确,您希望在Activity Monitor中跟进查询执行。但您考虑过使用DMV或SQL PROFILER吗?
在我看来,你最好的选择是将它包装在存储过程中。这样,您就可以仅为此对象过滤跟踪。这是一个简单的select和相同的select包含在名为sproc1的存储过程中的示例:
正如您在此图像中所看到的,您可以启动SQL PROFILER跟踪并在ObjectName上对其进行过滤。然后,您可以添加其他列,如CPU,StartTime,...
如果您不能使用存储过程,那么我建议在exec之前插入注释,如下所示:
/* ID1234 */
select * from table1
然后以相同的方式使用SQL PROFILER,但现在使用您的ID
过滤TextData
结果如下: