搜尋
首頁資料庫mysql教程SQLServer扩展事件(ExtendedEvents)--使用扩展事件不同目标示

SQL Server 扩展事件(Extended Events )-- 使用扩展事件不同目标示例 下面的查询返回服务器的所有目标: SELECTp.nameASPackageName,o.nameASTargetName,o.descriptionASTargetDescriptionFROMsys.dm_xe_objectsoINNERJOINsys.dm_xe_packagespONo.package_

SQL Server扩展事件(Extended Events)-- 使用扩展事件不同目标示例


下面的查询返回服务器的所有目标:

 

SELECT p.name AS PackageName,
o.name AS TargetName,
o.description AS TargetDescription
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'target'
AND (p.capabilities IS NULL OR p.capabilities <> 1)
ORDER BY PackageName, TargetName;

 

每个目标都有一个可配置的参数列表,有些列是强制性的,有些是可选的。下面的查询返回了服务器的所有可用目标的参数。

 

SELECT p.name AS PackageName,
o.name AS TargetName,
c.name AS ParameterName,
c.type_name AS ParameterType,
case c.capabilities_desc
when 'mandatory' then 'yes'
else 'no'
end AS [Required]
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns c
ON o.name = c.object_name
WHERE o.object_type = 'target'
AND (p.capabilities IS NULL OR p.capabilities <> 1)
ORDER BY PackageName, TargetName, [Required] desc;

 

行动可以绑定在特定的事件或扩展事件。它们同步包含在触发事件的线程上,因此可能在有些情况下会对性能有影响。行动可以被用于:

l 聚合事件数据

l 追加额外数据到事件数据

l 捕获堆栈转储和观察数据

l 用变量存储状态信息在当前上下文

l 停止服务执行创建调试检查点

 

由于行动是同步执行的,它们应该在需要的时候才被用来捕获额外的信息。有些行动像package0.debug_break不应该被用在生产环境。下面的查询返回服务器上所有可用的行动。

 

SELECT p.name AS PackageName,
o.name AS ActionName,
o.description AS ActionDescription
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'action'
AND (p.capabilities IS NULL OR p.capabilities & 1 = 0)
ORDER BY PackageName, ActionName;

 

事件数据通过字节的集合串在一起。为了说明数据,类型提供了长度和字节分类集合用于扩展事件引擎。大多数列有容易识别的类型,如int32、unicode_string、float32、boolean等,在大多数编程语言中是相当常见的。但也有些SQL Server中特别的类型,如callstack、sos_context、database_context等。

 

下面的查询返回所有可用的类型。

 

SELECT p.name AS PackageName,
o.name AS TypeName,
o.description AS TypeDescription
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'type'
AND (p.capabilities IS NULL OR p.capabilities & 1 = 0)
ORDER BY PackageName, TypeName;

 

在对象负载中的每个列都有一个相应的数据类型。当定义谓词的时候,这是很明显的。类型并不用于会话定义的一部分。

 

谓词用于在事件触发的时候动态过事件,决定哪些事件符合规则而被触发。这使得事件会话更有针对性的设置针对特定的问题,而不是收集所有的事件跟踪后期再过滤。对于特定的目标像ringbuffer,这非常重要,因为当内存满的时候,事件会开始被截断。

 

谓词是布尔类型的表达式,用于过滤全局状态数据和本地事件数据。本地会话数据被一个事件的负载或列定义在它的列架构中。全局状态数据被可用的对象或谓词源列定义,可从sys.dm_xe_objects视图的object_type等于pred_source查到。

 

SELECT p.name AS PackageName,
o.name AS ColumnName,
o.description AS ColumnDescription
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
AND (p.capabilities IS NULL OR p.capabilities & 1 = 0)
ORDER BY PackageName, ColumnName;

 

另外,有些谓词可以存储允许事件每N次计数时触发,或者第一次发生N次计数时触发。这可以用于基于样例事件捕获。可以用于帮助从频繁发生的事件中剔除触发很少的事件。

 

谓词通过数学计算的标准操作来实现。有些操作集合叫做比较操作符可以用于过滤。下面的查询可以找到比较操作符集合:

 

SELECT p.name AS PackageName,
o.name AS ComparatorName,
o.description AS ComparatorDescription
FROM sys.dm_xe_objects o
INNER JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
AND (p.capabilities IS NULL OR p.capabilities & 1 = 0)
ORDER BY PackageName, ComparatorName;

 

比较操作符的语法为:

