oracle数据库慢查询SQL

目录

场景:

环境:

慢SQL查询一:

问题一:办件列表查询慢

分析:

解决方法:

问题二:系统性卡顿

分析:

 解决方法:

慢SQL查询二

 扩展:


场景:

线上环境出现办件列表查询非常慢大概要1分钟才刷出来,及很多功能都出现系统性卡顿。

环境:

oracle数据库,工作表历史表act_hi_proinst单表数据量一百多万

慢SQL查询一:


select *
from (select v.sql_id,
v.sql_text,
v.sql_fulltext,
v.FIRST_LOAD_TIME,
v.last_load_time,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
v.EXECUTIONS,
v.LOADS,
v.cpu_time / v.executions / 1000 / 1000 ave_cpu_time,
v.ELAPSED_TIME / v.executions / 1000 / 1000 ave_time
from v$sql v) a
where a.last_LOAD_TIME > '2024-01-01/00:00:00'  and ave_time > 5 and a.executions > 0 order by ave_time desc;

 其中各字段含义如下:

v.sql_text: 包含SQL语句的文本内容
v.sql_fulltext: 包含完整的SQL语句文本内容
v.FIRST_LOAD_TIME: SQL语句第一次加载到共享池中的时间
v.last_load_time: SQL语句最后一次加载到共享池中的时间
v.elapsed_time: SQL语句的总执行时间(以微秒为单位)
v.cpu_time: SQL语句的总CPU执行时间(以微秒为单位)
v.disk_reads: SQL语句的总磁盘读取次数
v.EXECUTIONS: SQL语句的总执行次数
v.LOADS: SQL语句的总加载次数
ave_cpu_time: 每次执行的平均CPU执行时间(以秒为单位)
ave_time: 每次执行的平均总执行时间(以秒为单位)

问题一:办件列表查询慢

办件查询列表主要涉及到如下两个SQL语句

    select * from (select a.*,rownum as num from (select RES.* ,H.NAME_ as bizName, H.XZQ_ as bizXzq, H.DUE_DATE_ as bizDueDate, H.PROC_DEF_KEY_ as bizProcDefKey, H.CATEGORY_ as bizCategory, H.DATUM_TYPE_ as bizDatumType, H.START_USER_ID_ as bizStartUserId, H.DEPT_CODE_ as bizDeptCode,H.F1_ as bizF1, H.F2_ as bizF2, H.F3_ as bizF3, H.F4_ as bizF4, H.F5_ as bizF5, H.F6_ as bizF6, H.F7_ as bizF7, H.F8_ as bizF8, H.F9_ as bizF9, H.F10_ as bizF10, H.F11_ as bizF11, H.F12_ as bizF12, H.F13_ as bizF13, H.F14_ as bizF14,H.F15_ as bizF15, H.F16_ as bizF16, H.F17_ as bizF17, H.F18_ as bizF18, H.F19_ as bizF19, H.F20_ as bizF20from gisqbpm.ACT_HI_PROCINST RESleft join gisqbpm.ACT_HI_BIZ_PROCINST H on  H.PROC_INST_ID_ = RES.PROC_INST_ID_)a where rownum<15 )b where b.num>0

线上测试1.58秒 

select count(RES.ID_) from gisqbpm.ACT_HI_PROCINST RES, gisqbpm.ACT_HI_BIZ_PROCINST H where  H.PROC_INST_ID_ = RES.PROC_INST_ID_;  

 但是分页查询总数的sql语句执行五次,5.932s,3.78s,2.89s,  2.5s,1.9s

分析:

原因是前端刚打开办件查询列表时,由于查询总数的sql语句,没有任何过滤条件导致两种表只有关联查询并没有过滤故全表扫描耗时较长。

解决方法:

由于两张关联表中数据是一对一的,因此如果仅仅考虑第一次查询慢的问题,直接可以去掉关联,单表查询的总数就可以了。

但是事与愿违,这只能解决办件查询第一进入的问题,如果有条件参数过滤的话(关联表的参数)还要加上这个关联表,后端改动有点大。

因此建议线上前端处理办件查询第一次进入时带上时间范围。

问题二:系统性卡顿

描述也不算是系统系卡顿吧,有写接口还是比较快的,只能说有很多重要的操作反应都很慢,下面是获取的当天的慢SQL。

