Search code examples
sql-serversql-server-2008profilerextended-events

SQL Server 2008 - Capturing all SQL Statements Hitting the Server


Can anyone suggest options we might have in capturing all SQL statements being sent to our SQL Server, outside of running Profiler? I'm aware of a couple ways of doing it, but want to make sure I'm not overlooking something, such as an existing DM view etc.

Thanks very much.


Solution

  • Extended Events in SQL Server 2008. These seem fairly underused. Perhaps due to a lack of UI support but are more flexible than SQL Traces (more events and better filtering possibilities) more light weight (due to better filtering and possibility to drop events rather than block)

    Example syntax is below. There are lots more events, actions, predicates and output target possibilities than that though.

    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
    

    And to review the results

    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)