首页 > 代码库 > oracle 体系结构

oracle 体系结构

spacer.giforacle的构架图,如下所示:

wKioL1RhhuSykME-AAL7346SXXY733.jpg

database是数据的一个集合。 redolog files用于恢复data files。为了加强数据库的备份恢复能力,因此使用Archived Log files做归档。

-------------------------------------database---------------------------------------------------------

database由控制文件+数据文件+联机重做日志文件构成

oracle的数据文件存放在orardata目录下:

[oracle@ZSTNDB ~]$ cd oradata/

[oracle@ZSTNDB oradata]$ ls

fymhdb01.dbf   hismhdb02.dbf  hismhdb04.dbf  hismhdb06.dbf  mhdb02.dbf

hismhdb01.dbf  hismhdb03.dbf  hismhdb05.dbf  mhdb01.dbf     ZSTNDB

[oracle@ZSTNDB oradata]$ cd ZSTNDB/

[oracle@ZSTNDB ZSTNDB]$ ls

control01.ctl  redo01.log  sysaux01.dbf  undotbs01.dbf

control02.ctl  redo02.log  system01.dbf  users01.dbf

control03.ctl  redo03.log  temp01.dbf

[oracle@ZSTNDB ZSTNDB]$ pwd

/home/oracle/oradata/ZSTNDB

-------------------------------------instance---------------------------------------------------------

实例由内存块+后台进程构成。

启动oracle,实例启动后,

SQL> startup

ORACLE instance started.

Total System Global Area  205520896 bytes

Fixed Size                  1218532 bytes

Variable Size              71305244 bytes

Database Buffers          130023424 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

oracle启动的后台进程:

oracle    2257     1  0 17:35 ?        00:00:00 ora_pmon_ZSTNDB

oracle    2259     1  0 17:35 ?        00:00:00 ora_psp0_ZSTNDB

oracle    2261     1  0 17:35 ?        00:00:00 ora_mman_ZSTNDB

oracle    2263     1  0 17:35 ?        00:00:00 ora_dbw0_ZSTNDB

oracle    2265     1  0 17:35 ?        00:00:03 ora_lgwr_ZSTNDB

oracle    2267     1  0 17:35 ?        00:00:02 ora_ckpt_ZSTNDB

oracle    2269     1  0 17:35 ?        00:00:02 ora_smon_ZSTNDB

oracle    2271     1  0 17:35 ?        00:00:00 ora_reco_ZSTNDB

oracle    2273     1  0 17:35 ?        00:00:01 ora_cjq0_ZSTNDB

oracle    2275     1  0 17:35 ?        00:00:02 ora_mmon_ZSTNDB

oracle    2277     1  0 17:35 ?        00:00:00 ora_mmnl_ZSTNDB

oracle    2279     1  0 17:35 ?        00:00:00 ora_d000_ZSTNDB

oracle    2281     1  0 17:35 ?        00:00:00 ora_s000_ZSTNDB

oracle    2285     1  0 17:35 ?        00:00:00 ora_arc0_ZSTNDB

oracle    2287     1  0 17:35 ?        00:00:01 ora_arc1_ZSTNDB

oracle    2292     1  0 17:36 ?        00:00:00 ora_qmnc_ZSTNDB

oracle    2294     1  0 17:36 ?        00:00:00 ora_q000_ZSTNDB

oracle    2296     1  0 17:36 ?        00:00:00 ora_q001_ZSTNDB


oracle的内存结构包含SGA和PGA两部分组成。

SGA是系统全局区,一个instance只有一个SGA,在实例启动时候分配,是实例的组成部分。

PGA是程序全局区,一个server process启动就有一个PGA。随着服务进程的启动而创建。

[oracle@ZSTNDB ~]$ ipcs

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status      

0x00000000 163841     oracle     600        393216     2          dest         

0x00000000 196610     oracle     600        393216     2          dest         

0x00000000 229379     oracle     600        393216     2          dest         

0x237c554c 131076     oracle     640        207618048  19                      

0x00000000 262149     oracle     600        393216     2          dest         

0x00000000 294918     oracle     600        393216     2          dest         

0x00000000 327687     oracle     600        393216     2          dest         

0x00000000 360456     oracle     600        393216     2          dest         

