日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话

發布時間:2024/9/21 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL Server擴展事件(Extended Events)-- 將現有 SQL 跟蹤腳本轉換為擴展事件會話

?

如果您具有想要轉換為擴展事件會話的現有 SQL 跟蹤腳本,則可以使用本主題中的過程創建等效的擴展事件會話。 通過使用 trace_xe_action_map 和 trace_xe_event_map 系統表中的信息,您可以收集進行轉換所必需的信息。

?

這些步驟包括以下內容:

????執行現有腳本以便創建一個 SQL 跟蹤會話,然后獲取該跟蹤的 ID。

????運行一個查詢,該查詢使用 fn_trace_geteventinfo 函數來為每個 SQL 跟蹤事件類及其關聯列找到等效的擴展事件的事件和操作。

????使用 fn_trace_getfilterinfo 函數列出要使用的篩選器和等效的擴展事件操作。

????手動創建擴展事件會話,并且使用等效的擴展事件的事件、操作和謂詞(篩選器)。

?

獲取跟蹤ID

在查詢編輯器中打開 SQL 跟蹤腳本,然后執行該腳本以便創建跟蹤會話。 請注意,無需運行該跟蹤會話即可完成此過程。

獲取跟蹤的 ID。 為此,請使用以下查詢:

?

1 2 SELECT?*?FROM?sys.traces; GO

?

注意

跟蹤 ID 1 通常指示默認跟蹤。

?

確定等效的擴展事件

若要確定等效的擴展事件的事件和操作,請運行以下查詢,其中,trace_id 設置為您在之前過程中獲取的跟蹤 ID 的值。

?

注意

在這個示例中,使用默認跟蹤 (1) 的跟蹤 ID。

?

1 2 3 4 5 6 7 8 9 10 11 12 USE?MASTER; GO DECLARE?@trace_id?int; SET?@trace_id?=?1; SELECT?DISTINCT?el.eventid,?em.package_name,?em.xe_event_name?AS?'event' ,?el.columnid,?ec.xe_action_name?AS?'action' FROM?(sys.fn_trace_geteventinfo(@trace_id)?AS?el LEFT?OUTER?JOIN?sys.trace_xe_event_map?AS?em ON?el.eventid?=?em.trace_event_id) LEFT?OUTER?JOIN?sys.trace_xe_action_map?AS?ec ON?el.columnid?=?ec.trace_column_id WHERE?em.xe_event_name?IS?NOT?NULL?AND?ec.xe_action_name?IS?NOT?NULL;

?

將返回等效的擴展事件的事件 ID、包名稱、事件名稱、列 ID 和操作名稱。 您將在本主題后面的“創建擴展事件會話”過程中使用此輸出。

?

在某些情況下,篩選列將映射到默認在擴展事件的事件中包括的事件數據字段。 因此,“Extended_Events_action_name”列將為 NULL。 如果發生此情況,您必須執行以下操作以便確定哪一數據字段等效于篩選列:

?

對于返回 NULL 的操作,標識腳本中哪些 SQL 跟蹤事件類包含要篩選的列。

例如,您可能使用了 SP:StmtCompleted 事件類,并且對 Duration 跟蹤列名(SQL 跟蹤事件類 ID 45 和 SQL 跟蹤列 ID 13)指定了一個篩選器。 在此情況下,該操作名稱將以 NULL 的形式出現在查詢結果中。

對于您在前一步驟中標識的每個 SQL 跟蹤事件類,找到等效的擴展事件的事件名稱。 (如果您不清楚等效的事件名稱,請使用查看與 SQL 跟蹤事件類等效的擴展事件主題中的查詢。)

使用下面的查詢可以標識要用于您在前一步驟中標識的事件的正確的數據字段。 該查詢將在“事件字段”列中顯示擴展事件數據字段。 在該查詢中,用您在前一步驟中指定的事件名稱替換 <event_name>。

?

1 2 3 4 5 6 7 8 9 10 11 SELECT?xp.name?package_name,?xe.name?event_name ,xc.name?event_field,?xc.description FROM?sys.trace_xe_event_map?AS?em INNER?JOIN?sys.dm_xe_objects?AS?xe ON?em.xe_event_name?=?xe.name INNER?JOIN?sys.dm_xe_packages?AS?xp ON?xe.package_guid?=?xp.guid?AND?em.package_name?=?xp.name INNER?JOIN?sys.dm_xe_object_columns?AS?xc ON?xe.name?=?xc.object_name WHERE?xe.object_type?=?'event'?AND?xc.column_type?<>?'readonly' AND?em.xe_event_name?=?'<event_name>';

