问题标签 [extended-events]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
504 浏览

sql - 我可以将跟踪文件/扩展事件文件保存到服务器上 C 驱动器以外的另一个分区吗?或者完全是另一台服务器?

我最近在我们的新虚拟服务器上的 SQL 中设置并运行了一些跟踪和扩展事件,以显示用户对每个数据库的访问权限以及他们最近是否登录,并将文件设置为保存为物理文件服务器而不是写入 SQL 表来节省资源。我已将跟踪设置为每天早上 8 点运行的作业,延迟 12 小时,以便我们可以记录尽可能多的信息。

理想情况下,我们的 IT 部门除了虚拟服务器 C 驱动器上的操作系统之外不想要任何东西,所以我希望能够将我的 SQL 脚本中的跟踪写入不同的分区或完全写入另一台服务器。

我试图在我的代码中插入到不同服务器的直接路径,并输入了与 C 不同的分区,但是除非我将跟踪/扩展事件文件写入 C 驱动器,否则我会收到一条错误消息。

我收到的错误是这样的:

Msg 25641, Level 16, State 0, Line 6 For target, "package0.asynchronous_file_target", the parameter "filename" passed is invalid. Target parameter at index 0 is invalid

如果我将其更改为另一个分区而不是不同的服务器:

SQL Server 声明命令成功完成,但文件未写入分区。

关于如何将文件写入另一个分区或服务器的任何想法?

0 投票
1 回答
1491 浏览

sql-server - 扩展事件需要哪些权限?

我的服务器管理员为我创建了一个扩展事件,但在我的帐户上我无法启动和使用它。

为了使用扩展事件,我必须请求什么权限?

0 投票
1 回答
119 浏览

regex - 如何优化扩展事件到 JSON 的转换

我有一个小过程来摄取 .xel 文件,使用 dba-tools 模块将其转换为自定义对象,然后将它们转换为单行 JSON 并将它们导出到一个文件,该文件可以发送到任何地方。这里:

这符合要求,并且完全符合我的需要。中间那个讨厌的正则表达式是因为当你转换为 json 时,它会轻松地转义所有 unicode 字符,而正则表达式会神奇地将它们全部变回我们熟悉和喜爱的字符。

但是,这一切都太慢了。我们大量生成 .xel 文件,通常大小为 500mb,我们希望在写入和摄取跟踪之间有更短的延迟。就目前而言,以这种方式串行处理文件大约需要 35 分钟。如果我们落后,延迟可能会增加,这似乎很可能以那个速度。

我已经加快了速度。我尝试使用 [System.Text.RegularExpressions.Regex]::Unescape 代替我拥有的正则表达式代码,但它只是稍微快一点,并且无论如何都不能提供我们需要的正确格式。我的下一步是将文件拆分为更小的部分并并行处理它们,但这将显着增加 CPU 密集度,如果可能的话,我想避免这种情况。

任何帮助优化这个非常感谢!

0 投票
0 回答
91 浏览

sql-server-2008 - 如何查找/删除 SSAS 多维数据集上的所有维度/度量(扩展事件)

我正在使用扩展事件来分析 SSAS 多维数据集中的维度/度量使用情况。我使用 xmla 模板来创建事件(来自 Chris Webb 博客)。然后,我将数据解析到一个临时表中,在该表中我从事件数据 XML 字段中删除了必填字段。

然后我打算用它CHARINDEX来查找 field 内的度量/维度调用TextData。但是,要做到这一点,我需要一个 SSAS 多维数据集中所有维度/度量的列表。有没有办法把它撕掉?

0 投票
1 回答
409 浏览

xml - 是否有 SSIS 连接器来获取 .xel 文件(扩展事件)?和方法修正

我目前正在开展一个项目,以使用扩展事件分析我们的一个多维数据集上维度/度量的使用情况。由于我们在 SQL Server 2012 上,扩展事件 GUI 不可用。我正在使用 sys.fn_xe_file_target_read_file 以 XML 格式返回文件,每行一个事件。

然后,我将 XML 中的关键元素解析为临时表。

.xel 文件附加到每一天。我需要设置一个机制(使用 SSIS)包来每天存档文件并应用上面的 sql 逻辑将数据读入临时/临时表/

但是,我正在努力在 SSIS 上找到合适的连接器。他们都不允许我从其文件夹中获取 .xel 文件。

0 投票
1 回答
106 浏览

sql-server - SQL Server 扩展事件 module_start 缺少 NestLevel 信息

在 SQL Server 中使用扩展事件进行跟踪以显示嵌套过程的嵌套级别时,有没有办法?Deprecated Profiler 有一个名为 NestLevel for SP:Starting 的列,它可以很好地描述嵌套过程的层次结构。但是我在事件字段(也不是全局字段)中找不到 module_start 事件的相同列。

非常感谢!

0 投票
0 回答
77 浏览

c# - C# & SQL Server 实时 DML 事件

我需要从 SQL Server 向外部实体生成 DML 事件(插入、更新、删除)。我尝试使用Microsoft.SqlServer.XEvent.XELitenuget 包实现扩展事件。但它不提供行数据,而只提供执行的语句。

