为什么静态sql语句会减少软解析
发布网友
发布时间:2022-05-02 03:26
我来回答
共2个回答
热心网友
时间:2022-05-02 04:55
深入shared pool
解析SQL语句
生成执行计划
中间考虑的因素很多,包括访问的对象的存在、权限、等等
执行SQL语句
解析的过程(生成最优执行计划)是一个耗费资源的过程,随着用户的并发数量的增加。数据库的性能也会降低的很快。
ORCLE对解析的执行
1、ORACLE将SQL语句分成为两个部分:静态部分+动态部分
2、静态部分:SQL 语句的关键词(所涉及的表名称、列名称、等)
3、动态部分:字面值(表里面的表数据,例如 where name=‘xkj’中的xkj)
静态部分是有限的、动态部分是无限的
绑定变量:实现SQL共享(静态部分),减少解析。在实际中,不同的SQL语句的静态部分的重复率非常的高。实际上,动态部分对SQL语句的解析的影响可以忽略不计
通过使用绑定变量,用来提高SQL语句的缓存命中率(减少解析次数、减少sql缓存)
declare
v1 varchar2(10);
n1 int;
begin
n1:=1
select salary into v1 from test where id=n1;
end;
在上面的SQL语句中,使用了绑定变量n1,在解析的时候,使用的绑定变量。执行的时候,将字面值传入语句中。因此这样SQL语句的命中率将会提高。
ORCLE将解析过的SQL语句缓存在shared pool中,碰到相同的SQL语句再次执行的时候,ORACLE直接使用已经解析过的执行计划。
Shared pool缓存内容:SQL语句、执行计划、PL/SQL代码、PL/SQL机器码等
Shared pool细分
1、库缓存:最近执行的SQL语句、存储过程、函数、解析树、执行计划,最活跃部分
2、数据字典缓存:SQL执行过程中涉及的数据字典
递归调用:shared pool为生成执行计划,又进行了很多别的调用(如查询数据字典)
热心网友
时间:2022-05-02 06:13
相当于你每次执行的时候都要解析一次SQL的语法 可定会慢了
怎样判断一个SQL语句是硬解析还是软解析
只要执行的sql语句文 本相同,并且对应sql的执行计划已经缓存在oracle的内存(library cache)中,那么无论你怎么去执行这条sql,都不会硬解析,而是软解析。相反来说,如果这个sql你第一次执行,或者之前执行sql的执行计划已经 从oracle内存中置换出来,那么肯定会硬解析。建议看一下oracle内存方面的资料,...
软解析 需要打开游标吗
这时语句 select * from gyj100 where id=1; 真正被缓存了,这里就不再解释了。。。在sqlplus执行SQL不关闭,执行下一条SQL时关闭上一条SQL
2020-01-20 oracle中sql如何执行,什么是硬解析和软解析
这样可以提高SQL语句的执行效率,省去解析的时间和资源。在实际应用中,SQL语句的执行过程中可能会出现多次软解析和硬解析的情况,具体会受到各种因素的影响,如语句本身的复杂性、缓存的大小、统计信息的准确性等。因此,在性能调优的过程中,需要根据实际情况对SQL语句进行优化,减少解析的次数,提高执行效...
谁能讲讲sql硬软解析的区别
如果SQL语句的HASH值一致,那么ORACLE事实上还需要对SQL语句的语义进行再次检测,以决定是否一致。那么为什么Oracle需要再次对语句文本进行检测呢?不是SQL语句的HASH值已经对应上了?事实上就算是SQL语句的HASH值已经对应上了,并不能说明这两条SQL语句就已经可以共享了。例如:假如用户SYS有自己的一张表EMP...
Oracle中的硬解析与软解析
硬解析需要把 SQL语句加载到共享池中 硬解析比软解析差很多 因为它牵涉到共享池中内存的分配和管理 一旦被加载 SQL必须完全重新检查语法和语义以及生成可执行目标 如果shared_pool_size设置的太小或者SQL语句没有重用 则会发生大量的硬解析 lishixinzhi/Article/program/Oracle/201311/17371 ...
soft parse和hard parse的区别
--如果5个步骤全做,这就叫hard parse 硬解析太多,会大大降低性能。软解析太多,也不是好事,因为在软分析过程中,会长时间持有library cache latch,因为软分析过程中,依然要分析语法和语义检查,除非该语句在会话的游标缓存中。你可以通过设置参数session_cached_cursors来减少library cache latch的持有...
Oracle硬解析和软解析的区别分析
硬解析过程:1.语法、语义及权限检查;2.查询转换(通过应用各种不同的转换技巧,会生成语义上等同的新的SQL语句,如count(1)会转为count(*));3.根据统计信息生成执行计划(找出成本最低的路径,这一步比较耗时);4.将游标信息(执行计划)保存到库缓存。2、软解析过程:1.语法、语义及权限检查...
SQL语句执行流程与顺序原理解析
硬解析通常是昂贵的操作,大约占整个SQL执行的70%左右的时间,硬解析会生成执行树,执行计划,等等。所以,采用高速数据缓存的话,可以提高SQL 语句的查询效率。其原因有两方面:一方面是从内存中读取数据要比从硬盘中的数据文件中读取数据效率要高,另一方面也是因为避免语句解析而节省了时间。不过这里要注意一点,这个数据...
请教下Oracle数据库中的存储过程为什么第二次执行速度就快了,有谁...
在oracle中 不关是执行sql还是存储过程,当你第一次执行的时候需要对相关语句进行相关权限、对象等分析,这个过程会产生执行计划,叫做硬解析,如果分析通过,之后将语句转化成ASCII等效数字码,再通过HASH算法得到散列值,然后检查库缓存中是否存在同样hash值的语句。 如果存在,就是软解析.然后就执行语句得出...
...如果把V_SQL语句拿出来单独执行很快,这是为什么?
这个可能的原因有很多;首先,execute immediate v_sql语句需要硬解析,这是一个较为耗时的过程,而直接拿出来执行的语句,其查询分析树已经存在,所以只需要软解析。另外,execute immediate语句由于是硬解析,所以每次出来的计划都有可能不同,这是最需要注意的,可以为两种执行方法设置10046跟踪,看一下每...