用途:在 Azure SQL Database 上手工搭建数据库级 Extended Events 会话,用于捕获语句完成等事件,并读取 ring_buffer 目标回结果集,用完停止并删除。捕获数据含义由对应的诊断技能解释。
主要能力与步骤:一、用 CREATE EVENT SESSION ... ON DATABASE 定义会话,事件只带自身字段,谁执行、来自哪个应用、语句文本需通过 ACTION(sqlserver.sql_text, sqlserver.username, sqlserver.client_app_name) 附加,并用 WHERE 过滤如 duration > 500000。二、创建不会自动启动,需在用户数据库连接上执行 ALTER EVENT SESSION ... ON DATABASE STATE = START,常用 sqlcmd -S <server>.database.windows.net -d <database> -G -N -b -i 脚本。三、读取 sys.dm_xe_database_session_targets 与 sys.dm_xe_database_sessions,将 XML 的 target_data 展开为行集。四、用 STOP 与 DROP 清理,先读后停,因停止会清空 ring buffer。
关键限制:会话仅限数据库范围,ON SERVER 报 Msg 25737,对系统数据库 ON DATABASE 同样失败;目录视图与 DMV 使用 database_ 前缀;event_file 只写 Azure 存储 blob,本地路径在 CREATE 时报 Msg 40538;没有内置 system_health 会话;内部 dl 会话不应读取。权限为数据库级 CREATE/ALTER ANY DATABASE EVENT SESSION。duration 单位因事件而异,sql_statement_completed 与 rpc_completed 为微秒,wait_info 为毫秒,写谓词前应用 sys.dm_xe_object_columns 确认。每数据库启动会话上限 100、内存上限 128 MB,弹性池 512 MB,超限报 Msg 25746/25747。blocked_process_report 在本服务不受支持,应改用 Blocks 诊断设置。event_file 凭据在 START 时校验,缺凭据常报 Msg 25602;数据库作用域凭据名须为 blob 容器 URL 本身且无结尾斜杠。部分死锁事件在容器与文档间存在差异,需用实际死锁验证。文中还给出四步断言检查脚本与三条元数据查询,用于识别“定义、启动、动作、目标”各环节的静默失败。