oracle体系结构图1

oracle体系结构图2

用户进程(访问oracle的客户端的总称)

工具的使用:sqlplus、pl/sql developer

如何访问数据库:

本机直接通过sock方式访问(ipc访问-udp协议)(sqlplus / as sysdba)。

通过tcp建立连接到oracle的服务器(sqlplus sys/oracle@orcl as sysdba)(sqlplus sys/oracle@ip:port@service_name as sysdba--本方式访问,要求必须在oracle数据库的服务器端的listener.ora文件配置被远程访问的方式)。

oracle的网络配置(listener.ora和tnsname.ora)。

用户进程与服务器进程之间交互方式:

  一条简单的select语句在oracle中的执行过程:

1、用户进程执行一个select语句如:select * from emp where empno=7839;

2、用户进程已经与服务器进程建立连接并把该用户进程信息缓存到PGA的UGA中。

3、select语句经过PGA处理后传递给instance。

4、instance的shared pool负责处理这条语句,软解析还是硬解析。查询语句中的对象储存在哪个tablespace的哪个datafile的哪个segment的哪个block中,通过数据字典缓存区得到这些信息。

5、开始执行select

6、判断在database buffer cache中是否缓存了需要的block。如果已经缓存过了,在内存中读取数据得到需要的结果返回给用户,用户看到执行的结果;如果需要的block没有被缓存,则服务器进程把block从磁盘读入到data buffer cache缓存起来,然后undo缓存块会对该快做镜像,然后读镜像中数据得到行的结果返回给用户,用户看到执行结果。

一条简单的update语句执行过程:

1、用户进程执行一个update语句如:update emp set sal=5000 where empno=7839;

2、用户进程已经与服务器进程建立连接并把该用户进程信息缓存到PGA的UGA中。

3、select语句经过PGA处理后传递给instance。

4、instance的shared pool负责处理这条语句,软解析还是硬解析。查询语句中的对象储存在哪个tablespace的哪个datafile的哪个segment的哪个block中,通过数据字典缓存区得到这些信息。

5、服务器进程将需要的block读入到data buffer cache中。

6、判断sql类型,select、insert、delete、update,这里是update操作。

7、修改data buffer cache中的块,把修改之后的镜像保存到undo当中作为新的镜像,当commit后,lgwr写块的更改过程,dbwr写数据到数据文件(undo和普通数据文件)。

服务器进程:与user process进行交互,回答user process进程的请求。

PGA(程序全局区):server process进程拥有,是一个内存片段,私有内存区域,保护会话、排序、用户私有信息。

UGA(用户全局区):属于pga的一块内存区域,保存了会话信息、排序信息、哈希信息。

pga作用:是oracle用户进程使用的一个区域,一个用户对应一个pga,主要用于用户运行程序时的使用变量空间。pga是在用户进程连接到oracle并创建一个会话时由oracle自动分配,会话结束,pga释放。pga存储绑定变量、排序区、游标处理的内容。sga存放了sql/pl sql的分析信息,但是用户要一句执行select、update语句的值不能被共享,这些不能被共享的信息就存储在pga中。9i后自动管理pga,pga_aggregate_target指定使用内存的上限,可以动态改动,只对专用服务器模式有效。取值范围:10m~(4096g-1)bytes。work_size_policy manual|auto参数用于打开或关闭pga自动管理功能,默认是auto。手工修改sort_area_size和hash_area_size也可控制pga使用率。10g后全自动管理,专用、共享服务器模式有效。

V$pgastat:pga统计信息;

V$pga_target_advice:预测信息,供修改pga大小使用。

后台进程:维护db server正常运行以及一些特定的功能所需要的进程。核心进程:smon、pmon、dbwr、lgwr、ckpt这些进程必须正常运行,否则数据库会出现问题。

查看进程:ps -ef|grep ora_

V$bgprocess

Smon:实例恢复、结合自由的空间、释放自由表空间。

Pmon:清楚失败的进程(回滚事物、释放锁、释放其他资源、重启死掉进程)、动态注册监听器。