?

例如,SP:StmtCompleted 事件類映射到 sp_statement_completed 擴展事件的事件。 如果您在查詢中將 sp_statement_completed 指定為事件名稱,則“event_field”列將顯示默認隨該事件包括的字段。 在查看這些字段時,您會看到有一個“duration”字段。 若要在等效的擴展事件會話中創建該篩選器,您要添加一個謂詞,例如“WHERE duration > 0”。

?

創建擴展事件會話

使用查詢編輯器可以創建擴展事件會話,并且將輸出寫入某一文件目標。 下面的步驟描述單個查詢,并且提供介紹如何生成查詢的說明。 有關完整查詢示例,請參閱本主題的“示例”部分。

添加語句以便創建事件會話,并且使用您要用于擴展事件會話的名稱替換 ession_name。

?

1 2 3 4 IF?EXISTS(SELECT?*?FROM?sys.server_event_sessions?WHERE?name='session_name') DROP?EVENT?SESSION?[Session_Name]?ON?SERVER; CREATE?EVENT?SESSION?[Session_Name] ON?SERVER;

?

添加在“確定等效的擴展事件”過程中作為輸出返回的擴展事件的事件和操作,并且添加在“確定在腳本中使用的篩選器”過程中標識的謂詞(篩選器)。

?

下面的示例使用一個 SQL 跟蹤腳本,該腳本包括 SQL:StmtStarting 和 SP:StmtCompleted 事件類,以及用于會話 ID 和持續時間的篩選器。 “確定等效的擴展事件”過程中查詢的示例輸出返回了以下結果集:

?

Eventid package_name event columnid action

44 sqlserver sp_statement_starting 6 nt_username

44 sqlserver sp_statement_starting 9 client_pid

44 sqlserver sp_statement_starting 10 client_app_name

44 sqlserver sp_statement_starting 11 server_principal_name

44 sqlserver sp_statement_starting 12 session_id

45 sqlserver sp_statement_completed 6 nt_username

45 sqlserver sp_statement_completed 9 client_pid

45 sqlserver sp_statement_completed 10 client_app_name

45 sqlserver sp_statement_completed 11 server_principal_name

45 sqlserver sp_statement_completed 12 session_id

?

為了將此結果集轉換為等效的擴展事件,添加了 sqlserver.sp_statement_starting 和 sqlserver.sp_statement_completed 事件以及操作列表。 謂詞語句作為 WHERE 子句包括。

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ADD?EVENT?sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE?sqlserver.session_id?=?59 ), ADD?EVENT?sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE?sqlserver.session_id?=?59?AND?duration?>?0 )

?

添加異步文件目標,并且使用您要用來保存輸出的位置替換文件路徑。 在指定文件目標時,必須包括日志文件和元數據文件路徑文件。

?

1 2 ADD?TARGET?package0.asynchronous_file_target( SET?filename='c:\temp\ExtendedEventsStoredProcs.xel',?metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');

?

查看結果

您可以使用 sys.fn_xe_file_target_read_file 函數查看輸出。 為此,運行以下查詢,并且使用您指定的路徑替換文件路徑:

?

1 2 SELECT?*,?CAST(event_data?as?XML)?AS?'event_data_XML' FROM?sys.fn_xe_file_target_read_file('c:\temp\ExtendedEventsStoredProcs*.xel',?'c:\temp\ExtendedEventsStoredProcs*.xem',?NULL,?NULL);

?

注意

將事件數據轉換為 XML 是可選的。

?

示例

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 IF?EXISTS(SELECT?*?FROM?sys.server_event_sessions?WHERE?name='session_name') DROP?EVENT?SESSION?[session_name]?ON?SERVER; CREATE?EVENT?SESSION?[session_name] ON?SERVER ADD?EVENT?sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE?sqlserver.session_id?=?59 ), ADD?EVENT?sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE?sqlserver.session_id?=?59?AND?duration?>?0 ) ADD?TARGET?package0.asynchronous_file_target (SET?filename='c:\temp\ExtendedEventsStoredProcs.xel',?metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');

?

參考:

http://technet.microsoft.com/zh-cn/library/ff878264%28v=sql.110%29.aspx














本文轉自UltraSQL51CTO博客,原文鏈接:http://blog.51cto.com/ultrasql/1601048 ,如需轉載請自行聯系原作者



總結

以上是生活随笔為你收集整理的SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。