赞
踩
张志国
合肥科技研发中心
Oracle数据库服务器有两个主要的组成部分:数据库和实例(instance)。Oracle数据库用于存储和检索信息,是数据的集合。Oracle实例是指数据库服务器的内存及相关处理程序。
一、Oracle数据库的物理体系结构
二、由物理体系结构探查SQL执行步骤
一条查询语句:SELECT T.OBJECT_ID FROM DBA_OBJECTS T WHERE T.OBJECT_ID = 12;Oracle会执行如下步骤:
(1)这个时候先完成PGA的3步骤中的头2步:保存会话信息,用户权限信息,然后将sql语句hash出一条hash值。
(2)带着hash值,sql进入了第二个区域:共享池,在这里首先查找是否有同样的hash值。如果没有,那么就比较辛苦:首先查询语法是否正确,然后查询语义(表和字段有没有写错)是否正确,是否有权限等,确认完这些,将hash值存储下来。接下来进行硬解析,经过优化器分析以后Oracle会选择一个低成本的执行计划。
(3)带着执行计划的sql接下来进入第三个区域:数据缓存区,去获得需要的数据,如果查到该数据,则返回给sql带回到PGA。如果没有,就要大费周章地去磁盘(增大IO降低速度)里面查找。查找的方式就是按照执行计划来。读出来的数据会被放回数据缓存区和PGA。
但是,执行同样一条查询语句,第二次的时间明显变少了。第一次执行耗时:2.547S,第二次执行耗时:0.141S。前后两次执行同一条语句,第二次比第一次少很多时间。原因是第二次少做了一些事情:
(1)因为会话没有断开,所以不需要再去数据库读取权限和用户信息,少了很多物理读。
(2)因为是第二次执行同一条语句,所以SGA的共享池里已经保存了相对应的hash值,比照一样之后,不需要做语法语义的验证,也不需要做硬解析获得优化的执行计划,只要把已经解析好的执行计划拿来用就好。
(3)数据被取到SGA的数据缓存区里面,也不需要去硬盘读。
三、由物理体系得到优化方案
由以上的访问步骤可以知道,只要理解好数据库的物理结构,就可以得到一些优化思路:采用绑定变量的方式,可以避免多次硬解析。
优化前:
create table t (x int);
create or replace procedure proc1
as
begin
for i in 1..100000
loop
execute immediate
‘insert into t values(‘||i||’)’;
commit;
end loop;
end;
/
以上为存储过程的定义
exec proc1; 执行耗时42.87s;
优化后:采用绑定变量方式,减少解析时间
drop table t purge;
create table t (x int);
create or replace procedure proc2
as
begin
for i in 1..100000
loop
execute immediate
'insert into t values( :x )' using i;
commit;
end loop;
end;
/
以上为存储过程的定义
exec proc2; 执行耗时8.41s
四、小 结
因为Oracle有缓存的功能,如果有缓存SQL相应的连接信息、权限信息、执行计划、数据等,不用去磁盘上读取,可以减少物理读。所以执行相同的SQL,第二次比第一次快。另外,采用绑定变量的方式,可以避免多次硬解析的操作,节约执行时间,也可以达到优化的效果。
文章来源:公众号“I生活T精彩”
你“在看”我吗
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。