Oracle实例和Oracle数据库的详解

来源:PChome原创文章属性:技巧作者:PChome编辑部

一、ORACLE实例

1、ORACLE实例——包括内存结构与后台进程

SystemGlobalArea(SGA)和BackgroundProcess称为数据库的实例。

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

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

3、系统全局共享区SystemGlobalArea(SGA)

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

SQL>select*fromv$sga;

NAMEVALUE

-

FixedSize39816

VariableSize259812784

DatabaseBuffers1.049E+09

RedoBuffers327680

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

主要包括以下几个部分:

a、共享池(Sharedpool)

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

SQL语句缓冲(LibraryCache)

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

下面举例说明parse的时间

SQL>selectcount(*)fromscpass;

COUNT(*)

--

243

Elapsed:00:00:00.08

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

SQL>altersystemflushSHARED_POOL;

Systemaltered.

清空Share_pool,保留Databuffer

SQL>selectcount(*)fromscpass;

COUNT(*)

--

243

Elapsed:00:00:00.02

SQL>selectcount(*)fromscpass;

COUNT(*)

--

243

Elapsed:00:00:00.00

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

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

数据字典缓冲区(DataDictionaryCache)

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

上文的内容相对来说还是很基础的,所以对于刚刚入门的初学者来说,学习初期,好好的研究一下本文中介绍的内容,相信对大家的入门学习会很有帮助的。

广告声明:文内含有的对外跳转链接(包括但不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,PChome科技所有文章均包含本声明。

相关文章

关键词:互联网

大家在看