问题一:哪个进程负责硬解析?shared pool设置不合理除了命中率低外还有哪些现象?
说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:
1、语法检查(syntax check)
检查此sql的拼写是否语法。
2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)
其中,软、硬解析就发生在第三个过程里。
Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;
假设存在,则将此sql与cache中的进行比较;
假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。
/****************************************************/
问题二、大家都在说在Sql中使用了Bind Var(绑定变量)会提高不少性能,那他到底是如何提高性能的呢?
使用了Bind Var能提高性能主要是因为这样做可以尽量避免不必要的硬分析(Hard Parse)而节约了时间,同时节约了大量的CPU资源。
当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后将解析结果提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如果只需要软解析的话会少部分步骤)。
但是,当Oracle接到 Client提交的Sql后会首先在共享池(Shared Pool)里面去查找是否有之前已经解析好的与刚接到的这一个Sql完全相同的Sql(注意这里说的是完全相同,既要求语句上的字符级别的完全相同,又要求涉及的对象也必须完全相同)。当发现有相同的以后解析器就不再对新的Sql在此解析而直接用之前解析好的结果了。这里就节约了解析时间以及解析时候消耗的CPU资源。尤其是在OLTP中运行着的大量的短小Sql,效果就会比较明显了。因为一条两条Sql的时间可能不会有多少感觉,但是当量大了以后就会有比较明显的感觉了。
上面说到了硬解析(Hard Parse),那这个Hard Parse到底是个啥呢?
Parse主要分为三种:
1、Hard Parse (硬解析)
2、Soft Parse (软解析)
3、Soft Soft Parse(好像有些资料中并没有将这个算在其中)
Hard Parse就是上面提到的对提交的Sql完全重新从头进行解析(当在Shared Pool中找不到时候将会进行此操作),总共有一下5个执行步骤:
1:语法分析
2:权限与对象检查
3:在共享池中检查是否有完全相同的之前完全解析好的—如果存在,直接跳过4和5,运行Sql(此时算soft parse)
4:选择执行计划
5:产生执行计划
Soft Parse就如果是在Shared Pool中找到了与之完全相同的Sql解析好的结果后会跳过Hard Parse中的后面的两个步骤。
Soft Soft Parse实际上是当设置了session_cursor_cache这个参数之后,Cursor被直接Cache在当前Session的PGA中的,在解析的时候只需要对其语法分析、权限对象分析之后就可以转到PGA中查找了,如果发现完全相同的Cursor,就可以直接去取结果了,也就就是实现了 Soft Soft Parse.
不过在计算解析次数的时候是只计算Hard Parse和Soft Parse的(其实Soft Soft Parse好像也并不能算是做了Parse ):Soft Parse百分比计算:Round(100*(1-:hprs/:prse),2) [hprs:硬解析次数;prse:解析次数] Parse比率计算: Round(100*(1-prse/exec) ,2) [exec:执行次数]
说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:
1、语法检查(syntax check)
检查此sql的拼写是否语法。
2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)
其中,软、硬解析就发生在第三个过程里。
Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;
假设存在,则将此sql与cache中的进行比较;
假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。
/****************************************************/
问题二、大家都在说在Sql中使用了Bind Var(绑定变量)会提高不少性能,那他到底是如何提高性能的呢?
使用了Bind Var能提高性能主要是因为这样做可以尽量避免不必要的硬分析(Hard Parse)而节约了时间,同时节约了大量的CPU资源。
当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后将解析结果提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如果只需要软解析的话会少部分步骤)。
但是,当Oracle接到 Client提交的Sql后会首先在共享池(Shared Pool)里面去查找是否有之前已经解析好的与刚接到的这一个Sql完全相同的Sql(注意这里说的是完全相同,既要求语句上的字符级别的完全相同,又要求涉及的对象也必须完全相同)。当发现有相同的以后解析器就不再对新的Sql在此解析而直接用之前解析好的结果了。这里就节约了解析时间以及解析时候消耗的CPU资源。尤其是在OLTP中运行着的大量的短小Sql,效果就会比较明显了。因为一条两条Sql的时间可能不会有多少感觉,但是当量大了以后就会有比较明显的感觉了。
上面说到了硬解析(Hard Parse),那这个Hard Parse到底是个啥呢?
Parse主要分为三种:
1、Hard Parse (硬解析)
2、Soft Parse (软解析)
3、Soft Soft Parse(好像有些资料中并没有将这个算在其中)
Hard Parse就是上面提到的对提交的Sql完全重新从头进行解析(当在Shared Pool中找不到时候将会进行此操作),总共有一下5个执行步骤:
1:语法分析
2:权限与对象检查
3:在共享池中检查是否有完全相同的之前完全解析好的—如果存在,直接跳过4和5,运行Sql(此时算soft parse)
4:选择执行计划
5:产生执行计划
Soft Parse就如果是在Shared Pool中找到了与之完全相同的Sql解析好的结果后会跳过Hard Parse中的后面的两个步骤。
Soft Soft Parse实际上是当设置了session_cursor_cache这个参数之后,Cursor被直接Cache在当前Session的PGA中的,在解析的时候只需要对其语法分析、权限对象分析之后就可以转到PGA中查找了,如果发现完全相同的Cursor,就可以直接去取结果了,也就就是实现了 Soft Soft Parse.
不过在计算解析次数的时候是只计算Hard Parse和Soft Parse的(其实Soft Soft Parse好像也并不能算是做了Parse ):Soft Parse百分比计算:Round(100*(1-:hprs/:prse),2) [hprs:硬解析次数;prse:解析次数] Parse比率计算: Round(100*(1-prse/exec) ,2) [exec:执行次数]
发表评论
-
Oracle函数介绍:decode
2011-12-10 14:49 743Sql代码 select sum( ... -
任重道远迁移路之DB2到Oracle
2011-11-25 10:56 812迁移之路任重而道远, ... -
GLOBAL_NAMES参数的详细研究
2011-11-23 12:59 882Oracle数据库GLOBAL_NAMES参数的相关知识是 ... -
Oracle作业job 没有自动调度起来
2011-11-22 11:52 1346Oracle作业job 没有自动调度起来 问题:有一同事报 ... -
Oracle与MySQL的几点区别
2011-11-21 11:46 728Oracle数据库与MySQL数据库的区别是本文我们主要要介绍 ... -
Oracle 丢失更新问题的解决方案
2011-11-18 14:44 731丢失更新是数据中一个比较常见的经典问题,在做项目时我们有时可能 ... -
ORACLE 临时表空间使用率过高的原因及临时解决方案
2011-11-16 15:47 770数据库temp临时表空间增 ... -
Oracle 10g创建表空间步骤详解
2011-11-15 11:11 749Oracle 10g数据库中,当在数据库中创建用户时,基于应用 ... -
F5 BIG-IP支持运行Oracle
2011-10-13 15:14 71010月13日,全球领先的应用交付网络厂商 F5 Netwo ... -
Oracle移动应用跨整个企业应用产品组合,发展势头迅猛
2011-10-12 14:39 1098甲骨文应用开发集 ... -
甲骨文推出oracle社交网络
2011-10-11 14:08 751在甲骨文全球大会 ... -
oracle数据库完整性约束规则
2011-10-10 15:28 628完整性约束用于增强数据的完整性,Oracle提供了5种完整 ... -
Oracle融合应用软件为企业在云计算中带来新的业务变革
2011-10-09 16:18 735Oracle融合应 ... -
Oracle 与戴尔携手:IT与业务融为一体
2011-10-08 14:55 6382011年10月4日,在Oracle Op ... -
应用Oracle组件实现动态Web数据库
2011-09-29 15:45 7891、用Oracle WebServer构建Web数据库应用 ... -
怎样做好数据库管家 怎么管理Oracle数据库
2011-09-28 15:01 692Oracle是一个最早商 ... -
http://www.oracleonline.net/home.php?mod=space&uid=7029&do=blog&quickforward=1&i
2011-09-27 11:56 2272凤凰网科技讯 北京时间9月27日消息,据彭博社报道,甲骨文联席 ... -
甲骨文教育基金会诚邀学生参加2012
2011-09-23 16:38 613· 2012年ThinkQuest竞赛由甲骨文教育基金会( ... -
Oracle在MySQL中新增商业扩展插件
2011-09-20 13:40 563racle目前宣布,支持为MySQL数据库新增商业扩展插件,但 ... -
Oracle认证:提高Oracle10G增量备份速度
2011-09-16 10:52 643问题:怎样才能提高Oracle 10G增量备份的速度? 解答 ...
相关推荐
Oracle 中的硬解析与软解析是数据库管理员和开发者必须了解的重要概念,这两个概念息息相关,都是在 Oracle 数据库中执行 SQL 语句时的解析过程。理解硬解析和软解析的区别,对于提高数据库性能和优化 SQL 语句具有...
在数据库中硬解析是万恶之源,为大家提供一个查找并且定位oracle硬解析问题SQL语句脚本
Oracle数据库在处理SQL语句时,有两种主要的解析方式:硬解析(Hard Parse)和软解析(Soft Parse),这两种解析方式对于数据库性能有着显著的影响。理解它们的区别是优化数据库性能的关键。 硬解析是指数据库需要...
oracle性能优化
Oracle SQL疑难解析是一本专为解决数据库操作中遇到的实际问题而编写的书籍,它涵盖了大量SQL查询、数据处理和性能优化的实用技巧。在"oracle-sql-recipes-master"这个压缩包中,很可能是包含了书中的示例代码和练习...
ORACLE有些sql语句,不确定它是否会增加硬解析次数,对其它进行测试,是否会增加硬解析。
【知识点解析】 1. ORA-01555错误:这个错误通常发生在数据库尝试提供一个事务一致性读取时,由于undo数据被覆盖或删除,无法找到必要的历史记录。选项A是正确的,因为长时间运行的查询可能会导致undo数据在UNDO表...
在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析
Oracle IO 问题解析是指 Oracle 数据库中读写操作对 IO 的影响,包括写操作和读操作。写操作包括控制文件的写入、用户数据的修改、Redo Log 的写入、Archive Log 的写入和临时表空间的写入等。这些写操作都是 ...
### Oracle解析XML #### 一、XML在Oracle中的处理方式 在Oracle数据库中,XML数据可以被存储为CLOB类型,并通过多种方法进行处理。常用的XML处理函数包括`XMLType`、`XMLParse`、`XMLELEMENT`、`XMLFOREST`等。...
本题库解析主要涵盖了这个版本考试的最新题目和解答,帮助考生准备2015年10月的Oracle OCP 053认证考试。 Oracle Database 12c是Oracle公司的第十二个主要版本,它的核心创新在于多租户架构(Multitenant ...
在本文中,作者提出了一个通用的 Oracle 通信 TNS 协议请求报文解析方案,该方案可以在 Windows 和 Linux 操作系统下使用,适用于常用的数据库服务器和客户端,以及 TNS 协议版本。在该方案中,作者使用数据挖掘的...
Oracle 数据块的解析对于数据库管理员和开发人员来说至关重要,因为这有助于理解数据存储方式、优化查询性能、诊断 I/O 问题以及进行故障排查。深入理解数据块结构,可以更好地管理数据库的物理存储,例如调整表空间...
根据给定的信息,本文将对Oracle OCP 051中的一个特定问题进行详细解析,主要涉及的是在创建新表时,默认值、非空约束以及外键约束如何处理。 ### 标题与描述分析 标题“2015年9月 最新oracle ocp 051解析”表明了...
2. **Oracle体系结构**:书中会详细讲解Oracle的物理和逻辑结构,包括数据文件、控制文件、重做日志文件、实例和进程等关键组成部分,帮助读者理解Oracle如何存储和处理数据。 3. **SQL与PL/SQL**:Oracle数据库...
Oracle OCP(Oracle Certified Professional)是Oracle公司针对其数据库产品推出的专家级认证,52...通过以上资源的学习和实践,考生不仅可以为1Z0-052考试做好准备,也能提升实际工作中处理Oracle数据库问题的能力。
资源名称:Oracle SQL疑难解析内容简介:《Oracle SQL疑难解析》总结了针对Oracle数据库编写SQL时经常碰到的各种问题,提供大量现成的解决方法,包括汇总和聚合数据、多表数据查询、生成和获取数据、通用查询模式、...
在讨论Oracle中解析XML的知识点之前,首先应当了解XML(Extensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。它的自描述特性使其非常适合网络数据交换。在Oracle数据库中,特别是在较...