这里挑选了几个耗时较长的简单的分析(这里面的sql是另外一个部门的)

DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate;  broken BOOLEAN := FALSE;

BEGIN pro_inert_rybjlcx_sed; :mydate := next_date; IF broken THEN :b := 1; ELSE :b := 0; END IF; END; 

1.该SQL执行(Execution)一次 ,加载(LOADS)一次 平均耗时将近一个小时。执行 pro_inert_rybjlcx_sed慢

SELECT COUNT(0) FROM (SELECT * FROM (select * from v_fwdyaq where 1=1) WHERE 1=1 )

2..该SQL执行(Execution)11次 ,加载(LOADS)216次 平均每次执行耗时接近半个小时。需要对该语句重点优化

DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate;  broken BOOLEAN := FALSE;

BEGIN sms_ts; :mydate := next_date; IF broken THEN :b := 1; ELSE :b := 0; END IF; END; 

3.该SQL执行(Execution)四次 ,加载(LOADS)2次 平均每次执行耗时25秒。加载较频繁需要重点优化行 sms_ts操作

SELECT COUNT(DISTINCT "A2"."QLBSM") FROM "BDCDJ"."DJFZ_CQZS" "A2","BDCDJ"."QLR" "A1" WHERE "A2"."QLBSM"="A1"."QLBSM" AND "A2"."QSZT"=1 AND TRIM("A2"."BDCQZH")=:1 AND "A1"."QLRMC" LIKE :2

4.该SQL执行(Execution)317次 ,加载(LOADS)29次 平均每次执行耗时9秒。执行和加载较频繁需要重点优化行

select * from ( select a.*, ROWNUM rnum from (     select RES.*, H.NAME_ as bizName, H.XZQ_ as bizXzq, H.DUE_DATE_ as bizDueDate, H.PROC_DEF_KEY_ as bizProcDefKey,        H.CATEGORY_ as bizCategory, H.DATUM_TYPE_ as bizDatumType, H.START_USER_ID_ as bizStartUserId,       H.F1_ as bizF1, H.F2_ as bizF2, H.F3_ as bizF3,H.F4_ as bizF4, H.F5_ as bizF5, H.F6_ as bizF6, H.F7_ as bizF7,        H.F8_ as bizF8, H.F9_ as bizF9, H.F10_ as bizF10, H.F11_ as bizF11, H.F12_ as bizF12, H.F13_ as bizF13, H.F14_ as bizF14,       H.F15_ as bizF15, H.F16_ as bizF16, H.F17_ as bizF17, H.F18_ as bizF18, H.F19_ as bizF19, H.F20_ as bizF20                  from ACT_HI_PROCINST RES            left join ACT_HI_BIZ_PROCINST H on  H.PROC_INST_ID_ = RES.PROC_INST_ID_                  WHERE  (RES.DELETE_REASON_ <> :1 or RES.DELETE_REASON_ is null)               order by RES.START_TIME_ desc        ) a where ROWNUM < :2) where rnum  >= :3

分页查询语句执行了7680次,平均每次执行10s,看SQL执行计划走了时间字段,然而线上没有,线上加上索引线上执行为0.1秒

分析:

线上START_TIME_ 列没有走索引

 解决方法:

添加索引

慢SQL查询二

select *
from (select v.sql_id,
v.SQL_FULLTEXT,
v.EXECUTIONS,
v.ELAPSED_TIME / v.executions / 1000 / 1000 ave_time,
v.parsing_user_id,
last_LOAD_TIME
from v$sql v) a
where a.last_LOAD_TIME > '2024-02-01/00:00:00'  and ave_time > 5 and a.executions > 0 
and a.parsing_user_id=(SELECT user_id FROM all_users  where username='GISQBPM')
order by ave_time desc;

 扩展:

1.loads 和execution的区别于联系?

  1. loads:表示SQL语句在共享池中被加载的次数。每当一个SQL语句被解析并放入共享池中,loads的值就会增加。这个值可以帮助您了解一个SQL语句被重复使用的频率。

  2. executions:表示SQL语句被执行的次数。每当一个SQL语句被实际执行,executions的值就会增加。这个值可以帮助您了解一个SQL语句在实际执行过程中的频率。

2. 同一个SQL为什么会被重复加入到共享池

