在性能分析过程中,经常遇到性能瓶颈出现在SQL的情况,此类问题通常可以分为两大类场景,一是SQL自身性能差导致的慢,如索引缺失、索引失效、统计信息不准确、SQL过于复杂等;二是由于外部原因等待导致的SQL执行慢,如某些系统资源导致的等待、数据资源争用导致的会话阻塞等。

  对于SQL慢的情况,通常可以采用会话跟踪+单独执行验证的方式进行分析。单独执行也就是将慢的SQL拿到plsql、ssms等客户端工具执行看其响应情况;会话跟踪即在SQL执行过程中使用DBSQLMonitor工具跟踪数据库会话,查看SQL执行时段的会话状态及等待类型。

跟踪思路:

(1)问题跟踪

开启DBSQLMonitor,设置跟踪所有会话,监控时间间隔5s,如果目标SQL单次执行耗时较短,可以通过缩短监控时间间隔或多次验证方式进行跟踪。

此处以DBSQLMonitor为例进行示例。对于无法使用DBSQLMonitor工具的环境,在问题跟踪过程中,通过多次手动查询DB会话也可以实现相同目的。

(2)问题分析

对于SQL慢的情况,只需关注running/active状态的会话即可,因此,可以直接过滤status状态为active,并选择执行SQL相关的进程名称。然后查找关注的SQLText即可。

  找到目标SQL对应的会话之后,检查会话状态即日志中的Blocked列,如果blocked列为0的话,表示当前会话未被阻塞;blocked列不为0,则表示当前会话被blocked列所示值的会话阻塞,如此依次查找直至找到阻塞其他会话,且自身未被其他会话阻塞的即为阻塞源。找到阻塞源后,进一步检查阻塞源会话状态,如果阻塞源会话为running/active等执行中状态,则表示阻塞源会话相关SQL执行慢导致,后续需进一步分析阻塞源SQL慢的原因;如果阻塞源会话为sleeping/Inactive等空闲状态,则表示阻塞源会话SQL已经执行完,但是其所在事务未提交,后续需从事务角度检查是否存在事务未提交等问题。

  如果目标SQL对应的会话未被阻塞,则需要结合等待类型进一步分析,会话等待类型对应会话日志中对应的是lastWaittype列。由于每种数据库等待类型较多,此处不再详细列举,可以直接复制等待类型,查询相关类型含义即可。

(3)SQL优化

针对(2)分析结论,如果涉及资源瓶颈或数据库配置导致的SQL执行慢,则联系客户或数据库运维团队协助处理即可。

对于SQL自身性能差导致的执行慢的场景,则可以检查下索引是否完整、有效、统计信息是否过旧等。如通过索引等手段优化无效,则建议考虑对SQL进行等价改写,降低SQL复杂度。

常见数据库会话查询脚本:https://www.cnblogs.com/wang-xiaohui/p/14613312.html

DB性能瓶颈分析思路的更多相关文章

  1. Java应用性能瓶颈分析思路

    1 问题描述 因产品架构的复杂性,可能会导致性能问题的因素有很多.根据部署架构,大致的可以分为应用端瓶颈.数据库端瓶颈.环境瓶颈三大类.可以根据瓶颈的不同部位,选择相应的跟踪工具进行跟踪分析. 应用层 ...

  2. enode框架step by step之框架要实现的目标的分析思路剖析1

    enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...

  3. CPU利用率异常的分析思路和方法交流探讨

    CPU利用率异常的分析思路和方法交流探讨在生产运行当中,经常会遇到CPU利用率异常或者不符合预期的情况,此时,往往暗示着系统性能问题.那么究竟是核心应用的问题?是监控工具的问题?还是系统.硬件.网络层 ...

  4. mysql性能瓶颈分析、性能指标、指标搜集方法与性能分析调优工具

    本文主要讲解mysql的性能瓶颈分析.性能指标.性能指标信息的搜集工具与方法.分析调优工具的使用. 文章尚未完成. 性能瓶颈: 慢.写速度比读速度慢很多  主要的性能指标: 访问频度, 并发连接量, ...

  5. 通过Thrift访问HDFS分布式文件系统的性能瓶颈分析

    通过Thrift访问HDFS分布式文件系统的性能瓶颈分析 引言 Hadoop提供的HDFS布式文件存储系统,提供了基于thrift的客户端访问支持,但是因为Thrift自身的访问特点,在高并发的访问情 ...

  6. so静态分析进阶练习——一个CreakeMe的分析思路

    i春秋作家:HAI_ 原文来自:https://bbs.ichunqiu.com/thread-41371-1-1.html 说明 拿到一个CreakeMe,写一个分析思路.CreakMe主要是对.s ...

  7. Benchmark Web App 性能瓶颈分析与性能测试工具的使用方法总结

    主要分为以下几个要素的指标: Disk IO . CPU . mem . Net . MySQL Web性能测试工具: 客户端 服务器端: 服务器性能测试工具: 服务器性能瓶颈分析工具: ab, si ...

  8. 通过 Java 线程堆栈进行性能瓶颈分析

    改善性能意味着用更少的资源做更多的事情.为了利用并发来提高系统性能,我们需要更有效的利用现有的处理器资源,这意味着我们期望使 CPU 尽可能出于忙碌状态(当然,并不是让 CPU 周期出于应付无用计算, ...

  9. 通过Java 线程堆栈进行性能瓶颈分析

    改善性能意味着用更少的资源做更多的事情.为了利用并发来提高系统性能,我们需要更有效的利用现有的处理器资源,这意味着我们期望使 CPU 尽可能出于忙碌状态(当然,并不是让 CPU 周期出于应付无用计算, ...

随机推荐

  1. 使用 js 实现一个简易版的 async 库

    使用 js 实现一个简易版的 async 库 具有挑战性的前端面试题 series & parallel 串行,并行 refs https://www.infoq.cn/article/0NU ...

  2. Free Serverless

    Free Serverless BFF https://cloud.google.com/functions/ 微服务 Function as a Servcie,FaaS https://segme ...

  3. export excel

    export excel sheet.js https://sheetjs.com/ https://github.com/SheetJS/sheetjs excel.js https://www.n ...

  4. WEB 硬件设备联网

    在js中与第三方设备的通信 这是一个Xbox One手柄的demo,将手柄使用USB连接到PC上: See also: video Device APIs 通过JavaScript与蓝牙设备通信 在网 ...

  5. js 截取固定长度字符串但不打断单词

    适用地方:英文网站中,比如面包屑导航处新闻标题过长.用css截取文本简介时将单词打断   // 使用方法 // 1.复制下面函数 // 2.调用 // 3.填参数  sliceString(targe ...

  6. [转]c++使用thread类时编译出错,对‘pthread_create’未定义的引用

    转载地址:https://blog.csdn.net/wuhui20091515/article/details/52531202 例子1 #include <iostream> #inc ...

  7. 移动端时间回显iphone出现的问题

    new Date(item.startTime.replace(/-/g, '/') dateFormat('hh:mm', new Date(item.startTime.replace(/-/g, ...

  8. iOS拍照定制之AVCapturePhotoOutput

    问题 领导安排任务,写个拍照功能,界面跟系统拍照有点出入 拍完照片,底部显示已拍照片,有个拍照上限[在此不论] 点击已拍照片,可以预览.放大缩小查看 思路 系统拍照肯定不行了,只能定制,没提是否拍照禁 ...

  9. SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理

    SpringBoot中配置字符编码一共有两种方式 方式一: 使用传统的Spring提供的字符编码过滤器(和第二种比较,此方式复杂,由于时间原因这里先不介绍了,后续补上) 方式二(推荐使用) 在appl ...

  10. js 浮点运算bug

    js几个浮点运算的bug,比如6.9-1.1,7*0.8,2.1/0.3,2.2+2.1 实现思路 通过将浮点数放大倍数到整型(最后再除以相应倍数),再进行运算操作,这样就能得到正确的结果了 比如:1 ...