oracle 体系结构及内存管理 06_内存管理

本文深入解析Oracle数据库的整体体系结构,包括数据库软件与文件组成部分、数据库实例的内存空间与进程、SQL语句执行流程、连接机制及Oracle10g的自动共享内存管理。通过实例,了解Oracle如何高效管理和执行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、oracle整体体系结构
1、oracle整体分为数据库软件(oracle_home)和数据库文件(oradata)两部分。
    ctl:记录数据库物理结构,当前运行的状态信息;
    dbf:数据文件,记录数据库对象;
    log:记录数据文件中每个数据块的变化过程;
2、数据库实例包括(内存空间和数据库进程),通过实例连接访问数据库
    内存包括:
    SGA:shared pool:缓存sql语句及sql语句的执行计划
         buffer cache:缓存从dbf读取的数据块
         redo log buffer:存储server process修改数据块产生的日志
         java pool:用于JVM等Java选件
         lage pool:用于共享服务器模式(MTS)、 并行计算或RMAN的备份恢复等操作。
         stream pool:为Oracle的Streams功能所使用
    PGA: Server Process的私有内存空间
    进程包括:
    后台进程:smon:系统监控进程,维护数据库实例如内存碎片整理
              pmon:用户进程维护,清理死掉的进程回收进程空间
              dbwr:将buffer cache中的脏块写入dbf
              lgwr:将redo log buffer中的日志写入redo log
              ckpt:周期性运行,缩短checkpoint queue队列,更新控制文件和数据文件头部检查点信息
              arch:负责将写满的日志组转存归档              
    前台进程:server process:负责接收sql语句,带着sql语句在SGA中执行,读入dbf块到buffer cache,将修改日志写入
              redo log buffer,将数据库处理结果返回给客户端。
    相关查询命令:          
        ipcs #输出系统共享内存,信息队列,遮断器信息
        ps -ef | grep ora #查看含有ora字符的进程信息
        iostat  #输出CPU使用分配和磁盘IO情况
        vmstat  #输出进程,内存,IO,CPU状态信息
3、一条sql语句执行过程
    客户端发起一条sql语句,数据库实例启动一个server process接收sql语句,接收后带着sql语句先到shared pool中寻找对应sql语句
及执行计划,找到则执行,未找到对sql语句进行解析(语法,访问对象是否存在,是否具有权限,筛选最优的执行计划);确定sql语句的
执行计划后到buffer cache中找sql语句访问的数据,如果buffer cache中存在直接调用处理,不存在,server process去dbf中找数据并读
入buffer cache,对buffer cache的块进行处理,处理日志写入redo log buffer,lgwr负责将redo log buffer中的日志写入redo log中。
处理完后server process将处理结果返给客户端;dbwr进程负责将buffer cache中的脏块写入dbf。
4、oracle数据的连接机制
    客户端连接应用服务,应用服务启动的时候会建立应用与数据库的许多连接(连接池),数据库实例对每一个连接启动server process
进程,客户端选一个连接将sql语句传给数据库,数据库的server process就接收sql语句,带着sql语句执行。

5、oracle10g自动共享内存管理(Automatic Shared Memory Management)
    Oracle10g自动共享内存管理(ASMM),使用新参数SGA_TARGET 指出SGA内存分配总大小即可,不需要定义SHAR_POOL_SIZE DB_CACHE_SIZE
等参数,数据库服务器会自动根据需要动态分配。 注意如果没有sga_target,则自动共享内存管理功能被禁止,仍然可以设置每个参数。在设
置了SGA_TARGET 后,其他参数默认设置为0。也可以手动设置各个组件的最小值。
   手动内存管理转到自动内存管理,根据系统情况计算出SGA_TARGET和SGA_MAX_SIZE的值,要增加参数SGA_TARGET和SGA_MAX_SIZE的大
小设置,去掉参数文件中各个组件的大小定义。初始化参数statistics_level必须设置为typical或all才能启动ASMM,否则如果设置为
basic,则关闭ASMM。日志缓冲区,log buffer,keep buffer cache不受自动内存调整的影响,仍需要手动设置。oracle定期捕获系统状
态,将内存分给需要的对象,通过spfile,启动时恢复上次关闭时的分配情况。适合使用与系统资源比较充足的环境下在资源紧缺系统
会出现SGA抖动,可配合手动设置各池最小值,
查询SGA抖动情况:
select component,oper_type, oper_mode, start_time, end_time, trunc(target_size/1024/1024) target 
from v$sga_resize_ops;

参考资料:
http://www.linuxidc.com/Linux/2011-08/40041.htm

转载于:https://my.oschina.net/peakfang/blog/2245060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值