Oracle之内存结构(SGA、PGA)
像很多数据库如db2,mysql等等都是关系型数据库。但是他们也有区别,区别就在数据库的架构上面。
整个Oracle来讲就两个部分,一部分是实例(由两部分构成,一部分是里面的内存结构由sga和Pga构成。SGA全称为system gloable area,系统全局区域,也就是说在SGA区里面放的是共享的,全部的人都可以看到的数据。只有这一类的数据会放到SGA区里面。PGA是某个会话独有的数据和其他的东西,每个会话都是不一样的,所以每一个会话都有一个PGA。而SGA里面的就不是这样划分的,SGA里面的东西是共享的。比如说data buffer cache,这个就是存放数据块的,比如说在内存里面无论是哪个用户从内存里面在磁盘上读了一个数据块放到内存里面,那么这个数据块就会被所有人共有,都会看到被共有。大家都会来访问这个数据块,这个就是一个全局区,只有这个数据要被所有人共同使用的时候这个数据会被放在SGA区里面。按照功能SGA又可以进行划分,数据块,表里面的数据,表里面的记录是放在数据块里面。Oracle最小的单位就是数据块,这些数据块被读取到内存里面,因为Oracle查询是要在内存里面完成的,数据处理需要内存来完成。数据块是读到database buffer里面,读进去之后所有人都可以看到了。
Share pool里面包含了两部分,
一部分是library
pool包含了sql的一些信息,如某条sql被解析了,生成了执行计划,那么这个执行计划就可以被其他用户所使用,是共享的。所以share pool是保存sql信息的并且是被共享的。Data directory是数据字典的信息,包含了某些对象属性信息,如某一张表的一些属性,这张表的列,权限等等都放在数据字典里面。这个也是共享的,可以被所有的人查到对象相关的信息。
Java pool是和java相关的池子。
Larger pool是rman备份的时候会用到。日志是所有用户产生的日志都会放在redo log buffer里面。一句话总结,SGA里面存放的是公用的数据。PGA是一个私有的内存区域每一个用户都会开辟一块内存,这个是会话私有的内存区域。SGA+PGA内存构成了整个oracle的实例内存区域,实例还包括实例的后台进程。内存实际上就是一块区域,这块区域如何使用以及操作就是靠oracle的后台进程。实例由两部分构成,内存加进程。)一部分是数据库,里面存放的都是数据文件。
所以oracle是由两部分构成,database和instance。Oracle最活跃的部分不叫数据库叫实例,比如内存的不断分配和释放,还有数据来回交换写到数据块里面。数据库是一个相对静止的东西。
Redo文件只有三组,如果第三组写满之后就会将第一组覆盖,在覆盖之前需要备份,备份出来的文件就叫做归档Archive log file。
进程实际上是分为三种的,一种是Oracle的后台进程,专门为Oracle干活的,PMON,SMON.DBWR,LGWR,CKPT,这些都是Oracle的后台进程,为实例服务的。服务端进程和客户端进程是相对的,一般来说Oracle有两种模式,默认是专有模式,当用户发出请求的时候,客户端通过监听器连接过去的时候,同时会在Oracle端起一个进程来响应。Oracle端的进程和客户端进程一通信就组成了会话。数据库端的进程是执行用户发出的请求的,然后将最终的结果返回给用户。
从下往上看,最下面有一个用户进程,首先向数据库发送了一条sql语句,那么数据库端就会启动一个server process。client process和server process组成了一个会话session。然后server process就会处理用户的一些请求。这些请求,sql语句是放在pga里面,就是说服务端的进程要开一块内存,这个内存就叫做pga,里面包含了一些会话和私有的一些内存和私有的sql语句。然后服务器端的进程开辟了内存之后就要执行sql语句了。执行sql语句就要访问sga了。***实际上先去share pool里面解析sql语句,解析了sql语句得到了执行计划之后,再按照这个执行计划访问数据,有了执行计划先去内存里面找数据,先去data bufferc ache里面找。找不到话就会去磁盘上面读取数据,在磁盘上面读取数据不是要后台进程读数据,而是server process将磁盘上面的数据读取到data buffer cache里面。***假设用户要修改数据就会在data buffer cache里面将数据块改了。修改了数据块就产生了一系列的问题,修改了数据块就产生了一个redo log buffer重做日志,凡是修改了的东西都要产生重做日志。这个时候如果用户发出来一个commit,会话将这个事务提交了redo就会将里面的数据通过LGWR这个进程写到磁盘上面,如果发出来checkpoint这样的命令检查点,这个时候数据又会由另外一个进程DBWN将修改后的数据写到磁盘上面。
Share pool这个区域就是sql语句解析方面的信息和字典的数据。比如一条sql语句的解析就要在share pool里面。
数据缓冲区是放数据块的,实际就是数据库文件被读到内存里面就放在数据缓冲区里面。
重做日志,凡是Oracle修改了数据块在Oracle里面都要产生重做日志。
先是在share pool里面将sql语句进行解析生成执行计划,之后到数据缓冲区里面寻找所需要的数据块,如果数据不在数据缓冲区,那么就会在磁盘上面将数据读取到数据缓冲区里面。
对于查询来说这个过程差不多就基本结束了,如果要对数据块进行修改那么Oracle就会产生重做日志了,重做日志就放在重做日志的内存里面。只要日志写到磁盘上面了那么数据块没有写到磁盘上面都没有关系,即使这个时候机器掉电了,数据块在内存里面丢了没有写到磁盘上面都可以通过重做日志将其恢复。
所以基本上来说sga区里面就发生了图片上的三件事情。
show parameter sga;查看sga的参数
NAME TYPE VALUE
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 3248M
sga_target big integer 0 0代表自动调整
show parameter memory;查看分配的内存 包括sga 和pga。
NAME TYPE VALUE
hi_shared_memory_address integer 0
memory_max_target big integer 3248M
memory_target big integer 3248M 分配的内存大小是SGA+PGA总大小
shared_memory_address integer 0
查看sga多大
show sga;
NAME TYPE VALUE
hi_shared_memory_address integer 0
memory_max_target big integer 3248M
memory_target big integer 3248M
shared_memory_address integer 0
Total System Global Area 3390558208 bytes 可以看到sga现在有3个多g的内存。
Fixed Size 2180464 bytes
Variable Size 2113931920 bytes
Database Buffers 1258291200 bytes
Redo Buffers 16154624 bytes
https://blog.csdn.net/qq_34556414/article/details/78464255
Oracle之内存结构(SGA、PGA)相关推荐
- oracle 的三个主要内存结构SGA,PGA,UGA
SGA:全局的很大的共享内存段,几乎所有的ORACLE进程要访问: PGA: 一个进程或者线程专用的内存,其他进程或线程不能访问: UGA:此内存区与特定的会话相关联,可能在SGA中分配也可能在PGA ...
- oracle内存结构(PGA、SGA)
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- oracle共享池的结构,Oracle 10g内存结构之共享池的相关知识及使用简介
Oracle 10g内存结构之共享池的相关知识及使用简介 之前我们介绍了:Oracle 10g内存结构之系统全局区简介,本文我们接着介绍一下Oracle 10g内存结构之共享池的相关知识,接下来就让我 ...
- oracle数据库内存结构pga/sga/uga做比较分析
oracle数据库的内存结构比较复杂,下面对pga/sga/uga做比较分析. 1. sga组成: database buffer cache:包括 default pool,keep pool,re ...
- Oracle 内存(SGA,PGA)详细介绍
一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...
- Oracle 自动内存管理 SGA、PGA 详解
ASMM自动共享内存管理: 自动根据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME ...
- oracle实例内存(SGA和PGA)调整
一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. ...
- Oracle 11g 内存结构
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/zhouxiang/blog/475488
- Oracle体系结构之内存结构(SGA、PGA)
Oracle体系结构之内存结构(SGA.PGA) 一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个 ...
最新文章
- android api在线文档_通过 API 远程管理 Jenkins
- (转)探究 TCP 一次数据包最大负载,上限真的是 65495 byte 吗
- 吴恩达 coursera AI 专项二第一课总结+作业答案
- Java Selenium Actions模拟鼠标拖动dragAndDrop总结
- oracle的group by用法
- java 上传 进度条_Ajax上传文件并显示进度条
- 加餐:Redis 的可视化管理工具
- WIZnet推出串口转以太网模块WIZ550S2E
- Android版日语学习应用的逆向分析
- 咪咕:笔试题(20190916)
- 【数据分析认知课(一):数据分析思维观】——读后感
- 2022,从阅读开始
- 【MySQL5.7指南】第一章——概述
- armbian php7.1_N1 + armbian+宝塔面板+apache+MySQL+php
- 苹果怎么换行打字_微信新功能上线!安卓苹果都有!网友:再也不怕被刷屏了!!...
- 解决Echarts柱形图正负数在同一侧,并设置正负值不同颜色
- 物联网卡开启养老新模式
- linux 系统迁移到固态硬盘,在Linux系统中将SSD当块设备缓存的方法
- 【BZOJ】3956 Count 单调栈+ST表
- Backup Exec安装