Dbwr:将data buffer cache中的脏数据快写入到后台磁盘中。dbwr写之前会触发lgwr。

发起条件

发生检查点、脏缓存达到极限、没有自由的缓存、超市发生、rac ping请求、表空间离线、表空间只读、表被删除或者截断、开始备份表空间。

dbwr个数:

32bit:dbw0~dbw9,最多10个dbwr进程。

64bit:dbw0~dbw9/dbwa~dbwj最多可跑20个进程。

SQL> show parameter db_w

NAME      TYPE   VALUE

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

db_writer_processes      integer 1   --该数据库最多跑1个dbwr进程

Lgwr:将redo buffer中的信息顺序循环写入log。log文件最好存储在高效率存储设备上,保证lgwr写的要快。

Lgwr写的条件:

commit的时候;达到三分之一满;志大小达到1m;每隔3秒;在dbwr写之前。

Lgwr进程个数:默认只有1个

Ckpt:保证数据库中数据文件、日志文件、控制文件3大要素同步的进程。

作用:触发dbwr写操作、更新数据文件头部、更新控制文件头部。

Scn:系统变更号,保证数据一致性。

Arcn:打开归档模式后自动启用。arcn个数有参数log_archive_max_processes决定,最多只能跑30个arcn进程。

SQL> show parameter log_archive_max_processes;

NAME      TYPE        VALUE

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

log_archive_max_processes      integer        4

Pnnn:并行进程,用于并行查询或者并行dml操作。

Dnnn:调度器进程,用于共享模式连接用户需求调度。

Snnn:贡献服务器进程,用于共享模式连接用户需求操作。

Mman:内存管理进程,用于10g的内存自动管理。

Mmon:内存监视进程,用于10g性能优化中的统计信息自动收集。

Rec0:分布式恢复进程,用于回滚未完成的分布式事务。

Jnnn:任务执行进程,用于完成用户定制的自动执行任务。

Cjq0:任务调度进程,用于在用户规定的时间唤醒任务进程。

Database:

组成:data file、log file、control file、password file、parameter file、archivelog file、alert log

Server process:与user process进行交互,回答user process进程的请求。

PGA(程序全局区):server process进程拥有,是一个内存片段,私有内存区域,保护会话、排序、用户私有信息。

UGA(用户全局区):属于pga的一块内存区域,保存了会话信息、排序信息、哈希信息。

pga作用:是oracle用户进程使用的一个区域,一个用户对应一个pga,主要用于用户运行程序时的使用变量空间。pga是在用户进程连接到oracle并创建一个会话时由oracle自动分配,会话结束,pga释放。pga存储绑定变量、排序区、游标处理的内容。sga存放了sql/pl sql的分析信息,但是用户要一句执行select、update语句的值不能被共享,这些不能被共享的信息就存储在pga中。9i后自动管理pga,pga_aggregate_target指定使用内存的上限,可以动态改动,只对专用服务器模式有效。取值范围:10m~(4096g-1)bytes。work_size_policy manual|auto参数用于打开或关闭pga自动管理功能,默认是auto。手工修改sort_area_size和hash_area_size也可控制pga使用率。10g后全自动管理,专用、共享服务器模式有效。

V$pgastat:pga统计信息;

V$pga_target_advice:预测信息,供修改pga大小使用。

SGA:instance中的一部分即内存结构,sga的内存由instance的启动关闭自动操作。sga是可读可写的内存区域。

组件:shared pool、data buffer cache、log buffer cache、large pool、java pool、streams pool、other pool

固定区域:sga中的一部分内存、用于管理sga及后台进程。

SQL> show sga

Total System Global Area 3741306880 bytes

Fixed Size     2258800 bytes                --固定区域,不可共享

Variable Size  1811941520 bytes            --可变区域,用于共享

Database Buffers  1912602624 bytes            --data buffer cache

Redo Buffers    14503936 bytes            --log buffer cache

Sga管理:

8i:手工管理、各个组件单独管理,即静态管理。

9i:sga大小由初始化参数sga_max_size确定。各个组件需要单独修改大小,各个组件大小之和不能超过sga_max_size的值,即可以动态管理各个组件。

