当前位置: 首页 > news >正文

Oracle-job跑批变慢案例

前言:

        近期处理了一起应用job跑批变慢的案例,在一天job执行时间突然增加了几十倍,后面通过分析是由于索引的设计不合理导致执行计划的异常,把当时的问题分析过程记录下来,分享给大家。

问题:

        数据库job存储执行时间增加几十倍

原因:

job存储过程里面的sql语句由于索引设计的不合理列XXX_COLOR,XXXTIME分别有单列索引,在执行计划生成时会通过比较走不同索引的cost消耗来选择索引,由于列数据的分布,统计信息收集的时间点,优化器算法,都会导致sql执行计划在不同索引之间来回切换,引发执行计划发生不稳定发送变化,导致存储过程执行缓慢

问题修复:

1 对列XXX_COLOR,XXXTIME创建组合索引。

2 对语句gm9pk0puuzqqm进行执行计划绑定,绑定169034354执行计划

分析过程:


        通过awr对比异常时间段8月4号11点-12点与正常时间段8月10号11点-12点的job存储过程SP_XXXXX_STATISTICS_RUYUE执行消耗差异,可以看到执行时间增长了1000+秒,主要的消耗在于逻辑读

        查看主要的逻辑读消耗对象为XXX_LOG表

        查看GPS_lOG对应的高消耗SQL: gm9pk0puuzqqm为SELECT AVG(L.XXX) FROM XXX_LOG L WHERE L.XXX_COLOR = :B3 AND L.XXXTIME >= :B1 AND L.XXXTIME < LEAST(:B2 ,  TRUNC(:B1 + 1))

        通过查看存储过程SP_XXX_STATISTICS_RUYUE里面的执行sql,确认有XXX_LOG的高消耗SQL: gm9pk0puuzqqm,这里可以确认存储过程执行的主要消耗在于高消耗SQL: gm9pk0puuzqqm

        查看SQL: gm9pk0puuzqqm的历史执行消耗,可以发现在20220804 7点-13点期间,执行计划发生了改变,从原来的169034354变化为2660240900,sql的执行消耗逻辑读,执行时间也发生增长

查看执行计划的消耗,169034354的平均执行时间为0.004秒,平均逻辑读为2176,2660240900的平均执行时间为0.051秒,平均逻辑读为35925,执行计划的差异主要在于索引的选择IDX_XXXLOG_XXX_COLOR以及IDX_XXXLOG_XXXTIME

由于列XXX_COLOR,XXXTIME分别有单列索引,在执行计划生成时会通过比较走不同索引的cost消耗来选择索引,由于列数据的分布,统计信息收集的时间点,优化器算法,都会导致sql执行计划在不同索引之间来回切换,导致执行计划的不稳定,引发sql执行缓慢问题

总结:

job存储变慢的原因为存储过程里面的sql语句由于索引设计的不合理列XXX_COLOR,XXXTIME分别有单列索引,在执行计划生成时会通过比较走不同索引的cost消耗来选择索引,由于列数据的分布,统计信息收集的时间点,优化器算法,都会导致sql执行计划在不同索引之间来回切换,引发执行计划发生不稳定发送变化,导致存储过程执行缓慢

相关文章:

  • java/php/python在线求助救援网站vue+elementui
  • Vivado关联Vscode,解决Vscode自动保存和卡顿问题
  • Java基础用Date类编写万年历
  • 前端面试题2
  • 通信算法之七十八:无人机反制—精华总结
  • Leetcode--剑指Offer
  • 【web-攻击应用程序框架】(12.2)共享主机与服务提供商:攻击、保障
  • JavaScript-操作BOM对象
  • position定位总结+元素选择器+window对象的子对象
  • MySQL什么情况会导致索引失效?
  • 力扣(122.1049)补7.29
  • 【数据结构与算法】链表
  • Python中的依赖注入
  • 【MicroPython ESP32】machine.Pin类函数以及参数详解
  • 如何戒掉短视频?2个方法适合职场人,从未失败过
  • 时间复杂度分析经典问题——最大子序列和
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【EOS】Cleos基础
  • 2017届校招提前批面试回顾
  • Bytom交易说明(账户管理模式)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • idea + plantuml 画流程图
  • Java小白进阶笔记(3)-初级面向对象
  • Vue ES6 Jade Scss Webpack Gulp
  • 百度地图API标注+时间轴组件
  • 目录与文件属性:编写ls
  • 判断客户端类型,Android,iOS,PC
  • 如何设计一个微型分布式架构?
  • 入门到放弃node系列之Hello Word篇
  • 深度学习中的信息论知识详解
  • 微信小程序开发问题汇总
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一个SAP顾问在美国的这些年
  • 仓管云——企业云erp功能有哪些?
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (SpringBoot)第二章:Spring创建和使用
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)setTimeout 和 setInterval 的区别
  • (转)德国人的记事本
  • .net core 6 集成和使用 mongodb
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET程序员迈向卓越的必由之路
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @html.ActionLink的几种参数格式
  • @RequestMapping处理请求异常
  • @RestControllerAdvice异常统一处理类失效原因
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)