用已知的东西推未知的东西
Oracle 体系结构2:
修改参数的时候需要系统参数的设置
datagrad: 不同机房的database的冗余,容灾
goudegate:
Oracle连接过程
server服务进程:
1. 专用服务器( show parameter process) 150*1.2; 独占方式,占用后其他会话不能连接.
2.共享服务器
一. 共享池 SHARE Pool: SHARED_POOL_SIZE
私有内存区: PGA 包括 和连接的会话有关系,会话数越来越多,则占用服务器内存越来越大
session会话信息 ┒
sort排序信息 ┨ UGA 用户全局区
curser 游标信息 ┛
栈空间: 变量信息
共享内存区存放内容:
1. SQL语句本身(文本);分析树(多条路径) SQL执行计划;
2. 数据库字典表信息
优化策略:
1. 增加SGA大小
2. 绑定变量,宿主变量 (对于数据仓库,绑定变量可能会带来灾难); 可以通过存储过程调用中传递实参的方法来解决
3. 常驻内存语句,大对象保留区(SHARE_POOL_RESERVED_SIZE)
select * from v$shared_pool_reserved ;
Request_misses /requests 比较大则表示该区间不够
驻留语法:
select * from v$db_object_cache
where shareable_mem >10000
and (type = 'PACKAGE' or type = 'PACKAGE_BODY'
or type = 'PROCEDURE' or type = 'FUNCTION')
and kept='NO'
executedbms_shared_pool.keep('package_name'); 把包常驻共享内存
标准包(standard ,包括to_char,等);
executedbms_shared_pool.unkeep('package_name'); 把包取消常驻共享内存
通过建立触发器自动执行包常驻内存操作
判断参考值:
SQL语句命中率,共享池 要求达到85%;
select gethitratio from v$librarycache where ...= 'SQL AREA'
reload / ping的值如果>1% 需要增加共享池
二. 数据库缓冲区 data buffer pool:
DB_CACHE_SIZE 参数
DB_BLOCK_SIZE 单个块大小 数据仓库使用大的block ,主要看业务是否是连续的业务; 建库的时候就已经决定了.
DB_CACHE_SIZE 最小颗粒度(SGA不超过128M,则最小4M否则为16M)
优化方法:
1. 修改上面两个参数大小
2. 常驻内存表 (KEEP缓冲区 RECYCLE缓冲区 DEFAULT缓冲区)
建表的时候增加storage 参数;
alter table customer storage(BUFFER_POOL RECYCLE);
alter index … storage (BUFFER_POOL KEEP )
数据库缓冲区包括两个队列:
1. LRU队列
2. Dirty 队列 (满了就触发写操作)
判断参考值:
读命中对于联机交易系统要求90以上; 通过参考v$sysstat表