一、体系结构
ORACLE是一个具有跨平台特性的数据库,ORACLE SERVER分为database和instance。数据文件、控制文件、联机重做日志、参数文件、密码文件等组合称为database。一个database可以被一个或多个instance mount。instance由内存区和后台进程组成。
二、instance
内存区:SGA+PGA,PGA:会话信息、排序区、hash join区、栈空间
SGA:shared pool,large pool,java pool,db buffer,log buffer,stream pool,相关视图:v$sga,v$sga_dynamic_components(保存SGA中可以动态调整的区域的一些动态或者手工调整记录)
a)
shared pool:一个太小的共享池会导致ORA-0431错误,太大的共享池会消耗大量的CPU管理。该区域分为library cache,dd cache及一些控制结构。dd cache和控制结构是用户无法直接控制的,用户只能控制library cache(sql语句缓冲区),这涉及到sql语句的解析问题,sql语句的解析分为硬解析、软解析、快速解析,在OLTP系统中,强烈要求有bind variable。替代参数cursor_sharing存在比较多问题,而且我们也碰到对应的bug,在生产环境,建议不使用该参数。共享池是采用LRU算法来判断对象是否保留,对于间歇性访问的比较大的对象(过程与包...),可以用dbms_shared_pool.keep将该过程或包pin在共享池中。与共享池有关的视图:v$sqlarea,v$sqltext_with_newlines,v$sql_plan,v$sqltext,v$shared_pool_advice
b)
data buffer:数据缓冲区虽不会象共享池那样容易导致系统故障,但是它却影响着数据库性能,因为它可以避免磁盘寻道动作,cache hit和cache miss就是衡量cache命中率的参数。对于OLTP来说,cache命中率是很重要的,对于OLAP来说则不然,因为OLAP要取的数据量N大,所以这时我们会从存储带宽考虑。数据缓冲区的快基本在2个链表上,Dirty list&LRU list。Dirty list表示被修改过的块,采用检查点队列来管理这些块,定时启动DBWR将它们写到db file,对于LRU list,表示不脏块的列表,通常是select从硬盘读过来的块,从8i开始,还引入了touch概念,使得LRU算法更加复杂。块缓冲区高速缓存(LRU list)可以分为3个部分,default pool、keep pook、recycle pool。从9i开始,oracle又支持创建不同块尺寸的表空间,解决了在不同块大小的数据库之间传输表空间的问题,并且可以为不同块尺寸的数据块指定不同大小的数据缓冲区,不同块尺寸的数据缓冲区大小由db_nk_cache_size来指定。v$bh记录了数据块在数据缓冲区内的使用情况。
c)
PGA:9i开始,用pga_aggregate_target来指定所有session共同使用最大PGA内存上限,用workarea_size_policy来控制是否自动PGA调整机制,如果为AUTO则表示采用自动PGA管理,如果为MANUAL,则需要自己定义每个session的sort_area_size,hash_area_size。10g后oracle开始用了自动SGA管理,通过设置sga_target来实现,如果sga_target设为0表示采用手工管理SGA内存组件方式。11g中引入了memory_target和memory_max_target来控制整个内存。SGA+PGA大小设置:如果内存为1G,2者和为40%~50%,如果内存为4G~8G:设置为50%~60%,如果内存大于8G,设置为60~70%,强烈建议在任何情况下,PGA+SGA大小不高于物理内存的70%,在AIX上出现过设置过大而宕机现象。
三、后台进程
dbwr:负责将数据缓冲区中数据写入db file。触发条件:1、超时,大约3秒。2、系统中没多余空闲缓冲区来存放数据。3、ckpt触发
lgwr:负责将日志缓冲区中数据写入联机日志文件,当数据被修改时,系统会产生一个重做日志并记录在重做日志缓冲区中。触发条件:1、用户提交。2、有1/3重做日志缓冲区未被写入磁盘。3、有大于1M重做日志缓冲区未被写入磁盘。4、超时。5、dbwr需要写入的scn大于lgwr记录的scn,dbwr触发lgwr
ckpt:检查点进程,负责同步数据文件、控制文件和联机日志文件。
四、scn
scn:scn可能存在于数据文件头、控制文件头、联机日志文件、归档文件,甚至存在于数据块中,通过控制文件和数据文件的scn对比,可以知道当前数据文件与控制文件是否同步,是否需要介质恢复;联机日志、归档日志中的scn,可以用于数据库的介质恢复;数据块中的scn,可以保证读一致性。scn具备特点:1、查询语句不改变scn,即使是同时发生的更新,对应的scn也是不同,这样可以保证数据恢复时的顺序。2、维持数据的一致性读,当一个查询发生时,它首先会先去系统中找出当前的scn,在查找数据同时,它会检查数据行及其对应的scn,只有那些小于或等于当前scn的行才从数据文件缓冲区中取出,那些大于当前scn的行,会从回滚段数据文件缓冲区中取出。
五、物理结构与逻辑结构
逻辑结构:database->tablespace->segment->extent->block
a)表空间
具备特性:1、9i开始引入系统默认表空间设置,alter database default tablespace ****;通过sql:select property_value from database_properties where property_name='DEFAULT_PERMANENT_TABLESPACE';可以获得。2、不同块大小支持。3、10g开始支持重命名表空间alter tablespace ** rename to ***;4、删除表空间的数据文件,10gR2开始支持alter tablespace *** drop datafile 'data file name';
b)段
段类型:表段、索引段、表分区段、索引分区段、临时段、回滚段、LOB段[@more@]