当前位置:数据库 > Oracle >>

Oracle sql高级编程学习笔记(一)SQL执行理论

Oracle sql高级编程学习笔记(一)SQL执行理论
 
一,共享池 SGA
1,执行过的每一条SQL语句在共享池中都存有解析后的内容,存储这些语句的地方称为库高速缓存(library cache).不管多少用户要执行同样的语句sql,Oracle都会只解析一次;
 
2,数据字典高速缓存(dictionary cache)存储所有的系统参数等数据库信息;
 
3,分配给共享池的内存是有限,当新语句执行时,oracle用最近最少用算法(LRU)管理共享池的内存,将最近执行频率成高的覆盖执行频率低的sql内容。
 
4,软解析和硬解析:解析包括验证语句的语法,检验提交的对象以及确认对象的用户权限,如果检查通过,再去检查该语句是否执行过,如果是,oracle重用直接解析过的内容,称为软解析;否则oralce将执行所有的工作来为当前的sql语句生成执行计划,并将它存在缓存中以便后续重用,此解析称为硬解析;
 
5,可以通过查询v$sql 试图来查询当前存放在库高速缓存的SQL语句。
 
6,在执行sql时,即使是代表同一个功能的语句,大小写不一样,有无注释,Oracle都将视为不同的sql语句,如select * from employee 和 SELECT * FORM EMPLOYEE;oracle将为之生成不同的执行计划;
7,条件查询时,如果使用常量查询,如select * from employee where employee_id = 101 和 select * from employee where employee_id = 102,oracle将进行硬解析。但是如果采用绑定变量,则可以重用,如:select * from employee where employee_id =:v_empl_id.
 
8,锁存器:用来保护库高速缓存避免被两个同时进行的会话修改,也就是说如果oracle为了检查你要执行的sql语句是否已经存在而要在库高速缓存中获取一个锁存器,检查锁存器是否空闲。如果空闲则获取锁存器并做它的工作,否则会迭代轮询锁存器是否空闲 spinning. 故,正确编写代码使其较少使用锁存器也是非常重要的.
 
9,SGA-缓存区缓存   在数据库从硬盘读取数据出来后或者写入硬盘之前,缓存区缓存用来存储数据块。块是oracle进行操作的最小单位,验证块是否在缓存区都必须获取锁存器,写sql获取数据应该尽可能的访问尽可能少的数据块。如果数据库在缓存区,访问该数据块是一次逻辑读取,否则为物理读取。
 
二, 查询转换  
1,在sql语句通过语法权限检查后,查询就进入了转换为一系列查询快的转换阶段。查询转化器可能会改变你最初所写查询的结构,但是不会改变最终的结果集。查询转换的目的就是确定如果改变查询结构的写法是否会提供更好的查询计划。
2,试图合并
3,谓语前推
4,使用物化试图进行查询重写
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,