张志国

合肥科技研发中心

Oracle数据库服务器有两个主要的组成部分:数据库和实例(instance)。Oracle数据库用于存储和检索信息,是数据的集合。Oracle实例是指数据库服务器的内存及相关处理程序。

正因为如此,我们一般才会说关闭和启动实例,加载卸载数据库,就是这个道理。

从实例和数据库的概念上来看,我们能知道,实例是暂时的,它不过是一组逻辑划分的内存结构和进程结构,会随着数据库的关闭而消失,而数据库其实就是一堆物理文件(控制文件,数据文件,日志文件等等),它是永久存在的(除非磁盘损坏)。数据库和实例通常是一对一的,这种结构我们称为单实例体系结构。当然还有一些复杂的分布式的结构,一个数据库可以对多个实例,像Oracle的RAC(有兴趣的童鞋可以了解下)。

一、Oracle数据库的物理体系结构

如上图,我们可知:

① Oracle由实例instance和数据库database组成。

② 实例是由一个共享内存区SGA (G=Global)和一系列后台进程组成。SGA划分为共享池、数据缓冲区和日志缓冲区三类。后台进程包括DBWR、LGWR、CKRT、ARCH等。

③ 数据库由数据文件、参数文件、日志文件、控制文件、归档日志等组成,其中归档日志最终会被转移到存储介质中,用于备份和恢复数据使用。

④ PGA也是一块开辟出来的内存区,和SGA区别在于,PGA是私有的。作用主要包括:保存用户的连接信息,如会话和绑定变量,保存用户权限等信息,承担一部分(排序尺寸太大的话,超出的部分放在临时表空间进行)排序功能。

二、由物理体系结构探查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,第二次比第一次快。另外,采用绑定变量的方式,可以避免多次硬解析的操作,节约执行时间,也可以达到优化的效果。

oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...相关推荐

  1. oracle 查看索引大小_技术分享|简述Oracle统计信息

    于树文 云技术管理处 在Oracle的11g版本中,统计信息为自动收集功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能).有时候在生产环境中, ...

  2. 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结

    本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...

  3. jdbc连接teradata仓库_技术分享:如何基于对象存储打造一个高性能、完全托管的PB级MPP数据仓库...

    本文将介绍北京一家初创企业 HashData 构建基于云原生的 MPP 平台的过程.该企业利用对象存储作为数据持久层,Alluxio 作为云中的数据编排层,最终构建了一个原生云高性能 MPP 共享的体 ...

  4. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  5. mysql分布式主键_技术分享 | 优化 InnoDB 的主键

    作者:Yves Trudeau 翻译:管长龙 前言 作为 Percona 的首席架构师,我的主要职责之一是对客户的数据库进行性能方面的优化,这使得工作复杂且非常有趣.在这篇文章中,我想讨论一个最重要的 ...

  6. mysql 如何设置延迟启动_技术分享 | MySQL 网络延时参数设置建议

    作者:毛思平 工作11年,从事数据库工作7年,主要在金融行业.主要是做oracle,mysql.现在在农行软开中心主要做数据库应用方面的研究. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授 ...

  7. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  8. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  9. java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...

最新文章

  1. golang非对称加密
  2. kettle预览点两下才出数_BBG代王 | 7.16直播预览
  3. mac如何导入python第三方库_Mac系统中python idle导入第三方模块成功,ecplise导入python第三方模块失败解决方法...
  4. [Ruby on Rails]Rails 3使用ActionMailer通过163发送邮件
  5. 必读!Java开发人员的十大戒律
  6. SnackbarUtils:一行代码搞定Snackbar
  7. 微信小程序 - 贝塞尔曲线(购物车效果)
  8. matlab coder分析
  9. 怎么给表格加一列序号_excel表格怎么添加序号
  10. Excel VBA——两种获取使用最大行数的方法
  11. 2019 年第一季度 Dapp 报告,EOS 表现抢眼,TRON增长猛烈
  12. Python-Tkinter 基础教程
  13. 父类的对象指向子类对象,父类可以调用子类的方法吗?
  14. 北京法院京牌小客车司法处置数据统计(Pandas)
  15. ScrumMaster的六大主要职责
  16. 快递取件码生成软件_一种分布式的取件码生成方法技术
  17. 您的计算机运行的可能是盗版,为何我的电脑总跳出来:您的电脑可能是WINDOW盗版的受害者...
  18. 计算机病毒教案 大学,计算机病毒教案版本
  19. 【面试心得】2017CVTE春招面试笔试心得(失败的体会)
  20. 藍牙耳機音質一定差? 瞭解音訊轉碼器來打破迷思

热门文章

  1. 浅谈HSRP(热备份路由选择协议)
  2. Windbg内核调试之一: Vista Boot Config设置
  3. 有意思的前端函数面试题
  4. Android adt 初步理解和分析(三)
  5. Android AIDL的实现
  6. 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议
  7. Cisco mode键的作用详解
  8. 【Demo】采购订单收货Bapi
  9. SAP销售和财务数据库表之间的关系
  10. LSMW批处理使用方法(09)_步骤10、11