ORACLE内存结构:PGA And UGA,ORACLE用户进程、服务器进程
执行一个SQL语句
执行查询语句的过程:
- 用户进程执行一个查询语句如select * from emp where empno=7839
- 用户进程和服务器进程建立连接,把改用户进程的信息存储到PGA的UGA中
- 语句经过PGA处理后传递给实例instance
- 实例instance中的共享池处理这条语句
- 库缓冲区去判断语句如何分析--软分析(快)或硬分析(慢)
- 根据cbo得到执行计划,准备去执行语句.(CBO和RBO是ORACLE提供的两种优化器)
- 查询语句中的对象(emp表和行)存放在那个表空间,指定的行放在那个块block里?需要到数据字典缓冲区得到这些信息。
- 开始执行
- 如何执行?在内存中执行
- 判断在database buffer cache数据缓存区中是否缓存了需要的block。
- 如果是,在内存读取数据得到需要的行的结果返回给用户,用户看到执行的结果。
- 如果不是,则服务器进程把块从磁盘读入到data bufer cache缓存下来,然后undo缓存块会对该块做镜像,然后读镜像中的数据得到行的结果返回给用户,用户看到执行的结果。
执行UPDATE语句的过程:
- 用户进程执行一个update语句:UPDATE emp set sal=10 WHERE id=1234
- 用户进程和服务器进程建立连接,把该用户进程的信息存储到PGA的UGA中
- 语句经过PGA处理后传递给实例instance
- 实例instance中的共享池处理这条语句
- 库缓冲区去判断语句如何分析--软分析(快)或硬分析(慢)
- 根据cbo得到执行计划,准备去执行语句.(CBO和RBO是ORACLE提供的两种优化器)
- 查询语句中的对象(emp表和行)存放在那个表空间,需要修改的行放在那个块block里?需要到数据字典缓冲区得到这些信息。
- 开始执行
- 如何执行?在内存中执行
- 判断在database buffer cache数据缓存区中是否缓存了需要修改的block。
- 如果是,直接在内存中操作。
- 如果不是,则服务器进程把块从磁盘读入到data buffer cache缓存下来,然后undo缓存块会对该块做镜像,然后对内存中的block做修改操作。
- 由于block发生了修改/变化,redo log buffer会记录块block修改的操作信息,同时,会将修改之前的数据放在undo块镜像,修改之后的数据放在undo块镜像。
- 提交的数据要写入磁盘,没有提交的不写入磁盘。如果执行了commit,data buffer chache的undo的块数据就会标记已经提交。
注:服务器进程把块从磁盘读入到data buffer cache缓存下来后,执行的操作:
1、通过undo把你需要的block做镜像,(这个时候判断操作类型)
(1)、如果是查询语句,执行语句会通过undo中的镜像数据进行游标操作,打开行,取记录,用户可以看到结果.
(2)、如果是更新、删除、插入,执行语句会修改database buffer cache的块,修改之后把修改之后的状态保留在undo中,作为一个新的镜像. 修改之前的镜像是之前就有的,这个镜像是之前数据文件中真实的记录,而后我们将数据进行修改,这个记录成为我们修改之后的状态,而修改之后的状态有2种,第一种是进行了事务提交(修改操作在undo中被标记为已提交),第二种是没有进行事务提交(修改操作在undo中被标记为未提交).
undo中所保留的镜像数据一直要到什么时候把没有提交的更改呢,要到事务结束,或事务撤销,事务崩溃,才能在undo中把这个没有提交的状态给清空或取消,undo中保存的临时数据有2种状态,对DML语句来说一种是修改之前的(原镜像),一个是修改之后的(新镜像). 如果是需要的数据,会根据事务提交commit,把语句通过CKPT来触发,由于块发生了变化,redo log buffer会记录变化的数据块更改的过程,然后根据需要database buffer cache 数据写入数据文件中.
- 用户进程
用户进程是独立出来的,一个数据库中是可以不需要用户进程的。
当你要访问oracle数据库,执行查询操作时,需要用到用户进程。
常见用户进程SQLPLUS、PL/SQL
- 执行一个查询语句如select * from emp where empno=7839,用户进程访问ORACLE数据库,连接到ORACLE
用户进程User Process(用来访问oracle数据库的一个方式(工具/应用))
- 工具使用 :SQLPLUS、PL/SQL Develop、SQLDevelop、toad….
- 用户进程如何访问数据库:
(1)本机直接通过scok方式访问 IPC(UDP协议)
(2)通过TCP建立连接到ORACLE服务器
(3)ORACLE网络配置
|
sqlplus sys/oracle@ora11g as sysdba |
Ora11g-->必须在$ORACLE_HOME/network/admin/tnsname.ora配置出如何访问到远程数据库服务器 |
|
sqlplus sys/oracle@updba.uplooking.com:1521/ora11g as sysdba |
不需要任何配置,但oracle的服务器必须在$ORACLE_HOME/network/admin/listener.ora定义被远程的方式 |
- 用户进程通过TCP/IP方式连接到ORACLE后,ORACLE的服务器进程会去响应用户进程,并通过TCP/IP协议的三次握手建立连接。连接建立后,会话的信息会存储在PGA(程序全局区)内存中。PGA主要是存储这些信息,方面维护和管理。
- PGA里面存的信息有
- 协议,堆栈信息stack space
- Session information
- Sort area
- Hash area
- UGA用户信息存储(也叫SQL工作区域)包含
- Session information
- Sort area
- Harsh area
- 查询语句会通过服务器进程传给instance。查询语句会在instance的共享池中进行判断(软分析或硬分析)。
- 共享池中的数据字典中查找表的表空间,行放在那个block中,
- 然后执行取行,在database buffer cache 查询有没有所需要的block,
- 如果有,就database buffer cache内存中直接取数据
- 如果没有,就通过服务器进程将data files数据文件中对应需要的block读入data buffer cache。Database buffer cache中就有了这个block。然后通过一个undo块(undo块的作用是镜像数据块)做镜像,也就是说这个block会被镜像到undo块中。查询语句从undo内存块中取数据,用户就看到输出的结果了。
- 服务器进程是响应用户进程的
问:用户进程和服务器进程之间通过什么方式进行应答的呢?
答:IPC TCP/IP协议
用户进程和服务器进程之间进行交互,有2种常见方式
1、在用户进程上具备ORACEL NET网络连接,有配置tnsname.ora文件。PL/SQL TOAD工具是需要配置网络连接
2、用户进程上没有使用tnsname,直接通过访问地址连接。
DESCRIPTION=(
ADDRESS=(PORTOCOL=TCP)(HOST=192.168.1.112)(PORT=1521
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=gaga01)
)
)
Oracle 连接(connection)与会话(session)
- 连接:Communication between a user process and an instance
- 会话:Specific connection of a user to an instance through a user process
与用户进程相关的参数和视图
1、相关参数:Show parameter user_
user_dump_dest :oracle用户进程产生的日志文件的路径
SQL> show parameter user_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
license_max_users integer 0
user_dump_dest string /u01/app/oracle/diag/rdbms/gag
a01/gaga01/trace
2、相关视图
|
v$session: |
查看当前有哪些用户在连接oracle SQL> select username,sid from v$session; |
|
v$process |
select username,pid from v$process; |
|
V$sql |
|
|
v$sqltext |
服务器进程
跟用户进程进行交互
服务器进程有个内存区域,叫PGA,私有内存区域,也叫程序全局区,他是一个内存片段,他的作用是保护会话信息、排序信息、用户的私有数据信息.
PGA中的UGA用户全局区,UGA里面主要存放会话信息、排序信息、harsh 信息。
PGA
- 一个用户进程对应一个PGA。与SGA不同,PGA是非共享的.
- PGA是在用户进程连接到oracle数据库并创建一个会话时由oracle自动分配,会话结束,PGA被释放.
- PGA存储如绑定变量,排序区,游标处理的内容
- SGA存放了SQL PL/SQL的分析信息,但用户要一句执行select update语句的值不能被共享,这些不能共享的就在PGA中.
- PGA的参数(show parameter pga)
PGA_aggregate_target
指定使用内存上限大小,可以动态修改。值10M-(4096G-1)Bytes.
workarea_size_policy manual | auto参数
打开和关闭自动管理功能.
如果手工manual修改,就设置这两个参数sort_area_size hash_area_size 也可以控制PGA使用率
- PGA相关的数据字典
|
v$pgastat |
pga的统计信息 |
|
v$pga_target_advice |
预测信息,供修改参考 |
ORACLE内存结构:PGA And UGA,ORACLE用户进程、服务器进程的更多相关文章
- Oracle 内存结构
内存结构 Oracle内存,进程与数据库的图 sga:系统全局区,用来存放操作的数据,库缓存,数据字典等控制信息的内存区域, pga:进程全局区,服务进程专用的内存区域,大多数内容非共享 uga:用 ...
- oracle 内存结构具体解释
Oracle 内存结构 与 Oracle 实例关联的基本内存结构包含: 系统全局区 (SGA):由全部server和后台进程共享.SGA 中存储的数据演示样例包含快速缓存的数据块和共享 SQL 区域. ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- Oracle内存结构:SGA PGA UGA
内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区 (System G ...
- oracle内存结构
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- Oracle内存结构(之三)
[深入解析--eygle] 学习笔记 1.2.3 PGA的管理: sys@felix SQL>show parameter area_size NAME TYPE VALUE --------- ...
- ORACLE内存结构之SGA
SGA的管理: SQL> show parameter sga NAME TYPE VALUE ---------- ...
- 【转】Oracle基础结构认知——oracle内存结构 礼记八目 2017-12-15 20:31:27
oracle的数据库实例是一组后台进程和内存结构组成的,而内存结构由系统全局区(system global area)和程序全局区(program global area)组成. #修改SGA和PGA ...
- oracle 内存结构 share pool sql解析的过程
1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应 ...
随机推荐
- Atitit. 状态模式(State)attilax 总结 跟个策 略模式的区别
Atitit. 状态模式(State)attilax 总结 跟个策 略模式的区别 1. 状态模式(State)概览 1 2. 状态的维护和转换:① 在Context 中.② 在状态的处理类中.2 3. ...
- Spring3的表达式语言
Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言, 能在运行时构建复杂表达式.存取对象图属性. ...
- Netty4.x中文教程系列(七)UDP协议
将近快一年时间没有更新Netty的博客.一方面原因是因为项目进度的问题.另外一方面是博主有一段时间去熟悉Unity3D引擎. 本章节主要记录博主自己Netty的UDP协议使用. 1. 构建UDP服务端 ...
- SpringBoot资源国际化
Springboot根据浏览器实现网站资源国际化 根据浏览器地区主动选择资源 1.创建资源化文件 resource目录下创建messages目录 创建messages_en_US.properties ...
- python解析文本文件演示样例
目的:查找文本中还有Sum/Avg的行中低三个竖线后第一个浮点数 思路:先使用python读取文本中一行,然后切割字符串.查找含有Sum/Avgkeyword的行.取出想要的结果 文本局部: .... ...
- CSS3 实现的一个简单的"动态主菜单" 示例
其实这个示例蛮无聊的 很简单 也没什么实际的用处. 主要是展示了 CSS3 如何实现动画效果. 写这个主要是想看一看 完成这样的效果 我到底要写多少代码. 同时和我熟悉的java做个比较. 比较结果不 ...
- 断言(assert)和程序的安全保证
断言,用来DEBUG错误的,在DEBUG时发现然后跟踪错误! 通常 写一个程序给别人使用的,这个代码在安全性上的要求是什么呢?直觉上,我们都知道程序不应该崩.但是通常C/C++的程序如果把包含API的 ...
- 【转】虚拟串口VSPM解决串口编程问题
通过串口调试软件 UartAssist.exe 和虚拟串口软件 VSPM,可以解决串口编程时没用硬件调试的问题,通过VSPM虚拟出串口设备,让程序发送信息到 VSPM 设备后通过 UartAssist ...
- hdu 2025:查找最大元素(水题,顺序查找)
查找最大元素 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- CSS顶级技巧大放送,div+css布局必知
字体大小使用px 在一行内声明CSS 对比下面两个: h2 {font-size:18px; border:1px solid blue; color:#000; } h2 { font-siz ...