Profiler导致的严重性能问题
背景
客户反馈系统突然运行非常缓慢,持续了近20分钟的时间,通过SQL专家云定位到有人开启了Profiler导致,但是不能定位是谁开启的,请我们协助分析。
现象
登录SQL专家云,进入实时可视化页面,在活动会话中看到在11:29~11:40期间出现了大量的有资源等待的会话。![]()
进入活动会话原始数据页面,看到几乎所有的会话都在等待,等待类型是TRACEWRITE,等待时间在100毫秒左右。
![]()
分析
通过TRACEWRITE的等待类型可以确定是有人开启了Profiler跟踪SQL语句导致的。等待现象已经在11:40消失了, 说明已经停止了跟踪。现在需要找到是谁开启的跟踪,转到慢语句页面,通过应用程序名称进行筛选。
![]()
通过特征可以确定是ID为1250的会话开启的Profiler,11:29开始,11:40结束。通过影响行数看到一共跟踪了3300多万条SQL语句,跟踪的数量太多了,这就是大量会话产生TRACEWRITE等待的原因。
![]()
进入详细信息页面就可以看到机器名和IP地址。
![]()
关于Profiler
Profiler是分析SQL Server问题的一个非常好用的工具,可以定位故障、优化性能、分析死锁等。详细参考微软官方文档:https://docs.microsoft.com/zh-cn/sql/tools/sql-server-profiler/sql-server-profiler?view=sql-server-ver16。
Profiler使用不当会造成严重的性能问题,主要有两类,第一类是跟踪到的SQL语句太多,原因是没有设置筛选条件或者筛选条件太宽泛,另外就是跟踪的事件太多,例如用SP:StmtCompleted跟踪存储过程子语句的执行,复杂的存储过程执行一次就可能产生成百上千的跟踪事件,这类现象的特征是大量会话产生TRACEWRITE的等待,很好排查;第二类是筛选条件设置不当,例如对TextData字段使用%%的模糊查询,每一个SQL语句都要进行字符串模糊查询,加重了CPU的消耗,严重时会导致CPU利用率达到100%,这类现象除了CPU利用率高外没有明显的特征,很不好排查。
所以在高并发的系统中,一定要谨慎使用Profiler,要注意以下几点
选择必要的跟踪事件,尤其对于存储过程子语句相关的跟踪事件一定要谨慎使用;
- 设置合适的筛选条件避免大量的跟踪。例如利用LoginName、ApplicationName、ClientProcessID、HostName、Duration等进行筛选,避免对TextData字段的模糊查找;
- 在数据库服务器上开启Profiler,可以避免跟踪事件通过网络传输到其他机器的时间;
- 使用扩展事件替代Profiler。
Profiler导致的严重性能问题的更多相关文章
- SQL Server Profiler监控SQL Server性能
全面掌握SQL Server Profiler 1. 原理与相关概念介绍 SQL Server Profiler,大家已经非常熟悉.常常在性能优化中使用,本文档详细介绍SQL Server ...
- MySQL Insert语句单个批次数量过多导致的CPU性能问题分析
[问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...
- PLSQL_统计信息系列10_统计信息过旧导致程序出现性能问题
2014-11-15 Created By BaoXinjian
- MySQL Index--关联条件列索引缺失导致执行计划性能不佳
某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob ...
- 一条sql导致数据库整体性能下降的诊断和解决的全过程
今天早上一来,数据库load就比往常高了许多.想想数据库唯一的变化是昨天早上我曾经重新分析过数据库对象. [@more@] 发现数据库load很高,首先看top发现没有特别异常的进程,在数据库中适时抓 ...
- 自定义函数导致的sql性能问题
同事说,某某报表跑的很慢,让我调查一下 优化前:该报表整体需要跑4小时以上. sql代码如下 SELECT /*省略多数查询字段*/ REP_FUN_REFCODEVALUE /*自定义函数*/ (P ...
- MySQL字符集不一致导致查询SQL性能问题
今天做了一个MySQL数据库中的SQL优化. 结论是关联字段字符集不同,导致索引不可用. 查询的SQL如下: select `Alias`.`Grade`, `Alias`.`id`, `Alias` ...
- SQLServer聚集索引导致的插入性能低
1,新表默认会在主键上建立聚集索引.对于非专业DBA, 默认配置在大多数情况下够用. 2,当初为了优化查询速度. 把聚集索引建立在非自增主键的唯一索引列. 数据量上千万后,插入性能开始显现不足. 随着 ...
- NUMA导致的Oracle性能问题
背景简介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新主库 ...
- ES JVM使用如果超过75%就会GC较多,导致ES索引性能下降
转自:https://www.elastic.co/guide/en/cloud/current/ec-metrics-memory-pressure.html Scenario: How Does ...
随机推荐
- Oracle索引和事务
1. 什么是索引?有什么用? 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即 ...
- Request保存作用域
Request保存作用域,作用范围是在当前请求中有效. 1.客户端重定向 2.服务器内部转发
- JavaScript基本语法(JavaScript代码嵌入方式与声明和使用变量)
.JavaScript代码嵌入方式 #①HTML文档内 JavaScript代码要写在script标签内 script标签可以写在文档内的任意位置 为了能够方便查询或操作HTML标签(元素)scrip ...
- 安装notepad++ 安装Python Python环境变量的数值。怎样在notepad++上运行Python的代码
文章目录 1.下载安装一个Python的编辑器notepad++,(我这里有现成的,也可以去网上搜很多) 2.安装python,(我这里有现成的,也可以去网上下载). 3.怎样彻底删除Python,有 ...
- SQL--存储过程的使用
存储过程的概念 存储过程类似一个函数,可以执行一条或者多条SQL语句,可带参数,可返回值 为了简化操作,方便更改和扩展,将一个事件的处理封装在一个单元中供使用. 创建存储过程 --创建存储过程(不带参 ...
- Java Stream流的使用
流相关的方法可以分为三种类型,分别是:获取Stream流.中间方法.终结方法.中间方法会返回当前流,可以方便的进行链式调用. 流不可重复使用,否则会报错: java.lang.IllegalState ...
- 机器学习中in-domine, out-domine的区别
in-domine 为域内数据,即为训练模型时使用的数据: out-domine 为域外数据,即为检验模型时使用的数据.
- OS-HACKNOS-2.1靶机之解析
靶机名称 HACKNOS: OS-HACKNOS 靶机下载地址 https://download.vulnhub.com/hacknos/Os-hackNos-1.ova 实验环境 : kali 2. ...
- Oracle 表空间常用操作
aliases: [Oracle表空间] tags: [数据库,Oracle,Blog] summary: [Oracle表空间常用操作,包括查询.分析.扩容.删除.优化等] date: ...
- WebKit策略:<foreignObject>可用于绘制svg中的html标签,但与<use>搭配不生效
在<svg>里面可以利用<foreignObject>绘制html标签,原本是我在iconfont采用Font class方式引入svg的无奈之举. 起初的设计是所有icon先 ...