ORACLE内存结构之SGA
SGA的管理:
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1584M
sga_target big integer 0
SGA的各个组件大小是可以动态调整的,总大小不超过参数SGA_MAX_SIZE或者SGA_TARGET的大小.
--log buffer不能被自动管理,
--share_pool_size db_cache_size large_pool_size java_pool_size streams_pool_size都可以被自动管理
SGA只需要
1、分配一个大小sga_max_size=(80%mem)*2/3
2、sga_target=<>
3、log buffer分配一个大小
4、其他可以被自动管理的也需要设置一个初始大小
SGA的分配和回收内存是由实例instance的开启和关闭来决定.
SGA是一个可读可写的内存区域,连接到实例上的用户都可以通过SGA读取数据,更新数据。ORACLE大部分操作都在内存中完成。大部分内存就是SGA了
SGA参数:
sga_max_size-->决定了granule size(<1G 4M >=1G 16M)
sga_target-->大于0为自动管理,否则为动态管理
shared_pool_size
large_pool_size
java_pool_size
db_cache_size
|
8i |
SGA总大小由所有内存组件大小之和决定,不能直接定义SGA大小,对内部组件大小的修改必须在数据库重启后才能生效,所以叫做SGA静态管理 |
|
9i |
SGA总大小由初始化参数SGA_MAX_SIZE确定,各个内存组件大小之和不能超过这个参数,在这个大小之下,SGA各个内存组件可以在不重启数据库的情况下直接修改大小,所以叫SGA动态管理 |
|
10g |
SGA大小可以像9i一样动态管理,也可以实施SGA的自动管理,只需要设置初始化参数SGA_TARGET,SGA各个内存组件就可以由数据库自动设置大小,设置的一句来源于系统自动收集的统计信息. |
在9i后,SGA的内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小的时候,分配的基本单位是粒度(granule)
SGA包含的组件
Shared pool、database buffer cache、redolog buffer
Large pool、java pool、streams
Fixed size、variable size
|
共享池 |
暂存最近常用的SQL语句和相关数据字典信息 包括2个与语句解析性能相关的组成部分 库缓存 数据字典缓存 由参数SHARED_POOL_SIZE决定大小,可动态调整 Shared pool
用户提交一个SQL语句
Open cursor -->Found SQL in library cache? -->Yes------------------------>Bind variable? -->no-->Parse-->Define-->Bind variable? -->Yes-->Bind-->Parallelize -->No------------>Parallelize -->execute -->fetch -->close cursor 怎么用有限的内存保留经常被使用的SQL语句呢?LRU算法 LRU算法确定共享对象的持续保存期,长期不用的SQL保存信息会在LRU中释放. 如果不想释放,就调用dbms_shared_pool.keep存储过程将该过程或包驻留在shared pool中,以减少重新载入的开销. dbms_shared_pool提供以下功能将object或sql statement pin到shared pool… keep过程可以将对象pin入shared_pool,而不进入LRU机制; k).
|
|||||||||
|
重做日志缓冲区 Redo buffers |
重做日志缓冲区 暂存数据库中所有数据块的改变 内存管理方式是FIFO 重做日志被用于提供数据恢复功能 暂存重做日志的目的是为了提高语句的执行速度 大小由参数LOG_BUFFER决定,但这个内存区不能动态调整大小 show parameter log_buffer SQL> show parameter log_b NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_buffer integer 6774784 |
|
java池 |
java池也是一个系统全局区中可选内存区 用于java程序的解析和执行 大小由参数JAVA_POOL_SIZE决定,也可以动态调整 如果granule是4M,就默认设置是24M,如果granule是16M,就默认设置大小是32M 如果数据库创建时选了安装JVM组件,那么这个池必须配置 |
|
streams池 |
streams池 流池 缓冲一些高级队列的东西 一般设置12M就可以了 streams池在11gr2后才可以自动管理,之前需要手动设置 |
|
大型池 |
large_pool 大对象缓存时使用 大池是系统全局区中可选的一个内存区
SQL> show parameter large_pool_s NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ large_pool_size big integer 0 SQL> SQL> alter system set large_pool_size=10m; System altered. SQL> show parameter large_pool_s NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ large_pool_size big integer 16M SQL> 注意,虽然设置池的大小是10M,但是分配时是16M,因为我们内存的粒度是16M. 粒度的大小设置可以通过如下数据字典查看. SQL> select name,bytes/1024/1024 from v$sgainfo; NAME BYTES/1024/1024 -------------------------------- --------------- Fixed SGA Size 2.14937592 Redo Buffers 6.765625 Buffer Cache Size 624 Shared Pool Size 256 Large Pool Size 32 Java Pool Size 16 Streams Pool Size 0 Shared IO Pool Size 0 Granule Size 16 Maximum SGA Size 1576.91797 Startup overhead in Shared Pool 192.447815 NAME BYTES/1024/1024 -------------------------------- --------------- Free SGA Memory Available 640 12 rows selected. |
Fixed size And variable size
|
Fixed size |
SGA中有一部分数据是后台进程需要的,他们包含了数据库的跟实例的一些状态的数据,这部分数据叫做固定的SGA区域,这部分区域的内容是不能更改的,是当实例启动时就分配了,一旦启动后这部分内存区域是固定不变的,这部分内存不能进行共享,主要是后台进程需要的内存区,主要是用来关联数据库跟实例的一些状态或一些控制信息用的. SQL> show sga Total System Global Area 1653518336 bytes Fixed Size 2253784 bytes Variable Size 1224739880 bytes Database Buffers 419430400 bytes Redo Buffers 7094272 bytes |
|
Variable size |
可变区域 内存可以被共享,根据用户访问请求需要进行分配和回收 |
ORACLE内存结构之SGA的更多相关文章
- Oracle内存结构:SGA PGA UGA
内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区 (System G ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- oracle 内存结构具体解释
Oracle 内存结构 与 Oracle 实例关联的基本内存结构包含: 系统全局区 (SGA):由全部server和后台进程共享.SGA 中存储的数据演示样例包含快速缓存的数据块和共享 SQL 区域. ...
- Oracle之内存结构(SGA、PGA)
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- [转载] Oracle之内存结构(SGA、PGA)
2011-05-10 14:57:53 分类: Linux 一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area ...
- 【转载】Oracle之内存结构(SGA、PGA)
[转自]http://blog.itpub.net/25264937/viewspace-694917/ 一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: ...
- oracle内存结构
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- Oracle 内存结构
内存结构 Oracle内存,进程与数据库的图 sga:系统全局区,用来存放操作的数据,库缓存,数据字典等控制信息的内存区域, pga:进程全局区,服务进程专用的内存区域,大多数内容非共享 uga:用 ...
- 【转】Oracle基础结构认知——oracle内存结构 礼记八目 2017-12-15 20:31:27
oracle的数据库实例是一组后台进程和内存结构组成的,而内存结构由系统全局区(system global area)和程序全局区(program global area)组成. #修改SGA和PGA ...
随机推荐
- Qt禁止调整窗口的大小
项目中使用的是基于对话框的程序,所以限制调整窗口大小会比较合适,下面是两种方法. 1.使用代码修改 #include "dialog.h" #include "ui_di ...
- ibatis时间比较大小
<![CDATA[ A.RFID_Time >= #StartTime# ]]>时间搜索功能 A.RFID_Time <![CDATA[ ...
- Windows Phone实用教程:利用Blend为程序添加设计时数据
[前言] Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事 ...
- 获取页面的checkbox,并给参数赋值
需求: 需要发送的请求:
- netifd
Netifd是OpenWrt中用于进行网络配置的守护进程,基本上所有网络接口设置以及内核的netlink事件都可以由netifd来处理完成. 在启动netifd之前用户需要将所需的配置写入uci配置文 ...
- cacati的安装
一.安装rrdtool软件包 yum install -y cairo-devel libxml2-devel pango-devel pango libpng-devel freetype free ...
- NodeJS与Javascript时代
如果你一直在关注互联网的相关技术,你应该会有这样一种感觉,web技术正在发生着变革,虽然我们不愿相信,但一个事实已经越来越清晰的摆在了眼前:LAMP组合的时代将要成为历史,在web诞生的二十年间,它影 ...
- Class中isAssignableFrom() 方法
看Spring源码的时候看到这个方法: protected WebApplicationContext createWebApplicationContext(ServletContext sc) { ...
- EJB类库存在于Java的哪个版本中?(选择1项)。
A. J2SE B. J2EE C. J2ME D. J2NE 解答:B
- 测试RESTful API利器-Postman
对于前端开发者而言,最需要的往往不是技术本身,其实技术都没什么难的,而最缺少的则是各种各样好的兵器,比如调试,开发工具等等. 我们这里就推荐一款前端开发的利器-Postman,它是Google Chr ...