9

在运行 Profiler 之外,任何人都可以建议我们在捕获发送到 SQL Server 的所有 SQL 语句时可能有的选项吗?我知道有几种方法可以做到这一点,但要确保我没有忽略某些东西,例如现有的 DM 视图等。

非常感谢。

4

5 回答 5

13

SQL Server 2008 中的扩展事件。这些似乎没有得到充分利用。也许是由于缺乏 UI 支持,但比 SQL 跟踪更灵活(更多事件和更好的过滤可能性)更轻量级(由于更好的过滤和删除事件而不是阻止的可能性)

示例语法如下。不过,还有更多的事件、动作、谓词和输出目标的可能性。

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='test_trace')
DROP EVENT SESSION [test_trace] ON SERVER;
CREATE EVENT SESSION [test_trace]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
     ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
     )
,
ADD EVENT sqlserver.sp_statement_completed(
     ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
     )
ADD TARGET package0.asynchronous_file_target
(set filename = 'c:\temp\test_trace.xel' , metadatafile = 'c:\temp\test_trace.xem')
ALTER EVENT SESSION [test_trace] ON SERVER STATE = START

并审查结果

SELECT CONVERT (XML, event_data) AS data
        FROM sys.fn_xe_file_target_read_file ('C:\Temp\test_trace*.xel',
         'C:\Temp\test_trace*.xem', NULL, NULL)
于 2010-07-28T14:34:03.380 回答
1

我认为你的选择是

有 DMV 收集诸如长时间运行的查询之类的信息,但我认为没有一个可以为您提供一切。

于 2010-07-28T13:40:10.317 回答
1

如果您对 Profiler 的问题不是您不想使用它,而是您不能使用它,也许您可​​以使用Profiler for Microsoft SQL Server 2005/2008 Express Edition它是免费和开源的。

于 2010-07-28T13:42:41.020 回答
1

您可以使用跟踪以编程方式捕获输出:以编程方式从 SQL Server 2005 接收探查器事件(实时)

于 2010-07-28T13:47:49.767 回答
0

值得一提的是,“Inside Microsoft SQL Server 2008 T-SQL Programming”一书有一个伟大的章节,由 Greg Low 撰写,着眼于 SQL Server 2008 中的所有日志记录和审计选项。它讨论了何时应该使用每个选项以及各有优劣。话虽如此,你所做的可能是最好的。

于 2010-12-02T00:15:41.177 回答