一个ORACLE系统大致分为两个部分:
实例
实例是一组内存和进程
实例主要是为数据库提供一个运行环境和管理手段
数据库
数据库是数据的集合
主要体现为三类文件:控制文件、数据文件、日志文件
实例与数据库是一对一或多对一的关系
ORACLE实例结构:
ORACLE实例内存结构
ORACLE实例内存结构由两部分组成:SGA和PGA
SGA 系统全局区
这一部分数据是所有用户共享的
PGA 程序全局区
这一部分的数据是每个会话私有的
SGA结构:
shared pool
存储最近执行的sql语句、plsql代码、结果缓存
shared pool 有两个子池:库缓存、字典缓存
查看:
SQL> show parameter shared_pool
SQL> alter system set shared_pool_size = 200m;
database buffer cache:
存放从数据文件中读取到的数据块镜像
在管理上遵循LRU原则
查看:
SQL> show parameter db_cache_size
SQL> alter system set db_cache_size=200m;
redo log buffer:
日志缓冲区
记录所有数据块的改变
当达到一定量的时候写到日志文件中
日志缓冲区一般不需要太大,太大也是浪费
SQL> show parameter log_buffer
java pool:
数据库中有java存储过程等代码时需要
有时数据库升级会涉及到一些java之类代码,此时可以把java_pool 调大一些
stream pool:
使用oracle流之类时,要设置
large pool:
分配大内存块时,需要
共享服务进程时,为了减少共享池的压力也需要
大规模IO操作时,如RMAN备份恢复操作时,可能会用到
共享池,每一部分设置多大,过去是非常麻烦的问题,10g 开始,引入了 ASMM (自动共享内存管理)
使用ASMM的方法:
把 sga_target 设置一个SGA的目标值,但 sga_target 受制到 sga_max_size
sga_target 必须小于、等于 sga_max_size
PGA
PGA 存放的是用户的私有数据,它一般包括: 排序区、哈稀区、位图合并区等
但PGA早已实现在自动管理,所以很少去设置这些了。
PGA 和 ASMM也类似,一般通过 pga_aggregate_target 分配服务器总的PGA大小
使用PGA自动管理时,workarea_size_policy 要设置为 auto
11G开始又有了新的变化
它可以实现自动内存管理,设置 memory_target 可以让oracle 自动管理内存分配
使用自动内存管理时要注意
statistics_level 不能为basic
实例进程结构:
ORACLE必须的后台进程:
DBWR 数据写进程
DBWR负责把脏缓存(修改过的)写到数据文件中,DBWR的触发时机:
发生检查点
脏缓存达到限制,没有自由的缓存
表空间离线
表空间只读
开始热备份表空间 ( begin backup )
表截断
LGWR 日志写进程
负责把日志缓冲区的内容写到日志文件中,LGWR的触发时机:
提交的时候
日志缓冲区达到三分之一满
日志大小达到1M
每隔3秒
SMON 系统监控进程
实倒在启动的过程中,检查系统状态,必要的时间进行前滚和回滚
释放临时表空间
PMON 进程监控
清除失败的进程、回滚其事务、释放锁等
CKPT 检查点进程
给信号给DBWR,更新文件头、控制文件等,适时的保持系统控制文件、数据文件的一致
ARCn 归档进程
数据库
数据库就是数据的仓库,主要体现为:数据文件、控制文件、日志文件
除了这三类文件以外,还有一些外部文件:参数文件、密码文件、归档日志文件
实例
实例是一组内存和进程
实例主要是为数据库提供一个运行环境和管理手段
数据库
数据库是数据的集合
主要体现为三类文件:控制文件、数据文件、日志文件
实例与数据库是一对一或多对一的关系
ORACLE实例结构:
ORACLE实例内存结构
ORACLE实例内存结构由两部分组成:SGA和PGA
SGA 系统全局区
这一部分数据是所有用户共享的
PGA 程序全局区
这一部分的数据是每个会话私有的
SGA结构:
shared pool
存储最近执行的sql语句、plsql代码、结果缓存
shared pool 有两个子池:库缓存、字典缓存
查看:
SQL> show parameter shared_pool
SQL> alter system set shared_pool_size = 200m;
database buffer cache:
存放从数据文件中读取到的数据块镜像
在管理上遵循LRU原则
查看:
SQL> show parameter db_cache_size
SQL> alter system set db_cache_size=200m;
redo log buffer:
日志缓冲区
记录所有数据块的改变
当达到一定量的时候写到日志文件中
日志缓冲区一般不需要太大,太大也是浪费
SQL> show parameter log_buffer
java pool:
数据库中有java存储过程等代码时需要
有时数据库升级会涉及到一些java之类代码,此时可以把java_pool 调大一些
stream pool:
使用oracle流之类时,要设置
large pool:
分配大内存块时,需要
共享服务进程时,为了减少共享池的压力也需要
大规模IO操作时,如RMAN备份恢复操作时,可能会用到
共享池,每一部分设置多大,过去是非常麻烦的问题,10g 开始,引入了 ASMM (自动共享内存管理)
使用ASMM的方法:
把 sga_target 设置一个SGA的目标值,但 sga_target 受制到 sga_max_size
sga_target 必须小于、等于 sga_max_size
PGA
PGA 存放的是用户的私有数据,它一般包括: 排序区、哈稀区、位图合并区等
但PGA早已实现在自动管理,所以很少去设置这些了。
PGA 和 ASMM也类似,一般通过 pga_aggregate_target 分配服务器总的PGA大小
使用PGA自动管理时,workarea_size_policy 要设置为 auto
11G开始又有了新的变化
它可以实现自动内存管理,设置 memory_target 可以让oracle 自动管理内存分配
使用自动内存管理时要注意
statistics_level 不能为basic
实例进程结构:
ORACLE必须的后台进程:
DBWR 数据写进程
DBWR负责把脏缓存(修改过的)写到数据文件中,DBWR的触发时机:
发生检查点
脏缓存达到限制,没有自由的缓存
表空间离线
表空间只读
开始热备份表空间 ( begin backup )
表截断
LGWR 日志写进程
负责把日志缓冲区的内容写到日志文件中,LGWR的触发时机:
提交的时候
日志缓冲区达到三分之一满
日志大小达到1M
每隔3秒
SMON 系统监控进程
实倒在启动的过程中,检查系统状态,必要的时间进行前滚和回滚
释放临时表空间
PMON 进程监控
清除失败的进程、回滚其事务、释放锁等
CKPT 检查点进程
给信号给DBWR,更新文件头、控制文件等,适时的保持系统控制文件、数据文件的一致
ARCn 归档进程
数据库
数据库就是数据的仓库,主要体现为:数据文件、控制文件、日志文件
除了这三类文件以外,还有一些外部文件:参数文件、密码文件、归档日志文件
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755686/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21175589/viewspace-755686/