oracle的构架图,如下所示:
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的命中率可以大大提高数据库的性能。
user process (客户端进程): 用户连接数据库进程。
database processes (数据库进程): server process:一个客户端连上数据库 就产生一个 SP和其对接。 background processes: 实例的组成部分,实例启动就启动。
daemon/ application processes (包括networking listeners 和 Grid infrastructure daemons (RAC的进程))
DBWn:数据库写进程,把buffer cache中的脏数据写到磁盘上。一大块数据写到内存上采用异步io。(可以配置多个)
LGWR: Log Writer Process。(只能使用一个)
CKPT:checkpoint Process
SMON:系统监控进程 pmon和smon对于实例是唯一的,ps -ef|grep pmon 如果有两个进程,就是两个实例。可以使用id区分。
PMON:进程监控进程
Recoverer Process
ARCn 归档进程
数据库存储架构:
数据文件可能特别大,控制文件大概几十兆,redo log文件大概几百兆。
原文:http://smallhill.blog.51cto.com/7402072/1575404