我还看到了fn_dblog从事务日志中检索数据的功能。但这似乎太复杂了。

有没有其他方法可以实现这一点(当然不使用触发器或任何像 CDC 这样的手动工作)?

0 投票
0 回答
288 浏览

sql - 关于扩展事件的问题 - lock_acquired 和 lock_released

我正在尝试创建 EE 会话,该会话将跟踪特定对象的 lock_acquired 和 lock_released 事件

这是EE会话的定义

CREATE EVENT SESSION [锁定获取] ON SERVER ADD EVENT sqlserver.lock_acquired(SET collect_database_name=(1),collect_resource_description=(1) ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver .query_plan_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username) WHERE ([sqlserver].equal_i_sql_unicode_string AND ([associated_object_id]=(597577167.) OR [associated_object_id]=(72057594043236352.) OR [associated_object_id]=(72057594043236352.)))),添加事件 sqlserver.lock_released(SET collect_database_name=(1),collect_resource_description=(1) ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver。 query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username) WHERE ([sqlserver].equal_i_sql_unicode_string AND ([associated_object_id]=(597577167.) OR [associated_object_id]=(72057594043236352.) OR [associated_object_id] =(72057594043236352.)))) ADD TARGET package0.event_file(SET filename=N'C:\Locks acquire on\Locks.xel')

这将跟踪为 associated_object_id = 597577167 获取和释放的任何锁(这是特定对象的 object_id,如果锁定的资源是对象,那么我们将得到 associated_object_id = 597577167)

对于 [associated_object_id]=(72057594043236352.) (如果锁定的资源是 PAGE 或 KEY 我们将得到 [related_object_id]=(72057594043236352) ,72057594043236352 是对象 597577167 的分区 id(此对象只有一个分区))

这很好用,我已经尝试过测试,我有这个 ID 为 597577167 的特定表只有一行,我已经为这个表启动了开放事务

开始 tran 更新“表”设置 col1 = 1

好的 - 我有这个对象的 lock_acquired 事件 ,page ,rid

我已经离开了三分钟,然后我回滚了这个事务,我得到了对象、页面、摆脱的 lock_released 事件

但是尽管锁定了三分钟,lock_released 事件显示我的持续时间 - 0

为什么会这样?我预计锁定获取和锁定释放之间的锁定持续时间,但我看到此事件或任何其他锁定事件的持续时间为零

有没有面对这个?

0 投票
0 回答
64 浏览

sql - 扩展事件 - 读取与读写应用程序

作为扩展事件的一部分,我跟踪 rpc_completed 和 sql_batch_completed 事件。这是为了捕获所有命中数据库的查询,以便我更好地了解流量。基于此,我想将应用程序分为两组:读取和读写。出于性能原因,我稍后可以将读取的节点移至只读 AG 节点。我的问题是最好的方法是什么?我可以看到第一眼看起来像我所追求的Wrties字段。我已经进行了一些测试,看起来不错,我可以看到,对于插入/删除/更新语句,此列中的值大于0,而选择为0。

您知道完全依赖该领域的任何陷阱吗?您能推荐另一种处理该任务的方法吗?

更新:你知道 sql_batch_completed 或 rpc_completed 的 writes 字段的定义是什么吗? 在此处输入图像描述

我找不到它。和探查器一样吗?Per this thread理解 SQL Profiler 中的读/写次数是:

写入:用户在连接期间发出的逻辑写入 I/O 数。

亲切的问候, 拉法尔

0 投票
1 回答
168 浏览

performance - 扩展事件捕获最少的事件以获得更好的性能

我们有遗留应用程序,有很多用户连接到我们的遗留系统。我们了解我们的工作和数据库维护活动。但是,我们看到很多不同的用户也在访问生产系统。我们希望捕获最少量的扩展事件,以查看不同的第三方用户是什么以及他们正在运行哪些查询。

我们的扩展活动会话当前配置:

我们添加了以下事件。我们在服务器中为我们的数据库应用了过滤器。我们正在写入限制为 5 GB 的磁盘文件目标并回收文件,以避免文件系统膨胀。

  • module_end(附加事件字段:语句)
  • rpc_completed(附加事件字段:语句)
  • sql_batch_completed(附加事件字段:批处理文本)

我们正在捕获以下全局字段。

  • 客户端应用程序名称
  • database_id
  • nt_username
  • sql文本
  • 用户名

但是,即使是上面的一个,对于生产系统来说也是压倒性的。所以,我们正在努力减少捕获量。

我们针对最小扩展事件的计划变更捕获:

  • 除数据库过滤器外,应用过滤器以从事件捕获中删除已知用户
  • 只需捕获 rpc_completed、sql_batch_completed 事件
  • 只需捕获client_app_name,database_id,username全局字段,因为我们可以从事件字段中获取sql语句:语句

我们的问题: 请建议,我们是否在最小配置模式下配置了扩展事件会话。或者您是否建议对活动会话进行更多更改。

谢谢你的帮助。

更新:我们的修改脚本供参考