背景

客户反馈系统突然运行非常缓慢,持续了近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,要注意以下几点

  1. 选择必要的跟踪事件,尤其对于存储过程子语句相关的跟踪事件一定要谨慎使用;

  2. 设置合适的筛选条件避免大量的跟踪。例如利用LoginName、ApplicationName、ClientProcessID、HostName、Duration等进行筛选,避免对TextData字段的模糊查找;
  3. 在数据库服务器上开启Profiler,可以避免跟踪事件通过网络传输到其他机器的时间;
  4. 使用扩展事件替代Profiler。

Profiler导致的严重性能问题的更多相关文章

  1. SQL Server Profiler监控SQL Server性能

    全面掌握SQL Server Profiler 1.       原理与相关概念介绍 SQL Server Profiler,大家已经非常熟悉.常常在性能优化中使用,本文档详细介绍SQL Server ...

  2. MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

    [问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...

  3. PLSQL_统计信息系列10_统计信息过旧导致程序出现性能问题

    2014-11-15 Created By BaoXinjian

  4. MySQL Index--关联条件列索引缺失导致执行计划性能不佳

    某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob ...

  5. 一条sql导致数据库整体性能下降的诊断和解决的全过程

    今天早上一来,数据库load就比往常高了许多.想想数据库唯一的变化是昨天早上我曾经重新分析过数据库对象. [@more@] 发现数据库load很高,首先看top发现没有特别异常的进程,在数据库中适时抓 ...

  6. 自定义函数导致的sql性能问题

    同事说,某某报表跑的很慢,让我调查一下 优化前:该报表整体需要跑4小时以上. sql代码如下 SELECT /*省略多数查询字段*/ REP_FUN_REFCODEVALUE /*自定义函数*/ (P ...

  7. MySQL字符集不一致导致查询SQL性能问题

    今天做了一个MySQL数据库中的SQL优化. 结论是关联字段字符集不同,导致索引不可用. 查询的SQL如下: select `Alias`.`Grade`, `Alias`.`id`, `Alias` ...

  8. SQLServer聚集索引导致的插入性能低

    1,新表默认会在主键上建立聚集索引.对于非专业DBA, 默认配置在大多数情况下够用. 2,当初为了优化查询速度. 把聚集索引建立在非自增主键的唯一索引列. 数据量上千万后,插入性能开始显现不足. 随着 ...

  9. NUMA导致的Oracle性能问题

    背景简介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover过程中,遇到了一个极其诡异的问题,一条主业务的SQL语句在新主库 ...

  10. ES JVM使用如果超过75%就会GC较多,导致ES索引性能下降

    转自:https://www.elastic.co/guide/en/cloud/current/ec-metrics-memory-pressure.html Scenario: How Does ...

随机推荐

  1. Hadoop生态系统—数据仓库Hive的安装

    一.数据仓库 数据仓库是一个面向主题的.集成的.随时间变化,但信息本身相对稳定的数据集合,相比于传统型数据库,它主要用于支持企业或组织的决策分析处理.主要有以下3个特点: 数据仓库是面向主题的: 数据 ...

  2. DelCrLfSpace V0.9

    开发界面 Option Explicit 'SourceTextBox 是上面的源框 'ResultTextBox 是下面的处理预览框 'Form KeyPreview = True Private ...

  3. Mysql InnoDB Redo log

    一丶什么是redo innodb是以也为单位来管理存储空间的,增删改查的本质都是在访问页面,在innodb真正访问页面之前,需要将其加载到内存中的buffer pool中之后才可以访问,但是在聊事务的 ...

  4. Day03.1:初学者安装IDEA后需要知道的小技巧

    初学者安装IDEA后需要知道的小技巧 1.输入psvm直接生成 main方法 2.输入sout可以直接生成输出语句 3.代码放大设置 4.注释颜色更改 5.代码字体大小通过Ctrl+鼠标滑轮控制的设置 ...

  5. promise 的串行执行

    function pri (num) {   return new Promise((resolve,reject) => {     console.log('开始'+num)     res ...

  6. 【翻译】Thymeleaf – Spring Security集成模块

    原文链接:Thymeleaf - Spring Security integration modules 来源:thymeleaf/thymeleaf-extras-springsecurity自述文 ...

  7. perl使用print输入数据到文件

    #!usr/bin/perl use utf8; #引入utf8模块 脚本内的字符串使用utf8作为编码格式 binmode(STDOUT,":encoding(gbk)"); # ...

  8. SpringBoot3正式版将于11月24日发布:都有哪些新特性?

    从 2018 年 2 月 28 号发布 Spring Boot 2.0 版本开始,整个 2.X 版本已经经过了 4 年多的时间,累计发布了 95 个不同的版本,而就在前不久,2.X 系列的也已经迎来了 ...

  9. 决策树(二):后剪枝,连续值处理,数据加载器:DataLoader和模型评估

    在上一篇文章中,我们实现了树的构造,在下面的内容中,我们将中心放在以下几个方面 1.剪枝 2.连续值处理 3.数据加载器:DataLoader 4.模型评估 一,后剪枝 • 为什么剪枝  –" ...

  10. MySQL数据库:6、约束的概述及语法

    Python基础之MySQL数据库 目录 Python基础之MySQL数据库 一.约束概述 1.为什么要约束 2.什么是约束 3.约束的分类 4.查看当前表已有的约束 二.约束语法及用法 1.无符号 ...