Package_name.predicate_comparator_name(,<value>)</value></predicate_source_column></p> <p> </p> <p>比较操作符和源列必需有相同的数据类型,源列的数据类型不能被转换。下面的脚本展示了如何使用比较操作符:</p> <p> </p> <p><span style="color:rgb(192,0,0);font-size:18px;"><strong>Ring Buffer</strong><strong>示例</strong></span></p> <p>内存中的环形缓冲,临时存储事件数据到内存</p> <p> </p><pre class='brush:php;toolbar:false;'>IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='BufferManagerWatcher') DROP EVENT SESSION [BufferManagerWatcher] ON SERVER; CREATE EVENT SESSION [BufferManagerWatcher] ON SERVER ADD EVENT sqlserver.buffer_manager_page_life_expectancy( WHERE (([package0].[less_than_equal_uint64]([count],(3000))))) ADD TARGET package0.ring_buffer( SET max_memory=4096)

 

上面的事件在Page Life Expectancy降到3000微秒以下时被触发。

 

匹配提供了一个查找数据的内部值,让最终用户能知道值的意思。下面的查询提供了可用的匹配和值定义:

 

SELECT name, map_key, map_value
FROM sys.dm_xe_map_values
ORDER BY name, map_key

 

匹配像类型一样是对扩展事件上下文的表述。它们并不直接用于扩展事件会话的定义。它们提供分配给谓词去过滤事件或计算目标数据的值的一个查找渠道。

会话是事件和相关的动作、谓词、会话目标的集合。一个会话可以有用一个或多个事件和目标。

 

image

 

会话拥有独立的事件和目标配置。上例中,ring_buffer目标用于两个会话但是有用不同的内存配置。定义在一个会话中的事件独立于其他实例的不同会话的的同名事件。

 

Event File示例

errorlog_written事件:当SQL Server错误日志写入的时候触发。

 

步骤1

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='FileTargetDemo')
DROP EVENT SESSION [FileTargetDemo] ON SERVER;
CREATE EVENT SESSION [FileTargetDemo]
ON SERVER
ADD EVENT sqlserver.errorlog_written
ADD TARGET package0.asynchronous_file_target(
SET filename='c:\FileTargetDemo.etl', metadatafile='c:\FileTargetDemo.mta')
ALTER EVENT SESSION [FileTargetDemo]
ON SERVER
STATE=START

 

步骤2

DBCC CHECKDB(‘AdventureWorks2012’)

 

步骤3

SELECT name, target_name, CAST(target_data AS XML) target_data,
(SELECT c.column_name + '=' + c.column_value + ', '
FROM sys.dm_xe_session_object_columns c
WHERE s.address = c.event_session_address
AND t.target_name = c.object_name
AND c.object_type = 'target'
ORDER BY column_id
for xml path('')) AS options
FROM sys.dm_xe_sessions s
INNER JOIN sys.dm_xe_session_targets t
ON s.address = t.event_session_address
WHERE s.name = 'FileTargetDemo'
 
SELECT *
FROM sys.fn_xe_file_target_read_file('c:\FileTargetDemo*etl', 'c:\FileTargetDemo*mta', null, null)

 

步骤4

ALTER EVENT SESSION [FileTargetDemo]
ON SERVER
STATE=STOP

 

Synchronous Event Counter示例

记录会话中触发的事件计数

 

步骤1

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='EventCounterTargetDemo')
DROP EVENT SESSION [EventCounterTargetDemo] ON SERVER;
CREATE EVENT SESSION [EventCounterTargetDemo]
ON SERVER
ADD EVENT sqlserver.sql_statement_starting,
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.synchronous_event_counter
WITH (MAX_DISPATCH_LATENCY = 5 SECONDS)
ALTER EVENT SESSION [EventCounterTargetDemo]
ON SERVER
STATE=START

 

步骤2

SELECT name, target_name, CAST(target_data AS XML) target_data
FROM sys.dm_xe_sessions s
INNER JOIN sys.dm_xe_session_targets t
ON s.address = t.event_session_address
WHERE s.name = 'EventCounterTargetDemo'

 

步骤3

ALTER EVENT SESSION [EventCounterTargetDemo]
ON SERVER
STATE=STOP

 

Event Pairing示例

找出有触发启动的事件但是没有触发相应的完成的事件的事件。对于跟踪Lock Acquired和Lock Released事件对,Transaction Begin和Transaction End事件对很有用。

 

