Oracle-数据库性能变慢问题分析

news2024/11/19 5:35:21

问题背景:

        应用运维报障说最近两天业务数据入库和表查询都变得很慢,需要排查一下数据库的性能问题

问题分析:

        登录到服务器上,通过TOP命令快速看了一下,服务器整体的CPU使用%usr不算特别高,但%wa IO等待很高,怀疑有可能是数据库存在大量的IO操作语句导致服务器IO负载升高

        查询数据库的负载dbtime时间,可以看到数据库的负载明显变高,平常只有几百的dbtime值,从2024年1月1日13点左右之后开始飙升,最高达到7000+

e7b1b94b0a141fa8b2aa6637cfe13412.png

        对比1月1日13点前后的等待事件情况,发现13点之后的IO等待事件db file sequential read以及direct path read等待事件明显多了几个数量级,等待事件的类型与看到的服务器IO等待负载升高匹配,可以确认数据库肯定存在大量的IO操作

select event,count(*)
from DBA_HIST_ACTIVE_SESS_HISTORY a
where  to_char(sample_time,'yyyymmdd hh24:mi:ss')>='20240101 13:00:00'
and to_char(sample_time,'yyyymmdd hh24:mi:ss')<='20240102 16:00:00'
group by event 
order by 2;

        正常时间段

 

7473518cc990a7de78e1af9c4d75fbbc.png

        性能缓慢,IO等待高时间段

 

6ace0addd9181d12ebbf33a985dd779b.png

        进一步查看IO等待事件db file sequential read以及direct path read每小时的增长趋势,可以看到在13点之后,IO等待事件出现了显著的增长

select to_char(sample_time,'yyyymmdd hh24'),event,count(*)
from DBA_HIST_ACTIVE_SESS_HISTORY a
where   event in('direct path read','db file sequential read')
group by to_char(sample_time,'yyyymmdd hh24'),event
order by 1;

 

5a1ab01ee35b63424ecd3aedcbb2335c.png

        分析IO等待事件引发的sql语句,可以看到TOP主要有4条语句sql:8aq5bt0k6jb4d、3s559a2uc2xk0、3nd18t4tmv0mz、25dy6q436ch3k

select sql_id,count(*)
from DBA_HIST_ACTIVE_SESS_HISTORY a
where  to_char(sample_time,'yyyymmdd hh24:mi:ss')>='20240101 13:00:00'
and to_char(sample_time,'yyyymmdd hh24:mi:ss')<='20240102 16:00:00'
and event in ('db file sequential read','direct path read')
having count(*)>50000
group by sql_id 
order by 2;

 

eff4af5e9e143e9f446c1ef76862be89.png

        分析第一条SQL:8aq5bt0k6jb4d

        查看语句的执行计划,可以看到语句的执行计划发生了改变,在1月1日13点生成了一个高消耗的执行计划,执行次数628次,平均消耗时间6583秒,逻辑读和物理读次数都很高平均100W+,而正常的执行计划执行时间都在10秒以内,,物理读次数在1000次以内

        从执行计划的生成时间与数据库负载变高时间一致以及语句的逻辑读和物理读消耗,基本可以确认数据库的性能缓慢与这个语句有关

 

521c997eda36646aa6181138bba296e1.png

a06c33d9fb2e95365b68ce649822d5ed.png

        分析语句的高消耗执行计划,语句里面唯一的大表TAB_MR,大小157628MB,作为了nested loop的驱动表,并且执行的路径是全表分区范围扫描

 

623defc51a01877aebbae01bb9c15675.png

 

089b795799582084352fe08e6e571531.png

        表TAB_MR根据时间条件t.syn_time查询数据

 

fafd80f8290ea8e413b7d833553897af.png

        跟正常的执行计划对比,可以看到正常的执行计划是使用到了分区本地索引IDX_TAB_MR_SYN_TIME,而不是全表分区范围扫描

 

6a4a3ef8f72f74c96d68d6e337e77a8e.png

        检查分区表以及索引的统计信息,都发现1月份之后的统计信息与实际表的数据差异很大,实际一天的分区有几十万的数据

--查看分区表的统计信息
select table_owner, table_name, partition_name, AVG_ROW_LEN ,num_rows, blocks*8/1024 size_m,last_analyzed
from dba_tab_partitions where table_name='SALES_LIST'
--查看索引的统计信息
select owner,index_name,PARTITION_NAME,SUBPARTITION_NAME,LEAF_BLOCKS,DISTINCT_KEYS,LAST_ANALYZED
from dba_ind_statistics
where table_owner='TEST' and table_name='SALES_LIST';

 

df2aac0a7b3e20ff3c94ef09ce96fbd6.png

        查看语句传入的绑定变量值,发现传入的都是查询最新1月份的数据,可以判断执行计划选错执行路径的原因为统计信息的不准确导致优化器估算出现错误,选择了全表扫描的路径

 

