Oracle数据库如何找到 Top Hard Parsing SQL 语句?
有一个数据库应用程序存在过多的解析问题,因此需要找到产生大量硬解析的主要语句。
什么是硬解析
Oracle数据库中的硬解析(Hard Parse)是指在执行SQL语句时,数据库需要重新解析该SQL语句,并创建新的执行计划的过程。这个过程涉及到对SQL语句的完整解析、编译和生成执行计划,是数据库性能优化中的一个重要环节。以下是硬解析的详细过程:
-
语法、语义及权限检查:Oracle首先会对SQL语句进行语法检查,确保语句的拼写和结构正确无误。接着进行语义检查,验证语句中引用的对象是否存在以及执行语句的用户是否具有相应的权限。
-
查询转换:Oracle会应用不同的转换技巧,将SQL语句转换为语义上等价的其他形式。例如,
COUNT(1)
可能会被转换为COUNT(*)
,以优化查询性能。 -
根据统计信息生成执行计划:这是硬解析中最耗时的步骤。Oracle会根据数据库的统计信息,如表的大小、索引的统计数据等,来确定执行SQL语句的最佳路径,即成本最低的执行计划。
-
将游标信息(执行计划)保存到库缓存:一旦执行计划生成,Oracle会将这个执行计划保存在共享池(Shared Pool)的库缓存(Library Cache)中,以便后续相同的SQL语句可以重用这个执行计划,减少硬解析的发生。
硬解析的触发条件包括:
-
首次执行某个SQL语句时,因为数据库尚未为其生成解析结果,必须进行硬解析。 -
如果一个已经硬解析过的SQL语句对应的解析结果在共享池中被替换或因其他原因失效(例如,相关的数据库对象元数据发生变化),那么下次执行该语句时需要重新进行硬解析。 -
即使对于相同的SQL文本,如果其绑定变量值或会话环境(如当前用户的权限、NLS设置等)发生变化,导致生成的解析树或执行计划与缓存中的不一致,也会触发硬解析。 -
某些类型的SQL语句,如DDL(数据定义语言)语句,由于它们的操作通常是不可缓存的,因此总是进行硬解析。
硬解析对数据库性能有显著影响,因为它会消耗大量的CPU资源和内存,增加磁盘I/O,延长查询响应时间,降低用户体验。因此,在数据库性能优化中,通常建议尽量减少硬解析的发生,通过使用绑定变量、优化SQL语句结构等方式来提高软解析的比例,从而提升数据库的整体性能。
当必须将 SQL 语句加载到共享池中时,会发生硬解析。在这种情况下,Oracle Server 必须在共享池中分配内存并解析语句。
当共享池太小时,或者当您有没有绑定变量的不可重用 SQL 语句时,可能会发生过多的硬解析。
我们可能会想到 AWR 报告,其中有一节标题为“SQL ordered by Parse Calls”,但是这里的数值不仅是硬解析调用,而且还包含了软解析。

因此我们可以使用查询表中dba_hist_active_sess_history IN_HARD_PARSE='Y' 的语句,查出真正的硬解析语句。
查询一段时间以来硬解析次数最高语句
select INSTANCE_NUMBER,TOP_LEVEL_SQL_ID,SQL_ID,count(*)
from dba_hist_active_sess_history
where IN HARD_PARSE='Y'
and snap_id>=39072 and snap_id<=39073
and sample_time>to_date('20240814 09:09','yyyymmdd hh24:mi')
and sample_time<to_date('20240814 10:10','yyyymmdd hh24:mi')
group by INSTANCE_NUMBER,TOP_LEVEL_SQL_ID,SQL_ID
having count(*)>10
order by count(*) desc;

