对应图中的体系结构,

Oracle Server:database + Instance

Oracle内存结构:SGA( System Global Area) + PGA( Program Global Area) PGA为用户级别,每个用户/session独立,SGA为共享内存区

Database:data file + control file + redo log files,都存储在磁盘上

instance:SGA + background Process,通过触发Background Process来进行写脏块,生成检查点等动作

background Process :PMON + SMON + DBWR + LGWR + CKPT + Others

SGA:随着instance启动而分配的内存空间。instance down,SGA被释放。SGA为用户共享

Oracle体系架构

Parameter Files:pfile(动态配置文件,数据库运行时修改,只有当前session生效)+spfile(静态配置文件,通过修改文件的方式修改,下次并持久生效)

SGA:Share Pool:Library Cache 存放最近的sql和其执行计划

                                    Data Directory Cache 数据字典,存放数据库中内容信息,静态视图,如user_tab等

            Database Buffer Cache :sql语句执行时设计的数据(sql执行时会与datafile磁盘进行I/O 操作读取数据,只有脏块会被写回磁盘)

            Redo log Buffer:日志,DBbuffer Cache中的脏块还没有被写到磁盘中时,修改会记录在日志中。读取仍为旧数据

PGA:用户执行存储过程时,先使用PGA,不够在使用磁盘中的Temp表空间

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

background Process的触发条件:

DBWR:1.CKPT发生 2.脏块太多 3.db_buffer的空间不够 4.3秒一触发 5.表空间redo only / offline / backup等

LGWR:1.commit 2.三分之一满 3.1M满 4.先于DBWR写所写(日志先记录,脏块后写)5.3秒一触发(由先记后写的规则引发)

CKPT:督促DBWR写脏块,生成检查点。检查点发生,DBWR直接传导,LGWR间接传导

               两种检查点:完全检查点(保证数据一致性)

                                      增量检查点(不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短恢复时间)

Others:arcn:归档模式下,发生日志切换时,把当前日志写入归档日志。作为备份历史日志。      log->磁盘日志(当前日志-> achieved log)

                 ( LGWR对当前日志写,arcn将当前日志写到归档日志中 )

MMON:Oracle自我见识和自我调整的支持进程(与AWR有关)

MMNL:MMON的辅助进程(与ASH有关)

MMAN:内存自动管理,10g后才有,11g中负责Oracle内存结构SGA+PGA的自动调整(Auto管理方式)

CJQN:和job队列有关

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

data file 分为表块和undo 块,PGA也分为表块和undo 块


使用undo块的情况为:roll back

                                         读一致性,在commit之前,其他session读取undo块中的数据

                                         实例恢复

                                         闪回 flash back query / flash back table


data files对应表空间

表空间分为:PERMANENT永久表空间,UNDO表空间,TEMPORARY临时表空间

表空间中的存储单位为:SEGMENT->EXTENT->BLOCK

——————————————————————————————————————————

以BLOCK为例列举结构:

BLOCK                                   :block header               :ITL:事务槽

                                                                                               initrans:初始化事务槽个数

                                                                                               maxtrans:最大事务槽个数

                                                    free space

                                                    data

(标准块8k,支持2~32k)

———————————————————————————————————————————

ITL: 可以有多个ITL以支持并发事务。当一个事务要更新数据块中数据时,必须先得到一个ITL槽,然后将当前事务ID和事务所用的undo数据块地址,SCN号,当前事务是否提交等信息写到ITL槽中

initrans:对于不同的模式对象(表默认1,index默认2)

maxtrans:默认255

==================================================================================

表空间,SEGMENT, EXTENT, BLOCK 的管理方式

表空间:段管理 AUTO

                             MANUAL

                区管理 Local


SEGMENT:AUTO( ASSM )    --采用位图管理段, 创建表空间为Local管理方式

                       MANUAL( MSSM )  --采用FREE List(空闲列表)管理段

EXTENT:字典管理          --已废除

                    本地管理 Local

BLOCK:AUTO (ASSM )  --创建表空间为本地管理方式,且段的存储空间方式为Auto(ASSM)

                 MANUAL( MSSM )

管理方式可以在创建表空间是或建立数据库的模式对象(表,索引)中设置,模式对象中设置的优先级高于表空间设置,如果都未设置管理方式,则使用自动管理方式


位图管理方式:每个段/区 的段/ 区头都有一组位图(5个位图),位图描述了每个块/区的满度

                            5个位图分别对应:1.满块,2. 75%~100%  3. 50% ~75% 4. 25%~ 50%  5. 0%~25%


MSSM管理(FREELIST空闲列表方式)维护三个链表freelist,pctfree,pctused

freelist:空闲列表,登记了可以插入数据的可用块,在段头

pctfree:一个块的保留空间百分比临界值,当一个块中的保留空间百分比 < pctfree时,则视为此块已满,将其从freelist中删除

pctused:一个块的使用水位百分比临界值,当使用百分比 < pctused 时,视为此块仍可插入数据,将此块恢复至freelist 中

pctfree 和 pctused 控制了可用存储区的大小,避免了行迁移 / 行链接,缩短了I/O时间

当一行数据大于块大小时会发生两种情况:1.行链接,2.行迁移

行链接 是指表中的一行数据,由于数据量过大,而存储在多个块中的情况

行迁移 是指在update时由于空间限制由原块迁移到新的数据块(有足够空间的数据块)中。

             行迁移发生时,在原数据块中仍保留指针指向新的数据块,index中的Rowid也不做改变,通过原数据块中的指针寻找到新的数据块

行链接和行迁移的出现情况未确认(store时行链接?update时行迁移?),暂时确认行迁移只发生在update时

相关文章: