在性能分析过程中,经常遇到性能瓶颈出现在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. 如何配置 webpack 支持 preload, prefetch, dns-prefetch

    如何配置 webpack 支持 preload, prefetch, dns-prefetch webpack , preload, prefetch https://webpack.js.org/p ...

  2. 微软 AI 公开课

    微软 AI 公开课 https://github.com/microsoft/ai-edu https://school.azure.cn/ https://docs.microsoft.com/le ...

  3. 抓手 & 技术管理

    抓手 & 技术管理 https://zhuanlan.zhihu.com/p/28891618 技术管理的目的 管理就是通过别人拿到结果.而管理的两个着眼点就是:成事.育人. 把事情搞定,把人 ...

  4. ts 索引签名 无视多余的属性类型

    interface SquareConfig { color?: string; width?: number; [propName: string]: any; } function asd(opt ...

  5. 开始 nx

    官网 video 详解Nx, 必读 配置代理 每次创建lib都要重启编辑器 创建项目 选择empty,然后选择Angular CLI 因为可以使用Angular Console λ npm init ...

  6. 去中心化预言机如何助力NGK DeFi 项目发展?

    早在 2014 年前后,协议智能合约就已经出现了,最初协议很笨重,包含了许多不同的部分,每个部分都是一个单独的智能合约,你需要在区块链本身的协议中添加不同的智能合约,这需要几个月甚至几年的时间,而之后 ...

  7. Java基本概念:内部类

    一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...

  8. mysql日志系统简单使用

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...

  9. 设置ViewPager 自动滑动时间,速度 方便展示动画

    ViewPager.setCurrentItem(position),即使已设置动画,但是没有动画效果 原因:因为ViewPager滑动之前的时间间隔太短,可以通过反射,去修改ViewPager自动滑 ...

  10. apiAutoTest:支持自定义函数,用例中可调用

    0. 前言 apiAutoTest从去年8月以来开源至今,也更新了不少内容,一起来看看吧 第一个版本 - 2020/08/08 增加实际响应存储数据的方法,并在字典可以处理依赖见tools/svae_ ...