步骤1

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='PairMatchingTargetDemo')
DROP EVENT SESSION [PairMatchingTargetDemo] ON SERVER;
CREATE EVENT SESSION [PairMatchingTargetDemo]
ON SERVER
ADD EVENT sqlserver.database_transaction_begin(
ACTION (sqlserver.session_id)),
ADD EVENT sqlserver.database_transaction_end(
ACTION (sqlserver.session_id))
ADD TARGET package0.pair_matching(
SET begin_event='sqlserver.database_transaction_begin', begin_matching_actions='sqlserver.session_id', end_event='sqlserver.database_transaction_end', end_matching_actions='sqlserver.session_id')
WITH (MAX_DISPATCH_LATENCY = 5 SECONDS);
ALTER EVENT SESSION [PairMatchingTargetDemo]
ON SERVER
STATE=START;

 

步骤2

SELECT name, target_name, CAST(target_data AS XML) target_data
FROM sys.dm_xe_sessions s
INNER JOIN sys.dm_xe_session_targets t
ON s.address = t.event_session_address
WHERE s.name = 'PairMatchingTargetDemo'

 

步骤3

ALTER EVENT SESSION [PairMatchingTargetDemo]
ON SERVER
STATE=STOP;

 

Event Bucketing示例

用于根据事件负载列或行动分组来分组事件的发生。下面示例以wait_type来分组wait_info事件。

 

步骤1

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='BucketingTargetDemo')
DROP EVENT SESSION [BucketingTargetDemo] ON SERVER;
CREATE EVENT SESSION [BucketingTargetDemo]
ON SERVER
ADD EVENT sqlos.wait_info
ADD TARGET package0.asynchronous_bucketizer(
SET filtering_event_name='sqlos.wait_info', source_type=0, source='wait_type')
WITH (MAX_DISPATCH_LATENCY = 2 SECONDS)
ALTER EVENT SESSION [BucketingTargetDemo]
ON SERVER
STATE=START

 

步骤2

SELECT name, target_name, CAST(target_data AS XML) target_data
FROM sys.dm_xe_sessions s
INNER JOIN sys.dm_xe_session_targets t
ON s.address = t.event_session_address
WHERE s.name = ' BucketingTargetDemo '

 

步骤3

ALTER EVENT SESSION [BucketingTargetDemo]
ON SERVER
STATE=STOP;

 

Event Tracing for Windows(ETW)示例

ETW目标文件是一个外部文件,不会被SQL Server内部使用。外部的ETW通常被用来跟踪与内部发生事件相关的外部发生事件。

 

步骤1

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='ETWTargetDemo')
DROP EVENT SESSION [ETWTargetDemo] ON SERVER;
CREATE EVENT SESSION [ETWTargetDemo]
ON SERVER
ADD EVENT sqlserver.sql_statement_starting (
WHERE sqlserver.database_id = 2),
ADD EVENT sqlserver.sql_statement_completed (
WHERE sqlserver.database_id = 2),
ADD EVENT sqlserver.file_written (
WHERE sqlserver.database_id = 2),
ADD EVENT sqlserver.file_write_completed (
WHERE sqlserver.database_id = 2)
ADD TARGET package0.etw_classic_sync_target (
SET default_etw_session_logfile_path = N'C:\sqletwtarget.etl')

 

同时,在Windows命令行启动一个ETW会话对于磁盘和文件操作收集外部ETW数据

 

logman start "NT Kernel Logger" -p "Windows Kernel Trace" (disk,file) -ets -o C:\systemetw.etl -bs 1024 -ct system

 

步骤2

ALTER EVENT SESSION [ETWTargetDemo]
ON SERVER
STATE=START

 

步骤3


导入批量数据到tempdb。

 

步骤4

ALTER EVENT SESSION [ETWTargetDemo]
ON SERVER
STATE=STOP

 

步骤5


从命令行停止系统ETW收集和扩展事件外部ETW会话。

 

logman update "NT Kernel Logger" -fd -ets

logman stop "NT Kernel Logger" -ets

logman update XE_DEFAULT_ETW_SESSION -fd -ets

logman stop XE_DEFAULT_ETW_SESSION –ets

 

步骤6


用tracerpt命令连接两个.etl文件生成一个.csv文件。

 

tracerpt c:\sqletwtarget.etl c:\systemetw.etl -y -o sqletw_results.csv

 

备注:


C:\>logman /?

C:\>tracerpt /?



陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解釋InnoDB緩衝池及其對性能的重要性。解釋InnoDB緩衝池及其對性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL與其他編程語言:一種比較MySQL與其他編程語言:一種比較Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

學習MySQL:新用戶的分步指南學習MySQL:新用戶的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。