4

有一篇关于有用的 SQL 技巧的帖子。在这里,我将提到SQL Server Profiler工具,因为它帮助我减少了编写 SQL。我会编写 SQL 来询问、理解或猜测数据库业务逻辑。

Profiler 非常有用,尤其是在应用程序代码嵌入了 SQL 并且您想在尽可能短的时间内弄清楚它在做什么的情况下。(另外,您可能不知道应用程序环境中使用了哪个源代码版本,或者更糟糕的是,没有可用的源代码!)。

我想知道探查器是否有我可以挂钩的 API?

当我们想通过设置环境变量/标志(例如,PROFILER_ON=TRUE)来快速检查系统中调用了什么 SQL 时,这将非常有用。然后系统可以启动 SQL 分析器,设置各种跟踪属性,然后写入日志或表 - 支持团队可以查看这些属性。

我想编写一个组件来打开探查器并监视生产环境(在安静的时候),所以不能真正改变代码库(应用程序代码和 SQL 存储过程)。

4

4 回答 4

5

您可以利用Microsoft.SqlServer.Management.Trace命名空间对象;它们针对 SQL Profiler 提供的相同功能提供 API。这是针对数据库编写自己的 sql 脚本的替代方法。然而,就像 SQL Profiler 一样,这些对象在幕后所做的是执行 SQL Trace 存储过程(或其变体)来创建、运行和管理跟踪。

如果您使用 1 个探查器实例来分析另一个(或使用探查器通过从跟踪中删除“NOT LIKE 'SQL Profiler...'”过滤条件来分析自身(我认为这是一个应用程序名称过滤器),那么您会看到探查器所做的与您在 SQL 中所做的或 SMO 对象将从 API 中所做的完全一样。

于 2009-06-06T18:02:02.603 回答
3

您可以做的是设置“完美”跟踪并将其编写为 SQL。然后执行它以运行跟踪并将输出保存到文件或表中。

现在,您可以包装 SQL 以在另一个存储过程中创建跟踪,该过程可以通过 SQL 代理/空闲阈值运行,但使用 fn_trace_getinfo 来查看是否已经运行。

不能在 SSMS 中自动化它或使用环境变量:代码、作业、警报等都必须存在于服务器上。

您可以将脚本跟踪放入批处理文件并通过 osql/sqlcmd 运行它,但必须手动调用它。

没有分析器 API:它所做的只是运行存储过程,就像任何解决方案都必须这样做一样。

为什么不能添加独立于应用程序代码的监控 SQL 代码?

也不能使用 SMO ...仅用于读取痕迹

编辑:跟踪始终需要对服务器运行 SQL

于 2009-02-21T10:24:11.203 回答
1

您可以使用系统存储过程来自动化探查器。在http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htm查看执行相同操作的详细信息

于 2009-02-19T10:07:58.633 回答
0

GBN 就在这里;SQL Profiler 所做的只是在 SQL Server 上执行存储过程:这些过程启动、配置和停止跟踪。这意味着您无需尝试自动化分析器,只需执行相同的跟踪过程,您将获得相同的行为。

要自动启动和停止跟踪,您可以使用 SQL Profiler 创建脚本;该脚本可以从批处理文件中执行。所以你会做这样的事情;

  • 打开 SQL 探查器
  • 在跟踪配置文件中设置您想要的跟踪;选择您感兴趣的事件和要跟踪的文件。
  • 启动跟踪,然后停止它。
  • 转到文件 | 出口 | 脚本跟踪定义...并保存.sql文件

.sql文件包含您可以运行的代码;如果你打开它,你会在顶部看到这种代码;

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
This creates a trace that writes to a file. 

这是创建跟踪并将事件附加到跟踪。

所以现在,要开始你的跟踪,你可以安排这个文件的执行。批处理文件看起来像;

osql -E -S MACHINE\INSTANCE -i "c:\my-trace-definition.sql"
于 2009-12-08T12:05:36.063 回答