在Oracle数据库中,同一个SQL语句可能会被重复加入到共享池的原因有以下几点:

  1. 绑定变量不同:如果SQL语句使用了绑定变量,即在SQL语句中使用了占位符,那么不同的绑定变量值会导致不同的SQL语句被加入到共享池中。

  2. SQL语句文本不同:即使SQL语句的逻辑相同,但如果SQL语句的文本不同(比如空格、大小写等),Oracle也会将它们当作不同的SQL语句进行处理。

  3. 不同的解析环境:在不同的解析环境下,相同的SQL语句可能会被多次解析并加载到共享池中,比如在不同的会话或者不同的数据库连接中。

  4. 共享池空间不足:如果共享池空间不足,Oracle可能会根据一些策略进行SQL语句的淘汰和重新加载,这也会导致同一个SQL语句被重复加载到共享池中。

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

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

相关文章

CXO清单:低代码平台必备的16个基本功能:从需求到实现的全面指南

对于 CIO、CTO 和 CDO&#xff08;在此统称为 CXO&#xff09;来说&#xff0c;认识到快速变化的技术和竞争格局以及他们在组织中的角色变化至关重要。处理持续不断的软件开发请求、考虑不断变化的业务流程、提高客户和法规的透明度、提高企业数据安全性以及在短时间内扩展基础…

精酿啤酒:麦芽汁的煮沸与沸腾时间的影响

在啤酒酿造过程中&#xff0c;麦芽汁的煮沸与沸腾时间是关键的工艺参数&#xff0c;对啤酒的品质和口感具有显著影响。对于Fendi Club啤酒来说&#xff0c;合理控制煮沸与沸腾时间更是重要。 首先&#xff0c;麦芽汁的煮沸时间对啤酒的口感和稳定性有重要影响。煮沸时间过短&am…

如何使用宝塔面板搭建MySQL 5.5数据库并实现公网远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

linux系统上C程序的编译、运行及调试-gcc

gcc -o timer timer.c &#xff1a;生成可执行文件main&#xff0c;依托main.c,也可依托多个文件./timer :运行代码

Skywalking的Trace Profiling 代码级性能剖析功能应用详解

代码级性能剖析 Skywalking 提供了Trace Profiling功能对具体出现问题的span进行代码级性能剖析。 代码级性能剖析就是利用方法栈快照&#xff0c;并对方法执行情况进行分析和汇总。并结合有限的分布式追踪 span 上下文&#xff0c;对代码执行速度进行估算。性能剖析激活时&a…

