ORACLE实例和ORACLE数据库详解(一)

日期: 2009-02-12 来源:TechTarget中国 英文

  一、ORACLE实例

  1、ORACLE实例——包括内存结构与后台进程System Global Area(SGA)和Background Process称为数据库的实例。

  2、ORACLE 数据库——物理操作系统文件的集合

  一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)

  3、系统全局共享区System Global Area(SGA)

  System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看:


 SQL> select * from v$sga;
  NAME VALUE
  ——————– ———
  Fixed Size 39816
  Variable Size 259812784
  Database Buffers 1.049E+09
  Redo Buffers 327680

  更详细的信息可以参考V$sgastat、V$buffer_pool

  主要包括以下几个部分:

  a、 共享池(Shared pool)

  共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:

  SQL语句缓冲(Library Cache)

  当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。

  下面举例说明parse的时间


SQL> select count(*) fromscpass ;
  COUNT(*)
  ———-
  243
  Elapsed: 00:00:00.08

  这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间


SQL> alter system flush SHARED_POOL;
  System altered.

  清空Share_pool,保留Data buffer


 SQL> select count(*) from scpass ;
  COUNT(*)
  ———-
  243
  Elapsed: 00:00:00.02
  SQL> select count(*) from scpass ;
  COUNT(*)
  ———-
  243
  Elapsed: 00:00:00.00

  从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02

  对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。

  a,数据字典缓冲区(Data Dictionary Cache)

  显而易见,数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE内部使用,没有什么可以说的。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