oracle结构
Instance与Database是一对N的关系 既 一个实例可以操作多个Database ,而一个Database只能被一个instance操作。
一、Memory Structures
1、SGA区内容
show sga 查看Database的内存结构
select * from v$bgprocess;查看所有可能会使用到的后台进程
select * from v$controlfile;查看系统下的控制文件
select * from v$datafile;查看系统下的数据文件
select * from v$logfile;查看系统下的日志文件
show parameter shared 查看共享区信息
show parameter db_cache 查看数据缓冲区信息
show parameter log 查看日志缓冲区信息
shared+ db_cache+ log= SGA_MAX_SIZE
show parameter SGA 查看sga信息
alter session set nls_language=american;
alter system set db_cache_size=64M; 将数据缓冲区设置为64M设定大小要符合 shared+ db_cache+ log= SGA_MAX_SIZE条件
alter system set db_cache_advice=on; 将oracle建议打开。可以建议 shared、 db_cache、 log大小
Shared pool
Library cache 保存最近使用的SQL和PL/SQL语句的信息。主要是为了提高代码的共享。可以有效的提高系统性能。使用的LRU算法。不能单独定义,
只能借助于shared pool来定义。
Data dictionary cache(row cache) 也就是数据字典。 也称为行cache 也即 row cache。
包含database file、table、indexes、columns、users、 privileges、and other database objects信息。不能单独定义,只能借助于shared pool来定义。
Database buffer cache:
Show parameter db;
参数一:db_16_cache_size db_32_cache_size
Db_cache_size
参数二:db_block_buffer
Oracle使用内存是以块大小为基本单位
DB_BLOCK_SIZE(init.ora文件中) 定义了默认块大小。(9i以前是固定的。以后的都是可以改变的)
块大小= db_block_buffer×DB_BLOCK_SIZE
DB_CACHE_SIZE
DB_KEEP_CHCHE_SIZE
DB_RECYCLE_CACHE_SIZE
DB_CHCHE_ADVICE 这个参数可以让oracle根据运行特征来分配shared、 db_cache、 log三者大小。用Show parameter db;命令可以查看该参数
是否打开。用 alter system set db_cache_advice=on;语句可以将该功能打开。
Redo log buffer
完成recovery功能。也即重做、回滚自己的改变。
Show parameter log_buffer 查看信息。
Large pool
Alter system set large_pool_size=20m;
Java pool
2、PGA区内容
二、Process Structures
User process
当启动一个工具、一个程序时会启动一个用户进程,不可以操作数据库,发出来的命令不可以直接管理database操作。
必须借助于Server process。必须建立和oracle的连接才能使用。
Server process
连接到oracle的instance而且是在用户建立session时启动。
用来履行用户进行产生的calls 并且返回结果。
可以被独占也可以被共享。
Background process
在oracle instance启动之后就启动。
必须的:DBWn PMON CKPT LGWR SMON PECO
可选的: ARCn LMON Snnn QMNn LMDn CJQ0 Pnnn LCKn Dnnn
Select * from v$bgprocess where paddr<>’00’查询必须的后台进程。
DBWn:用来把Database buffer cache中的脏数据(被改变的数据)写回到Data files中。
在以下条件会写回: Checkpoint(同步),
Dirty buffers threshold reached(Database buffer cache中的脏数据达到了一个值),
No free buffers(Database buffer cache中的自由空间太少了),
Timeout(3秒钟),
RAC ping request,
Tablespace offline,
Tablespace read only,
Table DROP or TRUNCATE,
Tablespace BEGIN BACKUP(进入备份模式)
LGWR:用来把 Redo log buffer中的写回到 Redo log files中
在以下条件会完成写的工作:
At commit (数据改变后,发出commit语句),
When one-third full(当1/3满),
When there is 1 MB of redo(日志每1MB就需要redo),
Every 3 seconds(每3秒钟),
Before DBWn writes(在写数据之前先写日志,写日志优先).
SMON:在database启动过程中需要recovery 则打开database,Roll back没有提交的transaction。
在系统中每3秒钟对自由空间的整理。
对临时段空间的清空。
PMON:
主要是回滚transaction
释放锁
释放其他资源
重启死掉的dispatchers(调度器)
CKPT:
在数据库中用来实现同步。
在同步之前会启动DBWn进程写脏数据
会更新datafile的headers(headers会纪录同步的信息)
会更新controlfiles的headers(headers会纪录同步的信息)
ARCn:
必须执行在归档日志模式下才会启动该进程。
用来自动备份我们的在线日志。
转载于:https://www.cnblogs.com/victor_chou/archive/2009/07/09/1520083.html