Oracle 的体系结构(Architecture of ORACLE)学习笔记

Oralce 8i 的体系结构

一、Oracle server

Oracle server Oracle的实例(Instance)和数据库(Database)两部分构成。一般情况下,在一个Server中,一个Database 对应一个Instance,但是在Oracle 8I中的OPSOracle 9I的中RAC中,一个Database可以对应一个以上的Instance

Database:指的是一系列的物理文件的集合(包括控制文件、数据文件、联机日志文件、密码文件、参数文件、归档文件)。即一系列与磁盘有关的物理文件。

Instance:Oracle和内存结构和后台进程。

二、Oracle的内存结构(Memory Structure

Memory Structure包括共享内存(SGAsystme global area)和非共享内存(PGA: program global area)。

(1)     PGA program global area

包括:Sort areaSession info Stack Space

PGA用户连接进程在本地创建的一块内存区,其它进程不能访问。

UGAuser global area)实际是会话的状态,是会话必须始终能得到的内存。专用服务器,该内存在PGA中分配,对于MTS连接方式,该内存在Large pool中分配。

 

可以用下面的方法查看PGA明细:

SQL> select * from v$pgastat;

 

NAME                                VALUE UNIT

------------------------------ ---------- ------------

aggregate PGA target parameter   16777216 bytes

aggregate PGA auto target         4194304 bytes

global memory bound                838656 bytes

total PGA inuse                  14253056 bytes

total PGA allocated              17117184 bytes

maximum PGA allocated            17117184 bytes

total freeable PGA memory               0 bytes

PGA memory freed back to OS             0 bytes

total PGA used for auto workar          0 bytes

eas

 

maximum PGA used for auto work          0 bytes

areas

 

total PGA used for manual work          0 bytes

areas

 

maximum PGA used for manual wo          0 bytes

rkareas

 

over allocation count                 246

bytes processed                   5251072 bytes

extra bytes read/written                0 bytes

cache hit percentage                  100 percent

 

已选择16行。

 

2SGA

包括:Data buffer cacheKeep, default, Recycle,database buffer cacheRedo bufferShared poolLibray Cache[libray cache,pl/sql and packages,lock and others structures],data dictionary cache, control sturctures,larger pool,java pool.

可以用以下的方法查询SGA的大小:

SQL> select * from v$sga;

 

NAME                      VALUE

-------------------- ----------

Fixed Size               453252

Variable Size          46137344

Database Buffers       37748736

Redo Buffers             667648

 

SGA的明细信息:

SQL> select * from v$sgastat;

 

POOL        NAME                            BYTES

----------- -------------------------- ----------

            fixed_sga                      453252

            buffer_cache                 37748736

            log_buffer                     656384

shared pool krvxrr                         126528

shared pool enqueue                        171860

shared pool DML lock                       100408

shared pool KGK heap                         3756

shared pool KQR M PO                       135696

shared pool KQR S PO                        14336

shared pool sessions                       410720

shared pool sql area                       621332

shared pool 1M buffer                     2098176

shared pool KGLS heap                      263844

shared pool processes                      144000

shared pool db_handles                     108000

shared pool kglsim sga                     136104

shared pool free memory                  19963104

shared pool FileOpenBlock                  695504

shared pool library cache                 1577312

shared pool miscellaneous                 3215452

shared pool MTTR advisory                    4220

shared pool PLS non-lib hp                   2068

shared pool joxs heap init                   4220

shared pool kgl simulator                  562000

shared pool sim memory hea                  12692

shared pool table definiti                     56

shared pool trigger defini                    468

shared pool trigger inform                    432

shared pool trigger source                    100

shared pool Checkpoint queue               282304

shared pool dictionary cache              1610880

shared pool ksm_file2sga region            148652

shared pool KSXR receive buffers          1033000

shared pool character set memory           143280

shared pool character set object           274508

shared pool FileIdentificatonBlock         323292

shared pool KSXR large reply queue         166104

shared pool message pool freequeue         834752

shared pool KSXR pending messages que      841036

shared pool event statistics per sess     1718360

shared pool fixed allocation callback         180

large pool  free memory                   8388608

另外,也可以

SQL> select * from v$buffer_pool;

 

        ID NAME                           BLOCK_SIZE RESIZE_STA CURRENT_SIZE    BUFFERS TARGET_SIZE TARGET_BUFFERS

---------- ------------------------------ ---------- ---------- ------------ ---------- -----------

 PREV_SIZE PREV_BUFFERS    LO_BNUM    HI_BNUM   LO_SETID   HI_SETID  SET_COUNT

---------- ------------ ---------- ---------- ---------- ---------- ----------

         3 DEFAULT                             16384 STATIC               36       2277          36           2277

         0            0          0          0          3          3          1

