代码之家  ›  专栏  ›  技术社区  ›  Ferdeen

是否可以自动化SQL Server 2008探查器?

  •  4
  • Ferdeen  · 技术社区  · 17 年前

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

    探查器非常有用,尤其是在应用程序代码中嵌入了SQL,并且希望在尽可能短的时间内计算出它在做什么的情况下。(此外,您可能不知道应用程序环境中使用的是哪个源代码版本,或者更糟糕的是,没有可用的源代码!)。

    我想知道探查器是否有一个API可以连接?

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

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

    4 回复  |  直到 9 年前
        1
  •  5
  •   Peter Oehlert    17 年前

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

    如果您使用一个探查器实例来评测另一个实例(或者使用一个探查器来评测自己,方法是从跟踪中删除“不喜欢‘SQL profiler…’”筛选条件(我认为这是一个应用程序名筛选器),那么您将确切地看到探查器所做的事情与您在SQL中所做的事情相同,或者SMO对象将从API中所做的事情相同。

        2
  •  3
  •   gbn    17 年前

    你能做的就是设置你的“完美”跟踪,并将其脚本化为SQL。 然后执行它来运行跟踪并将输出保存到文件或表中。

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

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

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

    没有profiler API:它所做的只是运行存储过程,就像任何解决方案一样。

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

    can't use SMO either ... 只是为了读取痕迹

    编辑:跟踪总是要求对服务器运行SQL

        3
  •  1
  •   kittugadu    17 年前

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

        4
  •  0
  •   Steve Cooper    16 年前

    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"