SQL Server SQL语句跟踪之Profiler

0    25    1

Tags:

👉 本文共约1993个字,系统预计阅读时间或需8分钟。

简介

图片

SQL 语句跟踪,是DBA必备的一项技能。在日常运维中,主要用于性能问题排查、业务问题排查、慢SQL跟踪、死锁跟踪、审计等。

在实际场景中,我曾遇到过多种需要进行SQL跟踪排查问题的案例。某个产品功能,开发与用户操作都没提示错误,但功能操作结果是异常的,这种时候他们就找到DBA进行实时SQL跟踪排查。类似的,多租户操作异常问题,按某个租户进行SQL跟踪排查。

我们可以定义两种SQL 跟踪,一种是长期跟踪,一种是临时跟踪。

  • 长期跟踪,通常为性能与审计相关的跟踪,如慢SQL、死锁、审计、等待/堵塞等,将长期为系统解决性能及安全问题。
  • 临时跟踪,主要用在临时的异常功能排查、SQL语句性能、客户问题排查。

那么有哪些工具和方法可以跟踪呢?

一、SQL Server Profiler

SQL Server Profiler 是 SQL Trace 的图形用户界面,用于监视数据库引擎或者分析服务的实例。SQL Server Profiler 现主要用于临时的 SQL 语句跟踪,并保持实时刷新。当然,它可以将数据保存到文件或者保存到表中(不过仍需要保留界面实时刷新)。

图片

SQL Server Profiler 有二十多个事件类(下图),点击左下方的“显示所有事件”则可全部显示,每个事件类有多个事件可选跟踪。右下角的“列筛选器”,可以对某个字段进行筛选跟踪。如跟踪耗时(Duration)大于某个时间的事件、跟踪某个数据库或用户产生的事件等。

图片

SQL Server Profiler 工具需要界面实时刷新,短期跟踪非常不方便,因为UI刷新需要缓存较多数据。使用 T-SQL 创建也是比较方便的,如 sp_trace_create 等存储过程创建事件跟踪。有一种比较方便的方法,可以将 SQL Server Profiler 定义好的跟踪生产 SQL 脚本。(在 Profiler 中点击菜单“文件”—>导出——>编写跟踪定义的脚本——>适用于 SQL Server 2005 - 2019)

图片

生成的脚本需要调整一下,设置保存文件路径、文件大小等。不过一定要注意,千万别配置 SHUTDOWN_ON_ERROR,避免因为错误而将实例服务停止。

SQL Server Profiler 是一个比较开销资源相对大的工具,避免在生成环境中使用,避免对所有的 SQL 语句进行跟踪。如果进行长期的 SQL 跟踪,建议使用扩展事件。

二、扩展事件 (XEvents)

扩展事件完全替换了 SQL 跟踪和 SQL Server Profiler 功能。扩展事件具有高度可配置性、轻量级和很好的缩放能力。扩展事件是使用最少性能资源的轻型性能监视系统。SQL Server Management Studio 提供了一个图形用户界面,供扩展事件用于创建和修改会话以及显示和分析会话数据。

图片

使用扩展事件,我们可以跟踪慢 SQL、死锁、堵塞、审计等。如下示例,创建慢 SQL 跟踪。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

长期跟踪的扩展事件,我们通常将数据库保存到文件中,方便后续读取。但扩展事件保存的是 XML 类型的数据。需要通过系统函数 fn_xe_file_target_read_file 读取文件内容,并解析 XML 字段数据。示例参考如下。

SQL Server Management Studio 可以在线查看目标数据,可以进行数据筛选、分组、排序等,非常方便。

图片

三、‍XEvent 探查器

SQL Server Management Studio 提供了一个非常快捷的 SQL 跟踪功能——XEvent 探查器。XEvent 探查器可显示扩展事件的实时查看器窗口。不同于 SQL Profiler,XEvent 探查器直接集成到 SSMS,基于 SQL 引擎中可缩放的扩展事件技术,对运行的 SQL 服务器具有更低的侵入性。

打开 SSMS 的对象资源管理器,在连接实例的最下方,就是 XEvent 探查器,双击“标准”或者“TSQL”可立即打开跟踪窗口跟踪SQL。

图片

总结

以上三种方法主要用于对 SQL 语句的跟踪,还有多种事件跟踪。SQL 跟踪的目的是解决系统问题、保证系统安全稳定运行。

SQL Server 的跟踪,还有默认跟踪(default trace enabled)、数据收集、Windows性能计数器、MSSQL 实例性能计数器(sys.dm_os_performance_counters)、审核(审计)、服务器触发器、SQL Server日志、错误日志、查询存储、SQL缓存等待。跟踪是为了方便解决问题,了解跟踪方法可以提高我们定位问题能力。

参考

https://mp.weixin.qq.com/s/xy8xeqv0qXWH5WHhePHrTw

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部