0x00000000 393225     oracle     600        393216     2          dest         

0x00000000 425994     oracle     600        393216     2          dest         

0x00000000 458763     oracle     600        393216     2          dest         

0x00000000 491532     oracle     600        393216     2          dest         

0x00000000 524301     oracle     600        393216     2          dest         

0x00000000 557070     oracle     600        393216     2          dest         

0x00000000 589839     oracle     600        393216     2          dest         


------ Semaphore Arrays --------

key        semid      owner      perms      nsems     

0xdb9e4bd4 163842     oracle     640        154       


------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages    


SQL> show sga (查看sga的方法)

Total System Global Area  205520896 bytes

Fixed Size                  1218532 bytes

Variable Size              71305244 bytes

Database Buffers          130023424 bytes

Redo Buffers                2973696 bytes

查看sga的组成部分:

SQL> select component,granule_size from v$sga_dynamic_components;

COMPONENT                                                        GRANULE_SIZE

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

shared pool                                                           4194304

large pool                                                            4194304

java pool                                                             4194304

streams pool                                                          4194304

DEFAULT buffer cache                                                  4194304

KEEP buffer cache                                                     4194304

RECYCLE buffer cache                                                  4194304

DEFAULT 2K buffer cache                                               4194304

DEFAULT 4K buffer cache                                               4194304

DEFAULT 8K buffer cache                                               4194304

DEFAULT 16K buffer cache                                              4194304


COMPONENT                                                        GRANULE_SIZE

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

DEFAULT 32K buffer cache                                              4194304

ASM Buffer Cache                                                      4194304

13 rows selected.


//share pool: 共享池用于 store most recently exexuted SQL statement and used data definitions.

share pool: 包含 library cache和 data dictionary cache。它们关系着数据库的性能。

设置的参数: SHARED_POOL_SIZE,可以使用如下sql语句,改变share pool的尺寸;

ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;


labrary cache: 存储经过sql和pl/sql statements。

包括两个 structures: shared sql area和 shared pl/sql ares

主要存储用户发出的sql语句,解析过的东西,如果下次执行相同的sql语句,就不需要在解析,直接使用。


Data dictionary cache:主要存放的信息有:各种对像的定义,用户,权限和角色,空间分配,栏位的
DEFAULT值,约束和审计等一些其他信息。


Database Buffer Cache:提高数据库的性能的,里面存储的是数据块。因为oracle数据是使用 data block为单位存储的,所以提高buffer cache的命中率可以大大提高数据库的性能。

wKioL1RhvM7x_lNCAAO2k_mOYec881.jpgoracle的进程包括:

user process (客户端进程): 用户连接数据库进程。

database processes (数据库进程): server process:一个客户端连上数据库 就产生一个 SP和其对接。 background processes: 实例的组成部分,实例启动就启动。

daemon/ application processes (包括networking listeners 和 Grid infrastructure daemons (RAC的进程))


wKiom1RhvjzyX5I-AAOWU-WdKNg074.jpg

DBWn:数据库写进程,把buffer cache中的脏数据写到磁盘上。一大块数据写到内存上采用异步io。(可以配置多个)

LGWR: Log Writer Process。(只能使用一个)

CKPT:checkpoint Process

SMON:系统监控进程 pmon和smon对于实例是唯一的,ps -ef|grep pmon 如果有两个进程,就是两个实例。可以使用id区分。

PMON:进程监控进程

Recoverer Process

ARCn 归档进程


wKioL1RhwGzjLD3YAAKjYZXxn70548.jpg

wKioL1RhwG2RF8iqAAK_QIUM660470.jpg

wKiom1RhwMPTUng4AAGDkK06cqU057.jpg

wKiom1RhwuKiPpsEAAHsCAQsmKQ162.jpg

wKiom1RhwuPCFPoSAAN_I1bn-4I627.jpg

wKioL1Rhw06zoaq4AAKnFB0r7xU391.jpg

wKiom1RhwuSDZ8oFAAJDmq6L-eo188.jpg

数据库存储架构:

wKioL1RhxDeTg1pjAAJG--qZ8Rs492.jpg数据文件可能特别大,控制文件大概几十兆,redo log文件大概几百兆。

oracle 体系结构