实时预览应用程序生成的 SQL 查询

apo*_*pse 5 sql-server

我需要知道某个应用程序生成了哪些 SQL 查询。

是否有可能在某种嗅探器中看到它?我试图查看 Management Studio,但它只显示最昂贵的查询。

swa*_*eck 9

Profiler Trace 已被弃用,但您仍然可以使用它。此外,还有几种方法可以查看正在发生的事情:

  • sp_WhoIsActive从亚当Machanic ......这是,如果你想知道这是怎么回事使用一个极好的工具,现在
  • 因为我现在没有在所有实例上创建 sp_WhoIsActive,所以我还使用了一个不太优雅的脚本,我在这里放在一起http://gist.github.com/swasheck/11379471它使用了可能感兴趣的 DMV 的组合给你(也是现在)。

根据您的 SQL Server 版本,您可以使用system_health扩展事件会话。

下面是一种system_health在 SQL Server 2008 中查询的方法:

        SELECT 
            td.r.value('@name','sysname') event_name,
            td.r.value('@timestamp','datetime2(7)') event_timestamp, 
            td.r.value('(data[@name="wait_type"]/text)[1]','sysname') wait_type,
            td.r.value('(data[@name="duration"]/value)[1]','bigint') wait_duration,
            td.r.value('(action[@name="sql_text"]/value)[1]','nvarchar(max)') sql_text,
            td.r.query('.') event_data
        into #xe
        FROM (
                    SELECT
                    CAST(target_data AS XML) target_data
                    FROM sys.dm_xe_sessions s
                    JOIN sys.dm_xe_session_targets t
                        ON s.address = t.event_session_address

                    WHERE s.name = N'system_health'
                        and target_name = 'ring_buffer'
                    ) base
        CROSS APPLY target_data.nodes('/RingBufferTarget/*') td(r);
        GO

        select 
            event_name, 
            dateadd(HOUR,-5,event_timestamp) event_timestamp, 
            wait_type, 
            wait_duration, 
            sql_text, 
            event_data                  
            from #xe
            order by event_timestamp desc
        GO
        DROP TABLE #xe;
Run Code Online (Sandbox Code Playgroud)

SQL Server 2012 在其system_health事件会话中提供了更多信息。我在这里有一组查询将解析大部分组成部分。

但是,根据您要查找的内容,该信息可能不包含在 system_health 中,除非它等待闩锁或其他资源的时间超过 15 秒,等待锁定的时间超过 30 秒,或者它一直在等待某事在 SQL Server API 之外超过 5 秒(抢先等待)。


小智 6

在您的 MS SQL Server Management Studio 中

工具 -> SQL Profiler

有一些关于选择行/命令和列的小细节,但在 MSDN 上快速阅读它,您可以开始查看发送到引擎要执行的内容。

奥布斯:。它会嗅探从该服务器上的任何数据库的任何用户和应用程序发送到引擎的任何命令。


小智 5

SQL Server Profiler显示针对 SQL Server 实例执行的所有查询。查询可以由用户、应用程序、SQL Server 本身等执行。

为了能够查看查询,必须配置并运行 SQL 跟踪:

  1. 启动 SQL Server Profiler
  2. 在文件菜单上,选择新建跟踪
  3. 在“连接到服务器”对话框中,选择 SQL Server 实例并提供凭据
  4. 点击连接
  5. 在常规选项卡中,指定跟踪名称
  6. 打开事件部分选项卡
  7. 选中显示所有事件复选框。确保选择了您要审核的事件类型

在此处输入图片说明