为什么更喜欢扩展事件而不是 sp_WhoIsActive 和查询存储?

J. *_*ini -4 monitoring sql-server extended-events query-store sp-whoisactive

如果我想知道现在发生了什么,那么我会使用 Adam Machanic 的sp_whoisactive。如果我想了解我的服务器最近发生了什么,那么我将使用查询存储。

扩展事件旨在取代 Profiler,但我认为查询存储的组合sp_whoisactive已经在 2016 或更高版本的任何 SQL Server 上做到了这一点。考虑到这一点,我什么时候会使用扩展事件?

为了获得灵感,我检查了dbatools 附带的扩展事件。我没有留下深刻的印象。它们似乎只对长期监控查询存储不存储的内容有用。例如:某些登录正在执行的操作、锁定、极其特定的 IO 类型、存储过程参数的使用以及已弃用的功能的使用。这些都很好,但坦率地说,我无法想象自己必须在服务器上进行如此外科手术式的调整。有没有我遗漏的常见用法?

Zik*_*ato 5

不同的工具适合不同的工作。

  1. 查询存储(QS)聚合了单个数据库的查询性能数据。
  2. WhoIsActive 提供服务器上当前发生的情况的快照。
  3. 扩展事件 (XE) 提供 2,400 多个事件。虽然 XE、QS 和动态管理对象 (DMO) 之间存在一些重叠,但大多数 XE 跟踪其他地方无法获得的信息。

我经常使用 XE 的目的

  • SQL Server的审计工具是建立在XE之上的。我创建了自己的自定义版本来仅跟踪相关更改
  • 使用分支逻辑、嵌套和动态 SQL 调试存储过程。我可以看到代码采用的确切路径
  • 监控整个服务器的过程超时并收集输入参数
  • 监控阻塞和死锁以供后续分析
  • 调试AlwaysOn可用性问题
  • 收集 SQL 错误并解析调用堆栈
  • 监视查询存储设置中的更改

还有很多。这是我最喜欢的工具之一,也是我博客上的顶级标签 - https://straightforwardsql.com/tags/extended-events/