- 浏览: 531451 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wenming6688:
垃圾。。。。。。
Java中的this和super[转] -
yingjianxuehun:
gszp852 写道请问下,服务器的字符编码在哪设置,我也遇到 ...
ognl.MethodFailedException: Method "setEndtime" failed for object -
zxjlwt:
有在osgi中用过吗?http://surenpi.com
no security manager: RMI class loader disabled -
samuce:
谢谢,终于找到问题结果!
taglib prefix="s" uri="/struts-tags" -
gszp852:
请问下,服务器的字符编码在哪设置,我也遇到了这个问题。不知道是 ...
ognl.MethodFailedException: Method "setEndtime" failed for object
SGA——Oracle的系统全局空间
SGA——数据高速缓存池(DB Buffer)
| |—————————默认缓存池
| |—————————保持缓存池
| |—————————再生缓存池
|
|———共享缓存池
| |————————库缓存区
| | |——————共享SQL区(已编译的SQL)
| | |——————PL/SQL区(过程、函数等..)
| |
| |————————数据字典缓存区(常用的表名、列名等用于解析SQL语句的内容)
|
|———Redo日志缓存区
|———大共享区(可选的特征)
|———固定SGA
内存结构与动态内存管理
内存是影响数据库性能的重要因素。
oracle8i使用静态内存管理,即,SGA内是预先在参数中配置好的,数据库启动时就按这些配置来进行内在分配,oracle10g引入了动态内存管理,即在数据库运行过程中,内存大小可以在线修改与自动配置。
oracle数据库的内存可以分为:系统全局区、程序全局区、排序区、大池、java池。
一、系统全局区(SGA)
系统全局区的数据被多个用户共享。当数据库实例启动时,系统全局区内存被自动分配。SGA按作用的不同,又分为:数据缓冲区、日志缓冲区、共享池。
1.数据缓冲区
数据缓冲区用于存储从磁盘数据文件中读入的数据,供所有用户共享。修改、插入的数据存储在数据缓冲区中,修改完成或DBWR进程执行时,数据被写入数据文件。
几个概念:
LRU:最近最少使用,系统按这个原则对缓冲区中的数据进行替换。
Dirty:脏数据,指修改后还没有写到数据文件中的数据。
在9i之前,数据缓冲区的大小是由DB_BLOCK_BUFFER确定,之后的版本中,是由参数DB_CACHE_SIZE及DB_nK_CACHE_SIZE确定。不同的表空间可以使用不同的块大小,在创建表空间中加入参数BLOCKSIZE指定该表空间数据块的大小,如果指定的是2k,则对应的缓冲区大小为DB_2K_CACHE_SIZE参数的值,如果指定的是4k,则对应的缓冲区大小为DB_4K_CACHE_SIZE参数的值,以此类推。如果不指定BLOCKSIZE,则默认为参数DB_BLOCK_SIZE的值,对应的缓冲区大小是DB_CACHE_SIZE的值。
缓冲区的设置对性能影响是很突出的。设一个查询要读取的数据块数为A,能够从缓冲区读取到的数据块数为C,需要从磁盘读取的数据块数为D,那么A+C+D,则C/A称为数据缓冲区的命中率。以下语句计算数据缓冲区的命中率:
SQL>SELECT A.VALUE+B.VALUE "LOGICAL_READS",C.VALUE "PHYS_READS",
ROUND(100*((A.VALUE+B.VALUE)-C.VALUE)/(A.VALUE+B.VALUE)) "BUFFER HIT RATIO"
FROM V$SYSSTAT A,V$SYSSTAT C
WHERE A.STATICSTIC#=38 AND B.STATISTIC#=39 AND C.STATICSTIC#=40
一般要求命中率在90%以下,如果命中率太低,就应适当调整数据缓冲区的大小。
2.日志缓冲区
日志缓冲区用于缓冲事务日志,在适当的时候再由LGWR进程写入日志文件。日志缓冲区的大小由参数LOG_BUGGER设定。
日志在进入日志缓冲区时,如果日志缓冲区过小而没有空闲空间,就要等待LGWR将缓冲区中原有的日志写入日志文件以腾出空闲空间。如果有足够的空闲空间,则无需等待,直接写入日志缓冲区中。那么这个 等待的次数/总次数(等待+非等待) 就称为日志缓冲区的失败率,可以通过以下语句计算:
sql>select name,gets,misses,immediate_get,immediate_misses,
decode(gets,0,0,misses/gets*100 ratio1,
decode(immediate_gets+immdiate_misses,0,0,immediate_misses/(immdiate_gets+immediate_misses)*100) ratio2
from v$latch where name in ('redo allocation','redo copy');
显然,失败率也是影响性能的重要因素,就要实际情况调整log_buffer的大小。
3.共享池
共享池是对sql,pl/sql程序进行语法分析,编译,执行的内存区域。包括:库缓冲区(library cache),数据字典缓冲区(data dictinary cache),用户全局区(user global area)三个部分。
共享池的大小由参数shared_pool_size设定。
查询数据字典的成功与失败次数:
sql>select sum(gets) "dictionary gets",
sum(getmisses) "dictionary cache getmisses",
from v$rowcache
计算共享池记取数据字典的成功率:
sql>select parameter,gets,getmisses,getmisses/(gets+getmisses)*100 "miss ratio",(1-sum(getmisses)/sum(gets)+sum(getmisses))))*100 "hit ratio" from v$rowcache where gets+getmisses<>0 group by parameter,gets,getmisses;
计算缓存的失败率,结果应小于1%:
sql>select sum(pins) "total pins",sum(reloads) "total reloads",
sum(reloads)/sum(pins)*100 libcahe from v$librarycache;
以上分析了SGA的三个部分,要查看SGA的总大小或空闲空间,使用比率,如下:
sql>select * from v$sga
sql>select name,sgasize/1024/1024 "allocated(m)",bytes/1024 "空闲空间百分比(%)" from (select sum(bytes) sgasize from sys.v_$sgastat) s,sys.v_sgastat f where f.name='free mamory';
二、程序全局区
程序全局区(PGA)是包含单个用户或服务器数据的控制信息的内存区域。是在用户进程连接到oracle数据库并创建一个会话时,由oracle自动分配的,它是非共享区,主要用于在编程时存储变量与数组。会话结束时,PGA被释放。
三、排序区
排序区用于sql的order by。oracle优先使用排序区进行排序,如果内存不够,oracle自动使用临时表空间进行排序。
参数sort_area_size用于设置排序区的大小。
四、大池
大池用于数据库备份工具-RMAN。
大池的大小由参数large_pool_size确定。
五、java池
从8i开始,oracle增加了对java的支持,所以系统提供了java池,其大小由参数java_pool_size设定。
六、oracle10g的自动共享内存管理
1.什么是自动共享内存管理?
在10g以前的版本中,SGA的各个部分,share_pool_size,db_cache_size等需要由管理员手动设置大小,当数据库负荷太大时,若没有调整这些参数的大小,就会产生“无法分配内存”的错误。在10g中,将参数statistics_level设置为typecal 或all,再使用新参数SGA_TARGET设置SGA内存区的部大小即可,无需定义每个参数的大小,系统会根据需要自动在多个组件之间分配内存大小。
2.自动共享内存管理时,设置SGA各部分内存参数的最小值限制
如果同时设置了SGA_TARGET和各内存参数,如:
SGA_TARGET=300M
SHARED_POOL_SIZE=32M
DB_CACHE_SIZE=90M
则表示共享池和数据缓冲区至少会分配32M和90M内存,剩下的可由系统自动分配的内存为:
300-32-90=172M
3.手动内存管理转换为自动管理
只要设置新参数SGA_TARGET即可,如:
SGA_TARGET=1000M
在自动内存管理模式下,如果数据库使用SPFILE,那么在数据库关闭后,系统会将上一次数据库关闭时的内存分配状态记录下来。因此,如果是自动内存管理,最好使用SPFILE而非PFILE。
转载:http://blog.csdn.net/hxf0759/archive/2009/04/09/4060493.aspx
发表评论
-
概念模型、逻辑模型、物理模型的区别[转]
2014-09-15 11:51 2594经常用PowerDesigner设计数据库,PowerDes ... -
Java数据类型和MySql数据类型对应表[转]
2013-05-09 16:55 888转自: http://www.cnblogs.com/Jem ... -
PowerDesigner主键自增
2012-10-12 11:18 1046在你所要设为自增型的键上(比如你的id)双击,弹出一个C ... -
ora 38301无法对回收站的对象执行ddl
2011-06-06 22:31 11013今天在导数据时,卡在一个表那里,等的不耐烦,就终止了,估计是表 ... -
ORA-06413 连接未打开错误
2011-06-06 14:04 6345ORA-06413 Connection not open.C ... -
ORA-12560
2011-06-06 11:42 1279ORA-12560 1.监听服务没有起来。window ... -
Oracle版本区别[转]
2011-03-25 21:26 1169转自:http://blog.csdn.net/pengyou ... -
2010-11-22早上测试库不能登录的问题的解决过程
2010-11-22 10:50 11882010-11-22早上测试库不能登录的问题的解决过程: 1 ... -
ora-12528的解决办法[转]
2010-11-22 10:45 1739转自:http://space.itpub.net/1548 ... -
ORA-03206:oracle 11g表空间之最大大小[转]
2010-11-15 10:49 7635转自:http://www.360doc.com/cont ... -
DDL,DML,DCL,TCL四种语言的简介
2010-10-18 16:28 12051.DDL (Data Definition Language ... -
新建一个用户操作oracle
2010-10-08 12:32 1400今天出现了一个问题,linux下root用户不能切换到 ... -
查询修改ORACLE的server、客户端和导出dmp文件的字符集编码方式[转]
2010-09-27 10:40 1766转自:http://hi.baidu.com/an ... -
Oracle 查询表空间使用情况(转)
2010-07-20 15:34 972转:http://foolraty.iteye.com ... -
查看Oracle当前连接数
2010-05-29 23:00 1617做数据库开发的时候,有时候会遇到连接超出最大限制的问题,这时候 ... -
ora-04063:view view_test has errors (转)
2010-05-24 20:44 2186转:http://mingyue19850801.blog.1 ... -
在Oracle中创建视图,提示无权限 ORA-01031
2010-05-24 20:13 3590今天在对表创建视图的时候,用户提示 ORA-01031用户权限 ... -
ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
2010-05-23 20:56 999一些ORACLE中的进程被杀掉后,状态被置为"kil ... -
oracle的jdbc连接方式:oci和thin[转]
2010-05-12 22:48 2440转自:http://hi.baidu.com/12 ... -
ORA-01691
2010-05-10 15:31 1386ORA-01691: unable to extend lob ...
相关推荐
在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系,实例... 构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Oracle的 进程结构,内存区域和后台进程合称为一个Oracle实例
oracle 12c 内存结构 高清图 CDB +PDB
详细讲解了oracle的内存结构,对数据提取、查询优化的基本原理进行了解析
Oracle 10g内存结构 讲述oracle的内存结构和用途
Oracle-mem-structure.doc oracle 内存结构
详细解析了oracle内存架构,相关参数和视图,包括SGA、PGA、UGA、CGA,以及orcle内存管理模式等。
oracle数据库体系结构之一【内存结构】.docx
Oracle内存结构研究-PGA篇;PGA(Process Global Area),即程序全局区,一个进程的专用的内存区。
绝对的值得一看的文档,全都是我收集的,oracle的内存结构,有想研究内存结构的可以看一下啊
Oracle的内存结构与进程结构
Oracle的内存结构和进程结构.docx
SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance).说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle ...本文将为大家介绍Oracle数据库内存结构SGA的区域信息。
Oracle的内存结构与进程结构.doc
Oracle的内存结构和进程结构.doc
oracle的内存结构,希望对大家有帮助
第一章 简答题 1.简述Oracle数据库逻辑结构中各元素之间的关系。 答:数据库由若干个表空间组成,表空间由表、索引、视图等逻辑对象组成,表由段 组成,段由区组成,区则由数据块组成... 答:SGA是一组共享内存结构,
ORACLE知识介绍,有关内存结构,服务方式,及表空间的创建问题
Oracle RAC 的主要创新是一项称为高速缓存合并的技术,使得集群中的节点可以通过高速集群互联高效地同步其内存高速缓存,从而最大限度地降低磁盘 I/O。 3. Oracle RAC 工作原理 在一个应用环境当中,所有的服务器...
Oracle 12c完整后台进程&内存结构图 DBA必备