查询一段时间以来所有实例硬解析top语句
select TOP_LEVEL_SQL_ID,SQL_ID,count(*
from dba_hist_active_sess_history
where IN_HARD_PARSE='Y'
and snap_id>=39072 and snap_id<=39093
and sample_time>to_date('20240814 09:08','yyyymmdd hh24:mi')
and sample_time<to_date('20240814 16:15','yyyymmdd hh24:mi')
group by TOP_LEVEL_SQL_ID,SQL_ID
having count(*)>10
order by count(*) desc;

TOP_LEVEL_SQL_ID和SQL_ID
很多时候面对包或者存储过程,我们看到的"sql_id"仅仅是包或者存储过程本身的"sql_id",但对于包以及存储过程里面到底包含了哪些sql是不知道的,这时候就可以利用这一列,查出包或者存储过程里的一系列sql_id。
查询存储过程中那些sql语句慢
查询出硬解析语句为存储过程时,如何查看存储过程中的sql语句
###查询存储过程中那些语句慢
set verify on
set echo on
set lines 250
set head on
set tab off
WITH snaps AS
(SELECT /*+ materialize*/
snap_id, dbid
FROM dba_hist_snapshot
WHERE begin_interval_time > SYSDATE - &days),
obj AS
(SELECT /*+ materialize*/
object_id, subprogram_id
FROM DBA_PROCEDURES
WHERE object_name = UPPER ('&package_name')
AND procedure_name = UPPER('&procedure_name'))
SELECT /*+ push_subq(snp) opt_param('_optimizer_use_feedback' 'false') */
t.*
FROM (SELECT sql_id,
event,
a.SQL_PLAN_HASH_VALUE,
COUNT(DISTINCT sql_exec_id || sql_exec_start) calls,
count(1) cnt
FROM dba_hist_active_sess_history a
WHERE (PLSQL_ENTRY_OBJECT_ID, PLSQL_ENTRY_SUBPROGRAM_ID) IN
(SELECT object_id, subprogram_id FROM obj)
AND (dbid, SNAP_ID) IN (SELECT /*+qb_name(snp)*/
dbid, SNAP_ID
FROM snaps)
GROUP BY sql_id, SQL_PLAN_HASH_VALUE, event) t
ORDER BY sql_id, SQL_PLAN_HASH_VALUE, event, cnt DESC
/
CLEAR COLUMNS
本文由 mdnice 多平台发布
相关文章:
Oracle数据库如何找到 Top Hard Parsing SQL 语句?
有一个数据库应用程序存在过多的解析问题,因此需要找到产生大量硬解析的主要语句。 什么是硬解析 Oracle数据库中的硬解析(Hard Parse)是指在执行SQL语句时,数据库需要重新解析该SQL语句,并创建新的执行计划的过程。这…...
浅谈棋牌游戏开发流程二:后端技术选型与基础环境搭建
一、前言:客户端只是台前,后端才是幕后“指挥中心” 在上一篇“客户端技术”中,我们聊到玩家看到的一切动作、动画、界面逻辑,都靠客户端去渲染和交互。但若没有后端的支撑,玩家点了“出牌”可能就像一拳打在空气里—…...
使用qiankun搭建微前端应用及踩坑
线上演示地址:React App 源码地址:https://github.com/Jiang-K-J/micro-app?tabreadme-ov-file (帮忙点个小星星) 主应用:react 18 子应用:vite vue3 子应用:react 18 安装 主应用 $ y…...
Windows 环境配置 HTTPS 服务实战
一、 环境准备 win10以上操作系统安装 Certbot申请阿里云\腾讯云域名安装 nginx 1.3以上版本 二、Certbot 安装及 SSL 证书生成 Certbot 是一个免费、开源工具,用于自动化在Web服务器上获取和更新SSL/TLS证书。它可以通过Let’s Encrypt服务获取免费的SSL/TLS证书…...
小程序租赁系统开发的优势与应用前景分析
内容概要 小程序租赁系统是一种新兴的数字化解决方案,旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能,如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好,让用户能够轻松选择所需的商品或服务&…...
Redis(基础篇 + 实践篇 )
01 | 基本架构:一个键值数据库包含什么? Redis 作为一个内存数据存储系统,它的架构设计非常简洁,但功能非常强大。理解其核心架构对高效使用 Redis 至关重要。 客户端与服务器架构: 客户端通过 TCP 协议连接到 Redis …...
单片机-独立按键矩阵按键实验
1、按键介绍 按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态, 如果按键按下,初始导通状态变为断开,初始断开状态变为导通 我们开发板是采用软件消抖,一般来说一个简单的按键消抖就是先读取按键的状…...
我用AI学Android Jetpack Compose之入门篇(1)
这篇我们先来跑通第一个Android Jetpack Compose工程,现在新版本的Android Studio,新建工程选择Empty Activity默认就会开启Jetpack Compose的支持,再次声明,答案来自 通义千问Ai 文章目录 1.用Android Jetpack Compose需要安装什…...
简单的生产数据库重连策略优化
简单的druid生产数据库重连策略优化 1. 需求 我们生产环境有一次在大量请求拥堵后,好多数据库操作都超时了,在此之后数据库的连接池不能正常的获取数据库连接了,我们确认了数据库服务是没有问题的,那么就是连接池的配置有问题&a…...
STM32-笔记37-吸烟室管控系统项目
一、项目需求 1. 使用 mq-2 获取环境烟雾值,并显示在 LCD1602 上; 2. 按键修改阈值,并显示在 LCD1602 上; 3. 烟雾值超过阈值时,蜂鸣器长响,风扇打开;烟雾值小于阈值时,蜂鸣器不响…...
2025-01-04 Unity插件 YodaSheet1 —— 插件介绍
文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器,可以轻松地在 Unity 编辑器中 编辑,搜索…...
电子电气架构 --- 安全相关内容汇总
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
科研绘图系列:R语言单细胞数据常见的可视化图形
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理图1图2图3图4图5图6系统信息参考介绍 单细胞数据常见的可视化图形 因为本教程是单细胞数据,因此运行本画图脚本需要电脑的内存最少32Gb 加载…...
【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 2:基础知识
目录 1 预热1.1 记号1.2 分类器计算过载问题 2 多头编码(MHE)2.1 标签分解2.2 多头组合(Multi-Head Combination) 论文:Multi-Head Encoding for Extreme Label Classification 作者:Daojun Liang, Haixia …...
Flink使用
Window下启动支持 下载或复制老版本的放在bin目录下即可; flink.bat echo off setlocalSET bin%~dp0 SET FLINK_HOME%bin%.. SET FLINK_LIB_DIR%FLINK_HOME%\lib SET FLINK_PLUGINS_DIR%FLINK_HOME%\pluginsSET JVM_ARGS-Xmx512mSET FLINK_JM_CLASSPATH%FLINK_LI…...
一种可复用的AI提效方案:AI点灯
在当今飞速发展的时代,AI技术正不断渗透到我们生活的各个层面,深刻改变着传统的工作方式和生活模式。面对这一重大变革,我们不能被动观望或抗拒,而应积极拥抱AI,将其作为成长的助力。只有与AI协同发展,才能…...
Django 模型
Django 模型 Django 模型是 Django 框架的核心组件之一,它用于定义应用程序的数据结构。在 Django 中,模型是 Python 类,通常继承自 django.db.models.Model。每个模型类代表数据库中的一个表,模型类的属性对应表中的字段。 1. 创建模型 创建 Django 模型非常简单。首先…...
【MySQL 探索者日志 】第二弹 —— 数据库基础
MySQL系列学习笔记: MySQL探索者日志__Zwy的博客-CSDN博客 各位于晏,亦菲们,请点赞关注! 我的个人主页: _Zwy-CSDN博客 目录 1、MySQL服务器,数据库,表关系 2、MySQL登录连接服务器 3、MyS…...
【51单片机-零基础chapter1】
安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…...
stm32的掉电检测机制——PVD
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。 STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。 STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检…...
电脑steam api dll缺失了怎么办?
电脑故障解析与自救指南:Steam API DLL缺失问题的全面解析 在软件开发与电脑维护的广阔天地里,我们时常会遇到各种各样的系统报错与文件问题,其中“Steam API DLL缺失”便是让不少游戏爱好者和游戏开发者头疼的难题之一。作为一名深耕软件开…...
Kotlin 协程基础知识总结七 —— Flow 与 Jetpack Paging3
专题分为五大块: Paging3 的结构组成Flow 与 Paging3下拉刷新上拉刷新离奇 Bug上游数据缓存 Demo 会还原开发迭代的过程,不会直接一步到位。 1、Paging3 加载数据流程 (P105)Paging3 的简介详情可参考官方文档 Paging 库概览&…...
使用JMeter玩转tidb压测
作者: du拉松 原文来源: https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的,所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具,直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…...
音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介
一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新…...
ETCD渗透利用指南
目录 未指定使用put操作报错 未指定操作版本使用get报错 首先etcd分为两个版本v2和v3,不同的API结果无论是访问URL还是使用etcdctl进行通信,都会导致问题,例如使用etcdctl和v3进行通信,如果没有实名ETCDCTL_API3指定API版本会直接…...
Python安装(新手详细版)
前言 第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python 语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录,并且遇到的问题也会写出,…...
SQL 中复杂 CASE WHEN 嵌套逻辑优化
目标:优化复杂的 CASE WHEN 逻辑,提升 SQL 语句的可读性与执行效率,减少多层嵌套带来的复杂性。 1. CASE WHEN 的常见问题 嵌套过深:多个条件判断嵌套,难以阅读和维护。重复逻辑:相似逻辑在多个分支中重复…...
【专题】2024年出口跨境电商促销趋势白皮书报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p38722 在当今全球化加速演进、数字经济蓬勃发展的大背景下,跨境电商行业正以前所未有的态势重塑国际贸易格局,成为各方瞩目的焦点领域。 根据亚马逊发布的《2024年出口跨境电商促销趋势白皮书》,…...
C# 设计模式(结构型模式):代理模式
C# 设计模式(结构型模式):代理模式 在软件开发中,有时我们需要通过某种方式间接地访问一个对象,这时就可以使用代理模式(Proxy Pattern)。代理模式通过引入一个代理对象来控制对目标对象的访问…...
单片机复位电路基本理解教程文章·含上拉电阻理解电容开路理解!!!
目录 常见复位电路种类 复位电路电阻上拉理解 电容储能断路理解 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-…...
深入浅出:事件监听中的适配器模式
1. 为什么需要适配器模式? 在Java的事件监听器设计中,许多接口有多个抽象方法。例如,MouseListener 接口有 5 个方法,KeyListener 接口有 3 个方法。如果我们只关心其中的一个方法(例如,鼠标点击事件&…...
常用LabVIEW算法及应用
在LabVIEW项目中,算法的应用是提高系统性能、实现特定功能、完成复杂任务的核心。LabVIEW作为一种图形化编程语言,允许用户通过直观的图形编程来实现各种复杂的算法。这些算法广泛应用于控制系统、数据采集、信号处理、图像处理、机器学习等领域。了解常…...
VTK知识学习(28)-区域提取
1、感兴趣区域(Volume ofInterest,VOI) 它是图像内部的一块子区域。在VTK中,vtkExtractVOI 类可根据用户指定的区域范围提取子图像。该Filter 的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。 代码: private void Test…...
基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档
前言 基于Spring Boot Vue3实现的在线汽车保养维修预约管理系统是一种前后端分离架构的应用,它结合了Java后端开发框架Spring Boot和现代JavaScript前端框架Vue.js 3.0的优势。这样的系统可以为汽车服务站提供一个高效的平台来管理客户的预约请求 技术选型 系统…...
CAN201 Introduction to Networking(计算机网络)Pt.4 链路层
文章目录 5. Link Layer(链路层)5.1 Services of link layer(链路层的服务)5.2 Error detection and correction(错误检测和纠正)5.2.1 Partity Checks(奇偶检验)5.2.2 Checksum&…...
Python视频处理:噪声矩阵与并行计算的完美融合
噪声级别对视频质量有显著的影响,主要体现在以下几个方面: 1. 视觉质量 低噪声级别:当噪声级别较低时,视频的视觉质量较好。噪声对图像细节的干扰较小,画面看起来较为清晰和自然。观众可以更容易地识别图像中的细节和…...
wordpress开发之实现使用第三方库qrcode-generator生成二维码并上传和展示
文章目录 一、需求二、技术实现 - 利用qrcode-generator库三、代码实现 一、需求 客户的需求是能将特定的url生成二维码,以便将二维码分享或贴到合同纸上给他的客户扫描查看信息。 这个url包含的内容类似于如下格式: https://www.example.com/contrac…...
计算机网络——物理层
一、通信基础 1.相关术语: • 数据(data)——运送消息的实体。 • 信号(signal)——数据的电气的或电磁的表现。 • “模拟的”(analogous)——代表消息的参数的取值是连续的。 • “数字的”(digital)——代表消息的参数的取值是离散的。 • 码元(code)——在…...
网络IP协议
IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…...
Unity UGUI使用技巧与经验总结(不定期更新)
Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...
Tailwind CSS 使用简介
参考网站安装 - Tailwind CSS 中文网 号称是开始使用 Tailwind CSS 通过 npm 安装 tailwindcss,并创建你的 tailwind.config.js 文件。 npm install -D tailwindcss npx tailwindcss init 在 tailwind.config.js 文件中添加所有模板文件的路径。 /** type {im…...
嵌入式linux中socket控制与实现
一、概述 1、首先网络,一看到这个词,我们就会想到IP地址和端口号,那IP地址和端口各有什么作用呢? (1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。 (2)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别某个服务。例如,对于每个TCP/IP实…...
Go语言的 的数据封装(Data Encapsulation)核心知识
Go语言的数据封装(Data Encapsulation)核心知识 引言 在现代编程语言中,数据封装是一个重要的编程概念。它不仅帮助开发者管理复杂性,还提高了代码的可维护性和安全性。Go语言(Golang)作为一种注重简洁性…...
25/1/5 算法笔记<强化学习> MPC,交叉熵法,PETS算法
MPC 一个棋手下棋,会根据当前的局势来推演落子几步可能发生的局势,然后选择局势最好的一种情况来决定当前落子位置。 模型预测控制方法MPC,就是这样一种迭代的、基于模型的控制方法。值得注意的是MPC中不存在一个显示的策略。具体而言就是MPC在每次采取…...
最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件
背景 CFCA安全输入控件用于保证用户在浏览器、桌面客户端、移动客户端中输入信息的安全性,防止运行在用户系统上的病毒、木马等恶意程序入侵窃取用户输入的敏感信息。确保用户输入、本地缓存、网络传输整个流程中,输入的敏感信息不被窃取。广泛应用于银行…...
vue 项目集成 electron 和 electron 打包及环境配置
vue electron 开发桌面端应用 安装 electron npm i electron -D记得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面运行可能会报错 根目录创建electron文件夹,在electron文件夹创建main.js(或者backgrou…...
计算机网络--UDP和TCP课后习题
【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…...
【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
前言 大家好吖,欢迎来到 YY 滴算法不挂科系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 下面是相关传送门 【算法不挂科】算法期末考试题库1(带解析)【选择题53道&填空题36道&算法填空题7道&a…...
Java+maven+selenium3+testng 自动化测试环境IDEA
软件测试资料领取:[内部资源] 想拿年薪40W的软件测试人员,这份资料必须领取~ 软件测试面试刷题工具领取:软件测试面试刷题【800道面试题答案免费刷】 idea 、java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多…...
【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数
这个地方基本没有任何文档记录,在学习的过程中屡屡碰壁,因此记录一下这部分的内容,懒得看可以直接跳到总结看结论。 踩坑步骤 首先来看看书上让我们怎么写: //main.scala object Start {def main(args:Array[String]) {try {v…...