3)共享池(shared pool

共享池太小时,性能会受到严重的影响,但是共享池太大,将花费太多的CPU来管理共享池。

主要有以下两部分构成:

第一、   SQL语句缓冲(library cache

用户提交一个SQL语句时,首先要进行解析(Parse),Oracle会把解的结果存放在shared pool library cache,在第二次执行该语句时,不再解析,直接利用上次执行的结果,这样可以避免再次解。这也是第一次运行SQL语句比第二次运行相同的语句要快一些的原因。

使用

SQL> alter system flush shared_pool;

系统已更改。

可以清空共享池。

也可以用

SQL> select * from v$sqlarea;

SQL> select * from v$sqltext;

查询已解析的SQL语句。

 

要提高 Sharee_pool 的利用率,首先要使用变量Bind的方法书写SQL

第二、   数据字典缓冲区(data dictionary cache:

Oracle 内部数据字典缓冲区。没有别的用处。

第三、   块缓冲区(database buffer cache:

所有数据都可以在这里缓冲。在这里,不再区数据文件、临时数据文件、回滚段文件等,只要是需要缓冲的,都可以存放到这里。

所有的块,使用两种列表来管理:

(1)       脏表(dirty list):最后由DBWR写入到磁盘。

(2)       不脏表(LRU list:使用最近最少使用算法(LRULeast Recently used)来管理。

Database buffer cache可以划分成以下三种类型:

(1)    Keep pool

(2)    Defualt pool  (Oracle 默认,但是可以通过 init.ora来更改)

(3)    Recycle pool

由于操作系统的限制,如果不特殊设置,在32Bit的系统上,database buffer cache 最大可以达到1.7G。在64bit 的系统上,可以达到10G

4) 重做日志缓冲区(redo log buffer:

数据库的所有修改,都是按顺序写进redo log buffer.达到一定的条件时,由LGWR写入日志文件。

作用:用内存到内存的快速操作,可以加快数据库的操作。同时,日志文件批量写入要比分散写入的效率高。

日志文件就是用来恢复数据库的,为保持数据库的一致性与可恢复性,日志在redo log buffer 中存在的时间不会太长,最长不超过3秒。同时,日志容量不能太大,超过1M时,LGWR会将日志写入日志文件。因此,日志缓冲区一般在3M左右,大于3M没有太大的意义。

5Java Pool

Oracle8i 以后,加入了对Java的支持,Java pool用于运行JVM所需的内存空间。

6Large pool

大池从Oracle 8 开始引入,主要用于分配大块的内存,处理比共享池大的内存。(不是因为Large pool大)。

作用:

第一、   采用MTS连接方式时,在Large pool中分配UGA(使每个线程都可以访问)。

第二、   采用RMAN备份时,用作磁盘I/O的缓存。

第三、   作并行运算时,用于进程间消息的缓存。

三、后台进程

后台进程是Oracle用于执行具体任务的进程,包括数据库的读写、恢复、监视等任务。1Server process

负责和User Process连接通信,用于接收客户端的请收,并返回操作结果。

2DBWR(数据写进程)

Database buffe cache中的脏数据写入到数据文件中。同时也管理空闲的Database Buffe cache

DBWR是一个底层的进程,和用户进程没有关系。也不受前台客户进程的控制。

3Lgwr (日志写进程):

LGWR 将把LOG BUFFER CACHE 中的日志信息写入磁盘(日志文件)。是一个必须和前台用户进程通信的进程。如果数据库有任务的变化,都将产生重做日志,并写入日志缓冲区(log buffer cache,重做日志的格式如下:

SCN000000100

数据块ID

对象ID 801

数据行=02

修改后的数据=0011

LGWR触发时机:

[1] 用户提交时,LGWR将日志写入磁盘。

[2] DBWR需要写入数据的SCN号大于LGWR记录的SCN号,将触发LGWR写日志操作。

4SMON系统监控进程

主要工作;

[1] 系统启动时,实例恢复

[2] OPS节点失败时,进行失败节点的实例恢复。

[3] 调整回滚段到最优化状态

[4] 清除临时空间

[5] 清除OBJ$

[6] 从不可用的文件中恢复事务

5PMON进程监控

PMON用于监控用户进程,清除失效用户的进程,释主用户进程所占用的资源,如回滚未提交的事务,释放锁,释放分配组失效用户的SGA资源。

6CKPT 进程检查点

DBWRLGWR同步数据文件和日志文件、控制文件时,将会引起文件这些文件头文件信息的不一致。CKPT用来同步这些文件的头文件信息。

CKPT有以下的运行时机:

[1] 用户触发

[2] 日志切换时

[3] 使用Normal,immediate,transcationshutdown 数据库时

[4] 以下参数的设置:

LOG_CHECKPOINT_INTERVA LOG_CHECKPOINT_TIMEOUT FAST_START_IO_TARGET

 

SCN(system change number):

可以用以下方法得到系统的SCN号:

SQL> select max(ktuxescnw * power(2,32) + ktuxescnb) scn from x$ktuxe;

 

       SCN

----------

      142955

SCN特点:

第一、   查询不会使SCN号增大;

第二、   更新时,数据库内部的SCN号也是不相同的,可以保证数据库恢复时的顺序;

第三、   维持数据一致性。

如查询数据时,首先要取得系统的SCN号,然后核对找到后的每一条数据的SCN号,如果该SCN号小于系统的SCN号,就认为没有改变,可以从数据缓冲区中取出,如果大于了系统SCN号,就从回滚段数据文件中取出原来缓冲的数据。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值