10g:sga大小既可以像9i一样动态管理,也可以试试sga的自动管理,只需要设置初始化参数sga_target,sga的各个组件就可以由数据库自动设置大小,设置来源于系统自动收集的统计信息。(可能出现sga抖动,解决办法可以像9i中一样给各个组件设置大小,该大小作为各个组件的初始值,可以减轻sga抖动)。

11g:memory_target自动管理pga和sga。

粒度:内存分配的最小单位。通过v$sgainfo视图可以查看粒度大小。

Sga大小设置公式:sga_max_size=(80%memory)*2/3

管理sga大小的初始化参数:sga_target>0  --sga自动管理,否则动态管理。

SQL> show parameter sga

NAME     TYPE   VALUE

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

sga_max_size big integer 3584M

sga_target  big integer 3584M

Shared pool:

作用:缓存最近执行过得语句;

缓存最近使用的数据定义

组成:library cache

数据字典缓存区

大小:初始化参数shared_pool_size控制,10g及以后由sga_target自动指定管理。

Library cache:存储最近使用的sql和pl/sql语句信息。

贡献最长用的语句。

Lru算法管理。

包括两部分:贡献sql区

共享pl/sql区

大小由shared pool的大小决定。

字典缓存区:存储数据库中最近使用的定义

包括数据文件、表、索引等数据库对象信息

在分析阶段,服务器查找数据字典去验证对象的名字是否合法。

对于查询和dml语句,如果数据字典缓存在字典缓存区能够提高响应时间。

大小由shared pool大小决定。

Sql语句执行过程:

共享池设置大小原则:shared_pool_size设置一个初始大小,sga_target设置一个总大小。

Database buffer:   --逻辑读   物理读

存储从数据文件获得的数据块的数据镜像。

Lru算法进行管理。

当处理的数据在db buffer cache中时,可以直接从内存获取数据,大大提高系统效率。

初始化参数db_block_size决定了数据块的大小,这也是数据库i/o的最小单位。

Db buffer cache由多个自缓存区组成:

--default池  db_cache_size

--keep池     db_keep_cache_size

--recycle池  db_recycle_cache_size

只有default池可以被sga自动管理。

Dbwr将data buffer cache中的脏数据块写入磁盘。

Data buffer cache大小管理:设置db_cache_size大小同时设置sga_target的大小。

可以通过v$db_cache_advice视图大致判断需要为data buffer设置多大。

Log buffer:不能被sga自动管理,需要单独分配大小,大小一般1~5m足够用。

暂存数据库中所有数据块的变化描述。

内存管理方法是fifo。

重做日志提供数据恢复功能。

暂存重做日志的目的是为了提高语句的执行效率。

大小由log_buffer(1~2m)决定,但这个内存区不能动态调整大小。

Lgwr写log buffer里的数据到磁盘的日志文件。

Large pool:可选内存区域,支持动态管理。

贡献服务器用户全局区,并行进程,使用rman备份,大小由large_pool_size决定,可以动态改变大小。一般rman备份感到数据库性能受影响都是因为没有分配large pool的原因。large pool没有设置以上操作将使用shared pool作为默认内存区。大池大小12~64m差不多够用。10g中sga自动管理下最好给large pool设置一个初始大小。

Java pool:可选区域;用于java程序的解析与执行,大小由java_pool_size决定,支持动态修改;如果granule是4m,java pool默认大小是24m;如果granule是16m,java pool默认大小是32m;如果数据库在创建时设置了jvm,那么这个池必须设置。10g中最好设置初始大小。

Streams pool:处理与高级队列相关的操作,比如流复制技术。10g中最好设置初始大小。streams pool在10gr2开始才被sga自动管理。

