在性能分析过程中,经常遇到性能瓶颈出现在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. TypedArray & ArrayBuffer

    TypedArray & ArrayBuffer Type Each element size in bytes Int8Array 1 Uint8Array 1 Uint8ClampedAr ...

  2. ES6 Generator vs ES6 async/await

    ES6 Generator vs ES6 async/await next yield promise refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...

  3. Vue Big Changes All in One

    Vue Big Changes All in One Vue 重大更新 Vue Versions Vue 版本变更 Vue 3.x Vue 2.x refs vue lifecycle https:/ ...

  4. how to remove git commit history

    how to remove git commit history 如何删除 GitHub 仓库的历史数据 git filter-branch remove GitHub git commit hist ...

  5. front-end & web & best code editor

    front-end & web & best code editor 2019 VS Code https://designrevision.com/best-code-editor/ ...

  6. HTML5 & custom element & template

    HTML5 & custom element & template template https://codepen.io/xgqfrms/pen/eYYExvp https://cs ...

  7. js 检测浏览器开发者控制台是否被打开

    var element = new Image(); Object.defineProperty(element, "id", { get: function () { debug ...

  8. js showOpenFilePicker showSaveFilePicker showDirectoryPicker API

    选择文件,获取文件句柄 btn.addEventListener("click", async (e) => { try { const hFiles = await win ...

  9. zsh all in one

    zsh all in one zsh https://ohmyz.sh/ # install $ sh -c "$(curl -fsSL https://raw.github.com/ohm ...

  10. NGK主网上线后内存价格上涨30倍,NGK RAM是否值得买入?

    美国加州时间10月14日上午10时,NGK主网正式上线.因为市场预期向好,NGK上线以后迎来了大涨,NGK的代币价格上涨了10倍,内存价格上涨了30倍.目前,NGK上线已经有五天的时间,盘面上已经出现 ...