SQL追蹤(SQL Trace)是一個輕量級的追蹤工具,按照事件(Events)記錄數據庫發生的消息,幾乎對數據庫性能沒有什麼影響。SQL Server內置一個Trace,稱做默認追蹤(Default Trace),默認追蹤的ID是1,你們常常使用的SQL Server Profiler,就是利用SQL Trace記錄數據庫活動的一個工具。SQL Trace在SQL Server數據庫引擎種出現的比較早,能夠被性能和功能更卓越的擴展事件(Extended Events)取代。html
一,查看默認追蹤是否啓用sql
默認追蹤是系統內置的,TraceID是1,默認是開啓的,能夠經過系統配置表 sys.configurations 進行查看,配置項ID(configuration_id)是1568:數據庫
字段 value=1,表示Default Trace是開啓的。ide
二,禁用或啓用默認追蹤函數
若是默認追蹤被禁用,須要從新配置啓用默認追蹤:工具
exec sp_configure 'show advanced options' , 1 ; go reconfigure; go exec sp_configure 'default trace enabled' , 1 ; go reconfigure; go
若是默認追蹤已經啓用,能夠從新配置禁用默認追蹤:post
exec sp_configure 'default trace enabled' , 0 ; go reconfigure; go exec sp_configure 'show advanced options' , 0 ; go reconfigure; go
三,查看默認追蹤的信息性能
默認追蹤記錄的數據存儲在文件中,能夠從系統視圖 sys.traces查看文件的路徑,文件的大小(Size)和文件的更新方式等信息,追蹤文件默認的擴展名是 .trc。url
select id ,iif(status=1,'running','stopped') as status ,path ,max_size ,start_time ,stop_time ,event_count ,max_files ,is_rowset ,is_rollover ,is_shutdown ,is_default ,buffer_count ,buffer_size as each_buffer_size from sys.traces where id=1
默認追蹤有5個跟蹤文件,每個文件的最大size默認是20MB,SQL Server負責維護這5個文件,當實例重啓的時候或者到達文件Size最大值的時候,SQL Server建立新的文件,將最先建立的跟蹤文件刪除,依次滾動(Rollover)更新。spa
四,查看追蹤文件的內容
函數sys.fn_trace_gettable,用於從追蹤文件中讀取數據,以關係表的格式顯式:
sys.fn_trace_gettable ( 'filename' , number_files )
參數filename:用於指定追蹤文件的名稱,其值能夠從系統視圖sys.traces 中的path獲取;
參數number_files:若是number_files 被指定爲default,函數讀取全部的滾動文件。
函數返回的是關係表,有效字段是:追蹤關聯的事件綁定的字段,
select * from sys.fn_trace_gettable(N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\log_4.trc',default)
五,查看默認追蹤記錄的事件列表
函數fn_trace_geteventinfo(trace_id)返回追蹤關聯的事件列表,使用該函數能夠查看默認追蹤記錄的事件和事件的特定字段:
select categ.name as category, te.trace_event_id as event_id, te.name as event_name, tc.trace_column_id as event_column_id, tc.name as column_name, tc.type_name as column_type from sys.fn_trace_geteventinfo(1) as gei inner join sys.trace_columns tc on gei.columnid=tc.trace_column_id inner join sys.trace_events te on gei.eventid=te.trace_event_id inner join sys.trace_categories categ on te.category_id=categ.category_id order by category,event_id,event_column_id
六,查看事件和Category
Category用於組織事件(Event),是事件的分組,在SQL Server 2012中,共有21個Category,180個Event,每一個Event屬於惟一的一個Category。
select tc.name as category, te.trace_event_id as event_id, te.name as event_name from sys.trace_categories tc inner join sys.trace_events te on tc.category_id=te.category_id order by category,event_id
七,查看事件綁定的字段
在SQL Server 2012中,事件共有66個字段,但不是每一個Event都能綁定全部的66個字段,每一個Event可以綁定的字段是固定的,系統預先設置,用戶不能修改,視圖 sys.trace_event_bindings 用於顯示每一個事件綁定的字段。
select te.trace_event_id as event_id, te.name as event_name, tc.trace_column_id as column_id, tc.name as column_name, tc.type_name as column_type from sys.trace_event_bindings teb inner join sys.trace_columns tc on teb.trace_column_id=tc.trace_column_id inner join sys.trace_events te on teb.trace_event_id=te.trace_event_id order by event_id,column_id
八,使用SQL Server Profiler建立SQL Trace
若是用戶須要建立自定義的追蹤,那麼可使用系統提供的存儲過程來實現,可是,使用TSQL代碼建立追蹤的過程十分繁瑣,代碼量龐大,整個過程不直觀。你們知道,SQL Server Profiler是一個可視化用於查看數據庫活動的工具,同時,它也是一個用於建立SQL Trace的工具。使用SQL Server Profiler建立SQL Trace的過程十分簡單:選擇相應的事件和事件的字段以後,導出SQL Trace 的定義便可。
在建立SQL Trace以後,點擊File->Export->Scipt Trace Definition,把SQL Server Profiler用於建立SQL Trace的腳本代碼導出:
導出的腳本以下,不能直接使用,必須修改一處代碼:在建立Trace時,指定存儲追蹤數據的文件(File) 或 關係表(Table),僅此而已。
-- Create a Queue declare @rc int declare @TraceID int declare @maxfilesize bigint set @maxfilesize = 5 -- Client side File and Table cannot be scripted exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL if (@rc != 0) goto error -- 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 --delete many commands here --- -- Set the Filters declare @intfilter int declare @bigintfilter bigint exec sp_trace_setfilter @TraceID, 1, 0, 6, N'%drop%' -- Set the trace status to start exec sp_trace_setstatus @TraceID, 1 -- display trace id for future references select TraceID=@TraceID goto finish error: select ErrorCode=@rc finish: go
注:SQL Trace是被擴展事件取代的功能,在後續的版本中將會被移除,建議在之後的開發中使用擴展事件。
參考文檔:
Server-wide Configuration Catalog Views (Transact-SQL)