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 ...
随机推荐
- netty内存泄漏
关于netty本身内存泄漏的资料,在此记录一下:https://blog.csdn.net/hannuotayouxi/article/details/78827499
- Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处 ...
- 改变placeholder的样式
input::-webkit-input-placeholder{ font-size:12px; color:#d2d2d2 }
- The difference between Severity and Priority
The difference between Severity and Priority[1] 2015-06-24 There are two key things in defects of th ...
- <unistd.h>的close(0)导致std::cout被关闭
代码如下:其中ZJ::open_max返回系统允许的打开的文件的最大个数 #include "util.h" #include <unistd.h> // int cl ...
- vue中axios调用接口和用node.js跨域
<script>const API_PROXY = 'https://bird.ioliu.cn/v1/?url='import axios from 'axios'export defa ...
- (转)maven3.3.9编译oozie4.3.0
1.Java版本1.8 [root@sht-sgmhadoopdn-04 app]# java -versionjava version "1.8.0_66"Java(TM) SE ...
- springboot 完整企业项目搭建实记
昨天搭建ssm框架时突然想到可以搭建springboot来完美解决配置复杂的问题,今天学习了一下springboot的搭建,在此记录一下搭建的过程和踩过的坑 这里给自己定一个该框架搭建完成的目标,如下 ...
- KMP + 求最小循环节 --- POJ 2406 Power Strings
Power Strings Problem's Link: http://poj.org/problem?id=2406 Mean: 给你一个字符串,让你求这个字符串最多能够被表示成最小循环节重复多少 ...
- php -- 可变变量
有时候使用可变变量名是很方便的.就是说,一个变量的变量名可以动态的设置和使用.一个普通的变量通过声明来设置,例如: <?php $a = 'hello'; ?> 一个可变变量获取了一个普通 ...