d4e01f8fe99c9a8cbb31eac7ec422aaf.png

        分析第二条SQL:3sruu5v9gtysg

        语句是一条正常的普通insert语句,执行计划没有可以分析的,查看语句的执行消耗变化情况,可以看到在13点之后,语句的IO_WAIT等待时间变得很高,可以判断语句应该是受到系统负载IO变慢所影响的

 

561d872d9eb87440b102a992e1a6141f.png

        分析第三条SQL:3sruu5v9gtysg

        跟第二条语句类似,在执行计划没有变化的情况下,语句的IO_WAIT等待时间变得很高,语句同样也是受到系统负载IO变慢所影响的

 

1356adb3a0096482cc1813db02e6106d.png

        分析第四条SQL:3sruu5v9gtysg

        查看语句的执行计划,可以看到语句的执行计划也发生了改变,在1月1日13点生成了一个高消耗的执行计划,执行次数7149次,平均消耗时间7.374秒,物理读和逻辑读比起正常的执行计划消耗都增长了很多,而正常的执行计划执行时间都在0.0005秒以内,平均只有10次的逻辑读

6f66a79f29d883956ea3fc5924844ce4.png

        查看语句的执行计划,跟第一条语句是同一张表语句TAB_MR,同样的问题,优化器选错了执行的路径进行全表单分区范围扫描

bfa756ca299e621157816ac40a074d95.png

        分析完这4条TOP SQL可以对问题做个总结了,数据库从2024年1月1日13点左右负载明显升高,主要的负载为IO操作,IO操作负载升高的原因为大表TAB_MR的2024年1月份之后的分区统计信息不准确,导致涉及1月份数据的查询SQL生成了错误的高消耗全表分区扫描执行计划,产生了大量的物理读以及逻辑读,最终引发了整个数据库的性能下降,业务数据入库和表查询都变慢

问题解决:

        对大表TAB_MR1月份的分区单独收集统计信息后,语句的执行计划恢复了正常,数据库的IO负载也降下来、

其他问题:

        最后还有一个问题就是关于统计信息收集的,数据库是有开启默认的自动统计信息收集的,单个分区的数据变化量也超过了10%,为什么表的统计信息到1月2号还没有更新

 

dd4123ab097393ad78a0f76c5b7514a1.png

 

61a12b328994b650c1c5e260cf6852df.png

        查看统计信息job的执行记录,可以看到2024年1月1日的统计信息收集在晚上22点有正常的开始执行,但是最后统计信息收集的job由于4个小时的执行窗口时间已到,job被迫暂停了(REASON="Stop job called because associated window was closed"),也就是任务有跑,但没收集完成

        注:周一到周五默认统计信息收集窗口4个小时,周六周日默认统计信息收集窗口20个小时

        通常统计信息没有在4个小时窗口执行完成的可能原因有1 数据库要收集的表数据量过大 2 数据库的性能出现问题,导致收集缓慢 3 统计信息收集的并行度不合理,导致收集速度过慢 4 Oracle的bug,结合统计信息收集的历史完成时间都在2小时以内以及收集时间段存在IO负载高的问题,判断统计信息收集还是受到数据库的性能下降所影响

 

7cceb443523ee3bbc69d375e51052897.png

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库与SQL

数据库与SQL 学习链接数据库关系型数据库管理系统&#xff08;RDBMS&#xff09; SQLSQL介绍SQL类型SQL 基础语言学习创建表&#xff08;create table&#xff09;语法 数据类型SQL最常用的数据类型 学习链接 基础篇&#xff1a;数据库 SQL 入门教程 数据库 用于存储数据 存放…

centos下系统全局检测工具dstat使用

目录 一&#xff1a;没有需要安装 二&#xff1a;dstat命令参数 三、监测界面各参数含义&#xff08;部分&#xff09; 四、dstat的高级用法 一&#xff1a;没有需要安装 yum install dstat 二&#xff1a;dstat命令参数 有默认选项&#xff0c;执行dstat命令不加任何参数…

docker完成redis 三主三从

文章目录 关闭防火墙启动docker后台服务新建6个docker容器redis实例创建并运行docker容器实例 进入容器redis-node-1并为6台机器构建集群关系链接进入6381作为切入点&#xff0c;查看集群状态主从容错切换迁移案例容错切换迁移 主从扩容案例为主节点6387分配从节点6388主从缩容…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

List集合遍历过程中修改元素(有坑)

说来惭愧&#xff0c;学 java 2年了&#xff0c;对 “Java是值传递” 这句话还没有理解它的精髓&#xff0c;以至于编程的时候出现了一些错误&#xff0c;这里记录一下。 一.问题再现 1.1将List集合中的每个字符串更改为其他值 1.2将List集合中的对象更改为其他对象 二.问题分…

Socket编程-IO模型