[C#][opencvsharp]winform实现自定义卷积核锐化和USM锐化

【锐化介绍】 图像锐化(image sharpening)是补偿图像的轮廓&#xff0c;增强图像的边缘及灰度跳变的部分&#xff0c;使图像变得清晰&#xff0c;分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓&#xff0c;或某些线性目标要素的特征。这种滤波方法…

详细分析SpringSecurity中的@PreAuthorize注解

目录 1. 基本知识2. 使用方式2.1 配置类2.2 直接使用 1. 基本知识 在Java中&#xff0c;PreAuthorize 是Spring Security框架中的一个注解&#xff0c;用于在方法调用之前对用户的权限进行验证。 允许在方法级别定义访问控制规则&#xff0c;确保只有满足指定条件的用户才能调…

Java基础 集合(二)List详解

目录 简介 数组与集合的区别如下&#xff1a; 介绍 AbstractList 和 AbstractSequentialList Vector 替代方案 Stack ArrayList LinkedList 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界…

nodejs+vue+ElementUi家庭美食菜谱分享网站_in9c2

&#xff08;设计制作有一定的安全性&#xff1b;数据库方面主要采用的是MySQL来进行开发&#xff0c;其特点是稳定性好&#xff0c;数据库存储容量大&#xff0c;处理能力快等优势&#xff1b;服务器采用的是Tomcat服务&#xff0c;能够提供稳固的运行平台&#xff0c;确保系统…

JavaSE-项目小结-IP归属地查询(本地IP地址库)

一、项目介绍 1. 背景 IP地址是网络通信中的重要标识&#xff0c;通过分析IP地址的归属地信息&#xff0c;可以帮助我们了解访问来源、用户行为和网络安全等关键信息。例如应用于网站访问日志分析&#xff1a;通过分析访问日志中的IP地址&#xff0c;了解网站访问者的地理位置分…

Duplicate entry ‘2020045-2-1‘ for key ‘index_uid‘ 解决方案

项目场景&#xff1a; 今天小编在工作中编写接口对数据库增加相同的非主键数据的时候&#xff0c;突然出现了这样的一个错误&#xff1a; 下面我来给大家解答这个错误的出现原因以及解决办法。 问题描述 Duplicate entry 2020045-2-1 for key index_uid 这个错误大概意思就是…

企业的多域名SSL证书

多域名SSL证书作为一种加密通信的方式&#xff0c;可以有效保护多个网站的用户数据在传输过程中的安全。不管个人或者企事业单位 都可以申请多域名SSL证书&#xff0c;提高网站的安全性&#xff0c;保护网站数据传输安全。今天就随SSL盾了解多域名SSL证书旗下的企业多域名SSL证…

深度解读NVMe计算存储协议-3

在NVMe计算存储架构中&#xff0c;Copy命令用于在不同类型的命名空间之间进行数据复制&#xff1a; Memory Copy命令&#xff1a;定义于SLM&#xff08;Subsystem Local Memory&#xff09;命令集&#xff0c;主要用于从非易失性存储命名空间&#xff08;NVM namespaces&#x…

ERP系统助力车间生产:班组、设备、工序一网打尽!实现生产全流程可视化!

​随着企业生产规模的扩大和业务复杂性的增加&#xff0c;车间管理在企业运营中的地位日益突出。ERP系统作为企业资源管理的核心平台&#xff0c;为车间管理提供了全面的解决方案。通过合理配置和使用ERP系统的功能模块&#xff0c;企业可以优化生产流程、提高生产效率、确保产…

SOME/IP SD 协议介绍(二) SOME/IP-SD消息格式

SOME/IP-SD消息格式 通用要求 服务发现消息应通过UDP进行支持。准备将服务发现消息传输到TCP中以供将来使用情况。服务发现消息应以SOME/IP头开始&#xff0c;如图1所示&#xff1a; • 服务发现消息应使用0xFFFF的Service-ID&#xff08;16位&#xff09;。 • 服务发现消息…

榜单!高阶智驾冲刺10%搭载率,哪些玩家占据自研感知「高地」

得「感知」者&#xff0c;是智能化尤其是智能驾驶技术变革快速演进期的受益者。尤其是对于车企来说&#xff0c;规控自研易&#xff0c;感知自研难。 尤其是过去几年时间&#xff0c;基于机器学习和深度学习&#xff0c;TransformerBEV技术进一步提高对异常行为的预测准确性&am…

CHS_06.2.3.4_2+用信号量实现进程互斥、同步、前驱关系

CHS_06.2.3.4_2用信号量实现进程互斥、同步、前驱关系 知识总览信号量机制实现进程互斥信号量机制实现进程同步信号量机制实现前驱关系 知识回顾 各位同学 大家好 在这个小节中 我们要学习怎么用信号量机制来实现进程的同步互制关系 知识总览 那么 我们之前学习了互斥的几种软…

只有一台显示器,如何实现同时显示4台主机的HDMI信号?

HDMI画面分割器概述 HDMI画面分割器属于画面分割器中的一种&#xff0c;因为其信号接口是HDMI接口而得其名&#xff0c;多用于监控、多媒体、视频会议等常见的场景 HDMI画面分割器-图 HDMI画面分割器工作原理 使用硬件方式将多路HDMI信号以多种不同的模式分割显示在同一个显示…

香蕉派BPI-M7 瑞芯微RK3588 人工智能开源硬件开发板公开发售

香蕉派(Banana Pi) BPI-M7瑞芯微K3588开源硬件单板计算机公开销售&#xff0c;支持WiFi 6和BT5.2&#xff0c;硬件有3个版本:8G Ram64G eMMC, 16G Ram128 eMMC和32G Ram128 eMMC 香蕉派BPI-M7采用睿芯最新旗舰RK3588八核64位处理器&#xff0c;最高频率为2.4GHz, 6 TOPS NPU&…

谷歌把GenAI装进Chrome

谷歌不甘示弱&#xff0c;在其Chrome浏览器中引入了新的实验性生成式AI功能&#xff0c;以简化并为用户提供更高效的浏览体验。 值得注意的是&#xff0c;微软去年推出了Edge浏览器和人工智能驱动的必应搜索引擎的集成。随着Chrome M121版本的发布&#xff0c;谷歌打算利用最新…