- 浏览: 214455 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bluky999:
jiakechong 写道跟啊里爸爸那个差不多吧跟 dubb ...
淘宝-HSF -
jiakechong:
跟啊里爸爸那个差不多吧
淘宝-HSF -
lookqlp:
您好!我写了个关键词关联度统计的mapreduce,排序非常慢 ...
排序--MapReduce -
liubang201010:
DB Audit更多参考资料:
http://www.inno ...
8--《DB Audit》 -
裴小星:
这些数据库专家,同样不了解程序员。SQL(或PL/SQL,TS ...
MapReduce:一个重大的倒退
在《Oracle
内存结构研究》一文中提到,PGA是一个服务器
进程的专用的私有内存区,而SGA则是共享内存区。
SGA由多个部分组成:
1, 固定SGA(Fixed SGA)
2, 块缓冲区(Db cache)
3, 重做日志缓冲区(Redo log buffer)
4, Java
池(Java
pool)
5, 大池(Large pool)
6, 共享池(Shared pool)
7, 流池(Stream pool)
有如下参数控制共享池相关组件大小:
1, JAVA_POOL_SIZE:控制Java池大小。
2, SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
3, LARGE_POOL_SIZE:控制大池大小。
4, DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。
5, LOG_BUFFER:控制重做日志缓冲区大小。
6, SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。
7, SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。
下面将详细介绍各个部分的作用和推荐设置。
二、SGA各组件作用
1, 固定SGA:
顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle
通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。
2, 块缓冲区:
查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。
块缓冲区中有三个区域:
默认池(Default pool):所有数据默认都在这里缓存。
保持池(Keep pool):用来缓存需要多次重用的数据。
回收池(Recycle pool):用来缓存很少重用的数据。
原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小
(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设
置各自的缓冲区。
3, 重做日志缓冲区(Redo log buffer):
数据写到重做日志文件之前在这里缓存,在以下情况中触发:
每隔3秒
缓存达到1MB或1/3满时
用户提交时
缓冲区的数据写入磁盘前
4, Java池(Java pool):
在数据库中运行Java代码时用到这部分内存。例如:编写Java存储
过程在服务器
内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储
过程才会用到这部分内存。
5, 大池(Large pool):
下面三种情况使用到大池:
并行执行:存放进程间的消息缓冲区
RMAN:某些情况下用于磁盘I/O缓冲区
共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)
6, 共享池(Shared pool)
共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。
SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。
SQL
和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到
全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的
查询可以减少很多时间。
不使用“绑定变量”导致:
系统需要花费大量的资源去解析查询。
共享池中的代码从不重用,系统花费很大代价管理这部分内存。
关于共享变量的优缺点讨论已经超过了这篇文章的范畴,简单来讲,响应时间短的查询要使用共享变量,响应时间长的统计不使用共享变量。
需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。
7, 流池(Stream pool)
9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。
三、SGA设置
没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。这里只是总结出大体的设定,避免因SGA设置不当引起的问题。
1,自动SGA内存管理
在Oracle 10g中引入了自动SGA内存管理特性,DBA可以设定SGA_TARGET告诉Oracle可用的SGA内存为多大,由Oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。
需要注意一下几点:
要使用自动SGA内存管理,STATISTICS_LEVEL参数必须设为TYPICAL或ALL,系统自动收集相应的信息用来动态调整SGA设定。
可以设定某个组件的值,Oracle使用此值为该组件的最小大小
可动态调整的参数:
DB_CACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE。
需手动设置的参数:
LOG_BUFFER,STREAMS_POOL,DB_NK_CACHE_SIZE,DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE。
2,手动SGA内存管理
1) 32bit和64bit限制
在32位的操作系统中,Oracle最大可用内存为1.75g,也就是说SGA+PGA<=1.75g,超过这一限制的内存将不会被Oracle用到。
32位的Oracle可以装到64位的操作系统上,64位的Oracle不可以装到32位的操作系统上。
2) 查看Oracle版本:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows
: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
3) 各组件设置:
JAVA_POOL_SIZE:如果没用到数据库端java的系统,30MB足够。
LOG_BUFFER:默认为MAX(512KB,128KB*CPU个数)。一般系统1MB足够,运行大型事务的系统可以设为2MB,让1/3满写入日志文件时可以继续写入缓冲,再大也没有意义。
SHARED_POOL_SIZE:
过大过小都会严重影响系统性能,1GB内存可以设为100MB,2GB内存可设为150MB,4GB内存可设为300MB。共享池命中过低首先要调整的是
应用程序而不是扩大共享池。使用绑定变量可以减少共享池需求、提高命中率,减少共享池管理负担和LATCH竞争。
LARGE_POOL_SIZE:使用专用服务模式可设为30MB,除非必要,不然不建议使用共享服务器模式。
DB_CACHE_SIZE:除去上述内存外其他可用内存都分配给该区域。
总结
32位Oracle:
1G内存:SHARED_POOL_SIZE=100MB,DB_CACHE_SIZE=0.5GB;
2G内存:SHARED_POOL_SIZE=150MB,DB_CACHE_SIZE=1.25GB;
64位Oracle
4G内存:SHARED_POOL_SIZE=200MB,DB_CACHE_SIZE=2.5GB;
8G内存:SHARED_POOL_SIZE=400MB,DB_CACHE_SIZE=5GB;
12G内存:SHARED_POOL_SIZE=500MB,DB_CACHE_SIZE=8GB
再次强调,以上只是避免因SGA设置不当引起问题的大体设置,需要根据具体的系统负载和业务逻辑结合Stackpack等工具细调。
发表评论
-
OCP认证考试指南全册10g
2012-01-06 18:49 1016常用命令: 1,lsnrctl status;emctl s ... -
exits 和in 深度分析(转载,出处不明)
2011-08-22 21:03 889EXISTS的执行流程 select * from t1 wh ... -
索引有点靠后
2011-08-10 21:51 736记得在taobao时候需要统计一个数据,但是通过不了SQLWE ... -
《MySQL 性能调优与架构设计》
2011-08-10 21:47 802MySQL的基本架构:SQL Layer和Storage En ... -
《Oracle Database 10g 性能调整与优化》
2011-08-02 21:31 10438.2 当从表中访问数据 ... -
Oracle零数据丢失
2011-07-25 20:28 931Oracle在版本7的时候, ... -
硬盘存储和磁盘存储比较
2011-05-30 14:02 756如图 -
解析oracle的ROWNUM -- 作者: chen_liang
2011-05-17 11:32 821对于rownum来说它是oracle系统顺序分配为从查询 ... -
flashback 需要的条件
2011-04-13 19:00 786flashback table 需要下面几个条件 1. ... -
oracle表列名大小写
2011-03-23 22:06 4019不是我写的sql,比较烂,但是有一个可以关注的点 oracle ... -
MapReduce:一个重大的倒退
2011-03-22 23:09 1642转载http://www.cnblogs.com/c ... -
ORA-12154
2011-03-20 23:16 908看看监听: lsnrctl status 是不是正常 ... -
Oracle -other
2011-03-12 13:10 815JackJw 的杂货铺 http://jackjw.itpu ... -
数据库的最佳布局
2011-03-09 23:26 8061,并发访问对象的分离 2,数据和相应的索引的分开 3,回 ... -
执行计划详解
2011-03-09 22:00 1128一、什么是执行计划 An explain plan is ... -
优化器
2011-03-07 23:47 756访问路径:FULL TABLE SCAN 全表扫描;Index ... -
B树索引和位图索引的使用环境
2011-03-07 00:18 847B树索引:是联机事务处理应用的最好选择,键值列是最适合的 位 ... -
sqlplus autotrace
2011-03-05 14:14 753出自eygle http://www.eygle.com/fa ... -
Oracle 重要文件系统解释 转载
2011-02-25 23:01 825Oracle 中要了解的文件实在太多了,一不小心就被弄 ... -
聚族索引、非聚族索引、组合索引的含义和用途 转载
2011-02-25 21:50 1257http://blog.csdn.net/zhaohuabin ...
相关推荐
Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...
Oracle的System Global Area (SGA)是数据库实例的核心组成部分,它是一个共享的内存结构,用于存储数据、对象、运行状态和数据库控制信息。在Oracle数据库系统中,SGA被所有数据库进程共同访问,用于提高数据处理...
本文将深入解析Oracle的基本组成、实例(Instance)结构以及内存结构等核心概念。 #### 一、Oracle基本组成 Oracle的基本组成部分包括Oracle Server、Oracle Instance 和 Oracle Database。具体如下: - **Oracle...
Oracle内存结构是数据库性能优化的关键因素,它主要分为两大部分:共享内存(SGA)和进程私有内存(PGA及UGA)。理解这些组件的工作原理对于优化Oracle数据库的性能至关重要。 1. SGA(System Global Area) SGA是...
Oracle内存结构是指Oracle数据库的内存存储方式,包括系统全局区、程序全局区等。系统全局区是Oracle为一个实例分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息,包括数据维护、SQL语句分析...
Oracle实例的内存结构主要分为两大部分:系统全局区(SGA)和程序全局区(PGA)。SGA是所有用户进程和服务器进程共享的内存区域,而PGA则是为每个用户进程分配的私有内存空间。 **SGA**主要包含以下几个关键组件: ...
SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance).说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle ...本文将为大家介绍Oracle数据库内存结构SGA的区域信息。
### Oracle数据库体系结构知识点 #### 一、Oracle体系结构简介 **Oracle Server**: Oracle服务器包含两个主要部分:数据库(Database)和实例(Instance)。 - **Database**: 包括数据文件(Datafiles)、控制文件...
Oracle数据库的体系结构主要包括实例和数据库两大部分。实例是由共享内存区域(System Global Area, SGA)和一组后台进程组成的。SGA是一个关键组件,它为所有使用当前实例的用户提供共享内存,允许高效的数据库操作...
Oracle数据库体系结构是一个复杂而精细的系统,它由多个关键组件构成,包括实例、内存结构和后台进程,以及数据库的物理和逻辑结构。Oracle实例是数据库运行时的核心,由System Global Area (SGA)和后台进程两大部分...
Oracle内存主要分为SGA、PGA、排序池、大池和Java池。 3. 系统全局区SGA: SGA是所有数据库实例共享的内存区域,包括数据缓冲区、日志缓冲区和共享池等组件。SGA的大小在数据库启动时设定,并在关闭时释放。尽管...
在Oracle数据库系统中,SGA(System Global Area)是所有用户进程共享的一块内存区域,它为Oracle实例提供了一个公共的数据和控制信息存储区。SGA的合理配置对于数据库性能至关重要。 #### 二、SGA 的组成部分及...
Oracle 10g的内存结构是数据库管理系统的关键组成部分,它决定了数据库的性能和稳定性。SGA(System Global Area)是Oracle数据库中一个重要的共享内存区域,用于存储数据库运行时的各种数据和控制信息。 1. SGA...
#### 一、Oracle内存结构简介 Oracle数据库的内存结构主要由SGA和PGA两部分组成: 1. **SGA**(Shared Global Area):SGA是所有数据库进程共享的一块内存区域,它包含了多个子组件如数据缓冲区、重做日志缓冲区、...
本文将深入探讨Oracle内存结构,包括SGA(System Global Area)和PGA(Program Global Area),以及如何进行全面的内存分析。 一、Oracle内存架构 1. SGA(系统全局区) SGA是Oracle数据库运行时共享的一片内存...
李兴华先生作为该领域的专家,其笔记可能深入讲解了Oracle的体系架构,包括内存结构(如SGA和PGA)、进程结构以及数据存储机制,这些都是理解Oracle运行基础的关键。 其次,笔记中可能详细解析了SQL语言在Oracle中...
- SGA(System Global Area):包含数据库缓存、PGA(Program Global Area)等内存结构,用于存储数据和处理信息。 - 进程结构:如DBWR(Database Writer)、LGWR(Log Writer)、PMON(Process Monitor)等后台...
1. **Oracle体系结构**:书中首先会介绍Oracle数据库的核心架构,包括内存结构(如SGA和PGA)、进程结构、数据存储以及redo log、undo log的工作原理,这些基础知识对于理解和优化Oracle性能至关重要。 2. **SQL...