1、首先IO模型的内容。 感觉可以简单理解为&#xff1a;我们写代码时&#xff0c;在基础的 IO 操作上做了一些其他的策略&#xff0c;根据策略的不同&#xff0c;一般有阻塞IO和非阻塞IO 1、阻塞IO 就是在操作的时候&#xff0c;比如网络通信中&#xff0c;某一线程使用下面这…

【Web】CTFSHOW PHP特性刷题记录(全)

知其然知其所以然&#xff0c;尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…

【QML COOK】- 007-Item对象、信号和槽

信号&#xff08;signal&#xff09;和槽&#xff08;slot&#xff09;是Qt的独特的设计&#xff0c;自然在QML中也被支持。 Item是QML所有类型的基类&#xff0c;Item类型不会显示在窗口上&#xff0c;但是可以支持信号和槽。本节就用Item编写一个信号和槽的实例。 1. 创建Q…

【Spring 篇】走进SpringMVC的世界:舞动Web的激情

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于SpringMVC的博客&#xff0c;让我们一起探索这个舞动Web的框架&#xff0c;感受它带来的激情和便利。在这个世界里&#xff0c;我们将学到SpringMVC的概述、开发步骤以及如何快速入门&#xff0c;一切都是如此的令人兴奋…

数据分析实战丨基于flask+pygal可视化分析sqlite中的数据

文章目录 写在前面实验目标项目框架实验内容1.配置实验环境2.查看sqlite3数据库的数据3.创建项目文件4.编写代码5.运行项目 运行结果写在后面 写在前面 本期内容&#xff1a; 基于FlaskPygal可视化分析Sqlite3中的数据 实验环境&#xff1a; pythonpygalflask 项目下载地址…

Cocos 使用VsCode调试-跨域问题

解决方案&#xff1a; 在添加完debug配置后 在项目文件夹中打开vscode然后找到launch.json 这个runtimeArgs参数在原本的配置中是没有的,给他添加上去 "runtimeArgs": ["--disable-web-security" ] 原理: 禁用浏览器跨域检查&#xff08;仅用于调试&…

msvcp140.dll丢失的常见问题,msvcp140.dll丢失的几种解决办法分享

在电脑系统中&#xff0c;msvcp140.dll是一个重要的系统文件&#xff0c;其作用是为应用程序提供所需的功能和支持。然而&#xff0c;有时候我们可能会遇到msvcp140.dll文件丢失的情况&#xff0c;导致我们无法正常使用某些程序或游戏。本文将介绍msvcp140.dll丢失的常见问题、…

polar CTF 写shell

一、题目 <?php /*PolarD&N CTF*/highlight_file(__FILE__);file_put_contents($_GET[filename],"<?php exit();".$_POST[content]);?>二、解题 payload ?filenamephp://filter/convert.base64-decode/resourceshell.php #<?eval($_POST[1]);…

openGauss学习笔记-197 openGauss 数据库运维-常见故障定位案例-分析查询语句是否被阻塞

文章目录 openGauss学习笔记-197 openGauss 数据库运维-常见故障定位案例-分析查询语句是否被阻塞197.1 分析查询语句是否被阻塞197.1.1 问题现象197.1.2 原因分析197.1.3 处理办法 openGauss学习笔记-197 openGauss 数据库运维-常见故障定位案例-分析查询语句是否被阻塞 197.…

【LV12 DAY17-18 中断处理】

GPX1_1是外部中断9 EINT9 查询可知其中断ID是57 所以需要进行人为修正lr的地址 sub lr&#xff0c;lr&#xff0c;#4 //iqr异常处理程序 irq_handler: //IRQ异常后LR保存的地址是被IRQ打断指令的下一条再下一条指令的地址&#xff0c;所以我们需要人为进行修正一下sub LR,L…

Linux下如何快速调试I2C设备

Linux下如何快速调试I2C设备 目录 1 什么场景下需要快速调试I2C设备 2 如何快速调试I2C设备 3 如何获取I2C Tools工具集 3.1 获取I2C Tools工具集源码 3.2 编译I2C Tools工具集源码 3.3 为设备添加I2C Tools工具集 4 如何使用I2C Tools工具集 5 小结 1 什么场景下需要快…

vue2配置教程

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目&#xff0c;运行项目

堆排序——高效解决TOP-K问题

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言什么是堆&#xff1f;建堆堆排序&#xff1a;排序的最终结果 堆排序实现函数声明交换函数 Swap下沉调整 DnAdd堆排序函数 HeapSort主函数 文件中找…

day-09 删除排序链表中的重复元素

思路 从前往后遍历链表&#xff0c;当当前节点的值与下一个节点值相等时&#xff0c;删除下一节点&#xff1b;否则向后移动一个节点&#xff0c;继续遍历 解题方法 while(p!null&&p.next!null){ if(p.next.valp.val)p.nextp.next.next;//当前节点的值与下一个节点值相…

WorkPlus卓越的即时通讯工具,助力企业提升工作效率

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而即时通讯作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的即时通讯工具&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通和协作的…