Oracle体系结构之Oracle10gR2体系结构-内存、进程的更多相关文章

  1. Oracle数据库体系结构(3)数据库进程

    一.Oracle进程概述 在oracle中进程分为用户进程(User Process).服务器进程(server process)和后天进程3种. 1.用户进程:当用户连接到数据库执行一个应用程序是, ...

  2. ORACLE数据库学习之体系结构

     Oracle体系结构 ORACLE数据库体系结构决定了oracle如何使用网络.磁盘和内存.包括实例(instance),文件(file)和进程(process不包括后台进程)三部分. 实例:每 ...

  3. bay——Oracle RAC集群体系结构.docx

    Oracle RAC集群体系结构 ————bayaim  2018年10月22日13:33 https://blog.51cto.com/ixdba/862207  一. Oracle集群体系结构 O ...

  4. [转]oracle学习入门系列之五内存结构、数据库结构、进程

    原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...

  5. v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...

  6. Oracle RAC集群体系结构

    一. Oracle集群体系结构 Oracle RAC,全称是Oracle Real Application Cluster,即真正的应用集群,是oracle提供的一个并行集群系统,整个集群系统由Ora ...

  7. oracle笔记1:-安装-体系结构-基本查询

    一.Oracle数据库的安装(安装在虚拟机的xp系统里)     1.安装虚拟机     2.虚拟机内安装xp系统,以下步骤在虚拟机内进行     3.双击setup.exe,在出现的界面中设置口令, ...

  8. Oracle 12c RAC 日志体系结构的变化

    1    说明 在11g中,查看GRID的日志,会进入$ORACLE_HOM/log. [grid@cndba.cn ~]$ cd $ORACLE_HOME/log/ [grid@cndba.cn l ...

  9. Oracle DB 自动管理共享内存

    • 启用Oracle Enterprise Manager (EM) 内存参数 • 设置自动优化的内存参数 • 使用手动优化的SGA 参数覆盖最小大小 • 使用SGA Advisor 设置SGA_TA ...

随机推荐

  1. 后序线索二叉树中查找结点*p的后继

    在后序线索二叉树中查找结点*p的后继: 1.若结点*p为根,则无后继:2.若结点*p为其双亲的右孩子,则其后继为其双亲:3.若结点*p为其双亲的左孩子,且双亲无右子女,则其后继为其双亲:4.若结点*p ...

  2. PHP简单的图片上传

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Shell 启动java程序

    #!/bin/sh SHELL_PATH=$(cd ")";pwd) echo $SHELL_PATH cd "$SHELL_PATH" CLASSPATH=. ...

  4. Unity延迟和重复调用方法

    延迟调用方法 Invoke(arg1,arg2) arg1 是延迟调用的字符串方法名,arg2是延迟多少时间调用arg1 方法. 重复调用方法 InvokeRepeating(arg1,arg2,ar ...

  5. 如何POST一个JSON格式的数据给Restful服务

    在Android/java平台上实现POST一个json数据: JSONObject jsonObj = new JSONObject(); jsonObj.put("username&qu ...

  6. 第四章 Spring.Net 如何管理您的类___对象的手动装配

    前面我们知道了什么是对象,什么是对象工厂,什么是应用程序上下文.这一次我们来看一下对象的装配. Spring.Net 中有多种装配对象的方式,装配这个词可能比较学术化,我们可以理解为对象的创建. Sp ...

  7. spring 事物管理没起到作用

    今天在做项目的时候发现配置的spring 事物管理没起到作用.可是配置又是依据官网配置的,不可能会错.最后发现使mysql的问题 普通情况下,mysql会默认提供多种存储引擎,你能够通过以下的查看: ...

  8. JAVA语言基础内部测试题(50道选择题)

    JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...

  9. Effective C++ Item 34 Differentiate between inheritance of interface and inheritance of implementation

    1. 成员函数的接口总是被继承. 如 Item32 所说, public 意味着 is-a, 所以对 base class 为真的任何事情对 derived class 也为真 2. 声明一个 pur ...

  10. POJ 1837 Balance(01背包变形, 枚举DP)

    Q: dp 数组应该怎么设置? A: dp[i][j] 表示前 i 件物品放入天平后形成平衡度为 j 的方案数 题意: 有一个天平, 天平的两侧可以挂上重物, 给定 C 个钩子和G个秤砣. 2 4 - ...