在性能分析过程中,经常遇到性能瓶颈出现在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. node os env reader

    node os env reader node-os-env-reader.js #!/usr/bin/env node "use strict"; /** * * @author ...

  2. js showOpenFilePicker showSaveFilePicker showDirectoryPicker API

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

  3. bowser checker & UA

    bowser checker & UA navigator.userAgent; https://developer.mozilla.org/en-US/docs/Web/HTTP/Brows ...

  4. Win10安装VSCode并配置Python环境 完整版超详细简单【原创】

    我们分为三个步骤进行: 一.下载VSCode 二.配置Python环境 三.测试Python 一.下载VSCode 1.打开国内镜像vscode下载地址,即可自动下载:https://vscode.c ...

  5. 开源OA办公平台搭建教程:O2OA+Arduino实现物联网应用(二)

    O2OA平台搭建 O2OA的开发环境非常简单,安装服务器后即可通过浏览器进行开发了和使用.具体可参考文档库中的其他文档,有比较详细的介绍,这里就不再赘述了. Arduino开发发环境搭建 安装Ardu ...

  6. 5. vue常用高阶函数及综合案例

    一. 常用的数组的高阶函数 假设, 现在有一个数组, 我们要对数组做如下一些列操作 1. 找出小于100的数字: 2. 将小于100的数字, 全部乘以2: 3. 在2的基础上, 对所有数求和: 通常我 ...

  7. Vue学习笔记-django-cors-headers安装解决跨域问题

    一  使用环境: windows 7 64位操作系统 二  jango-cors-headers安装解决跨域问题(后端解决方案) 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的 ...

  8. centos 修改系统时间

    centos 修改系统时间 [echo0282@instance-1 ~]$ sudo timedatectl set-timezone Asia/Shanghai   timedatefctl li ...

  9. Ctfweb(2)

    CTFwebshow(2): phps源码泄露 思路:第一次接触phps这个后缀,第一眼打开的时候是想着用御剑去扫目录,但是很遗憾没有扫到index.phps,然后用burp抓包返回包信息也没有看到端 ...

  10. 2021-2-27:Linux 下如何优化 Java MMAP 写入

    主要是调整 pdflush 相关参数. 在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到 ...