- 浏览: 403470 次
- 性别:
- 来自: 上海
最新评论
-
liuwenlong62555:
...
Linux防火墙的关闭和开启 -
baolong101010:
永久关闭:chkconfig --level 2345 ipt ...
Linux防火墙的关闭和开启 -
lijie1819:
3)查看防火墙状态chkconfig iptables --l ...
Linux防火墙的关闭和开启 -
Annah:
总结的很好,谢谢
Vector和ArrayList区别 -
celavi:
非常好的文章,谢谢分享!
ORACLE SQL TUNING
5.6 自动共享内存管理
从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM,即Automatic Shared Memory Management)新特性。所谓ASMM,就是指我们不再需要手工设置shared pool、buffer pool等若干内存池的大小,而是为SGA设置一个总的大小尺寸即可。Oracle 10g数据库会根据系统负载的变化,自动调整各个组件的大小,从而使得内存始终能够流向最需要它的地方。
比如,假设某个系统,白天属于OLTP应用,因此会需要较多的buffer cache。而该系统在晚上属于DSS应用。对于DSS应用,很多的SQL语句由于都是进行全表扫描,因此都会采取并行方式完成。我们知道,并行时需要靠若干的从属进程完成工作,而从属进程会从large pool中进行分配。于是,晚上会需要较多的large pool。如果我们启用了ASMM,则数据库会根据负载的变化而自动的对内存大小进行调整,就不需要DBA进行手工调整了。
Oracle 10g提供了一个新的初始化参数:sga_target来启动ASMM,该参数定义了整个SGA的总容量。同时,初始化参数statistics_level必须设置为typical或all才能启动ASMM,否则如果设置为basic,则关闭ASMM。
ASMM只能自动调整5个内存池的大小,它们是:shared pool、buffer cache、large pool、java pool和stream pool。我们不再需要设置shared_pool_size、db_cache_size、large_pool_size、java_pool_size、streams_pool_size这五个初始化参数。而其他的内存池,比如log buffer、keep buffer cache等仍然需要DBA手工进行调整。
举例来说,假设我们将sga_target设置为500MB,表示SGA总容量为500MB。但是如果我们需要配置100MB的keep buffer cache,则必须手工设置参数db_keep_cache_size为100MB。同时如果设置参数log_buffer为3MB,那么shared pool、buffer cache等可以调整的5个部分的总容量就是397MB(500-100-3=397)。
Oracle 10g还提供了另一个初始化参数sga_max_size。sga_target的值不能超过sga_max_size的值,修改sga_max_size时,必须重启实例才能生效,而sga_target则可以在线修改,立即生效,无须重启实例。
为了实现ASMM,Oracle新引入了一个名为MMAN(Memory Manager)的后台进程。每隔很短的一段时间,MMAN进程就会启动,然后去询问一下Oracle提供的各个内存组件顾问,比如有buffer cache顾问,也有shared pool顾问,由这些顾问根据当前的负载情况,将这5个可以自动调整的内存池的、建议的大小尺寸,返回给MMAN。于是,MMAN进程就会根据该返回的值,来设置各个内存池。同时,如果我们使用了spfile,还会将这些顾问得出的建议值写入spfile里。这样,下次启动实例时,就可以直接把顾问得出的建议值拿来作为启动内存池的依据了。
如果我们启用了ASMM,同时又手工设置了可以自动调整大小的内存池的尺寸,比如设置了参数shared_pool_size为一个非0值的时候,会怎么样?对于Oracle 10g来说,我们为自动调整大小的内存组件设置了值,则会以我们设置的值作为自动调整的最小值。也就是说,假设sga_target为4GB,而我们将shared_pool_size设置为600MB,则MMAN在进行自动调整时,永远不会将shared pool设置为600MB以下。
实际上,为了使用ASMM,Oracle为这5个可自动调整的组件又提供了5个控制它们大小尺寸的参数,以“__”(两个下画线开头)。我们把当前的spfile导出到pfile里。
SQL> create pfile='/u01/init.ora' from spfile; SQL> !vi /u01/init.ora |
打开该pfile以后,我们会发现文件的前5行,会显示如下的内容(具体值可能不一样):
ora10g.__db_cache_size=134217728 ora10g.__java_pool_size=4194304 ora10g.__large_pool_size=4194304 ora10g.__shared_pool_size=62914560 ora10g.__streams_pool_size=0 |
可以看到,这5个初始化参数都以“__”开头,后面的部分与我们手工设置内存池大小的参数相同。比如__db_cache_size与db_cache_size对应等。这种以“_”开头的参数我们叫做隐藏参数。所谓隐藏参数,就是没有官方文档对其含义进行说明的参数。这种参数会根据版本的不同而发生改变。这5个隐藏参数(比如__shared_pool_size)由MMAN进程负责修改,而与之相对应的其他参数(比如shared_pool_size)则由DBA进行设定。因此,当我们启动数据库时,数据库内核会在初始化参数__shared_pool_size与shared_pool_size之间进行比较。如果shared_pool_size没有设定,或设定为0,或设定的值比__shared_pool_size小,则以MMAN自动调整的值来设置内存池的尺寸。否则,以DBA设定的值来设置内存池的尺寸。
如果我们在数据库运行过程中,修改了某个可自动调整的内存池的大小,这时会怎么样?如果我们设置的值比MMAN自动调整出来的值要大,则该内存池立即调整为设定的值的大小,同时我们所设定的值作为MMAN新的、自动调整的最小值;反之,如果设置的值比MMAN自动调整出来的值要小,则该内存池的大小不会变化,而我们所设置的值则只作为自动调整的最小值存在。比如,当前MMAN自动调整出来的shared pool大小为150MB,也就是__shared_pool_size为150MB,同时shared_pool_size为60MB。这时,如果我们将参数shared_pool_size从60MB设置为100MB的话,则shared pool的大小仍然为150MB,但是新设置的100MB将作为自动调整时的下限;如果我们将参数shared_pool_size从60MB设置为200MB,则shared pool立即扩张,从150MB扩张到200MB,同时200MB也将作为自动调整的新的下限。
我们来验证一下。视图v$sga_dynamic_components里记录了能够动态调整的各个内存池的大小。
SQL> SELECT component, current_size/1024/1024 size_mb 2 FROM v$sga_dynamic_components where component=' shared pool'; COMPONENT SIZE_MB ------------------------------------ ------------ shared pool 80 |
当前MMAN自动调整出来的shared pool大小为80MB。
SQL> alter system set shared_pool_size=70M; SQL> SELECT component, current_size/1024/1024 size_mb 2 FROM v$sga_dynamic_components where component=' shared pool'; COMPONENT SIZE_MB ------------------------------------ ------------ shared pool 80 |
我们将shared_pool_size设定为70MB,小于自动调整出来的值。可以看到,shared pool没有缩小,仍然是80MB。我们再将其从80MB扩大到100MB。
SQL> alter system set shared_pool_size=100M; SQL> SELECT component, current_size/1024/1024 size_mb 2 FROM v$sga_dynamic_components where component=' shared pool'; COMPONENT SIZE_MB ------------------------------------ ------------ shared pool 100 |
显然,只要我们设定的值比自动调整出来的值大,就会立即生效。
同时,如果当前我们启用了ASMM,同时并没有为这5个可以自动调整的内存池参数指定具体的值。当数据库在ASMM状态下运行一段时间以后,我们再禁用ASMM,会发生什么?我们来看下面的试验。
SQL> select name,value from v$parameter 2 where name in('shared_pool_size','db_cache_size',' java_pool_size','large_pool_size',' streams_pool_size'); NAME VALUE -------------------- -------------- shared_pool_size 96468992 large_pool_size 0 java_pool_size 0 streams_pool_size 0 db_cache_size 0 |
可以看到,除了shared pool为DBA指定以外(因为shared_pool_size大于0),其他的内存池都由ASMM指定。
SQL> select component, current_size FROM v$sga_dynamic_ components 2 where component like '%pool' or component= 'DEFAULT buffer cache'; COMPONENT SIZE_MB ---------------------------------- ----------- shared pool 138412032 large pool 4194304 java pool 4194304 streams pool 0 DEFAULT buffer cache 373293056 |
我们看到,ASMM根据当前的负载情况,为这5个内存池指定了大小。
SQL> alter system set sga_target=0; SQL> select name,value from v$parameter 2 where name in('shared_pool_size','db_cache_size',' java_pool_size','large_pool_size',' streams_pool_size'); NAME VALUE -------------------- -------------- shared_pool_size 138412032 large_pool_size 4194304 java_pool_size 4194304 streams_pool_size 0 db_cache_size 373293056 |
当我们将sga_target设置为0,从而禁用ASMM时,会发现,Oracle会自动将当前内存池的大小赋给对应的初始化参数(shared_pool_size、db_cache_size等)。同时我们也可以注意到,shared_pool_size的值也不再是DBA当时指定的96468992,而是被ASMM自动调整出来的138412032所覆盖。
发表评论
-
一次oracle无法open的解决
2009-01-16 13:59 3725这几天因为公司的复杂查询出现性能的问题(说实话本来就没设计好, ... -
如何改善Oracle的索引
2009-01-12 16:40 15851、速度因素 PARALLEL选项:当创建索引时,O ... -
Oracle latch竞争总结(一)
2009-01-07 11:38 2907在Oracle中,Latch的概念是非常重要的,v$l ... -
PX Deq: Execute Reply 案例说明
2009-01-03 09:55 30891 背景:Oracle 数据库在执行sql时,会自动的选择较 ... -
MySQL优化经验——第一讲
2008-12-28 19:41 1416今天突然想起自己 ... -
oracle中对workarea_size_policy和sort_area_size的总结
2008-12-19 12:06 8942在实际的工作中,想必很多人会对SORT_AREA_SIZE和s ... -
Oracle专用服务器与共享服务器的区别
2008-12-19 11:51 3393在建立Oracle数据库的时候,应该会在数据库建立助手向导上面 ... -
CBO学习笔记
2008-12-18 23:09 1466cost of b-tree access 这 ... -
Oracle高级SQL调优:CLUSTER_FACTOR案例研究
2008-12-18 22:27 1872大家在大型数据库生产系统的运维中可能会遇到这样一个问题,一条查 ... -
Oracle分析函数RANK()|ROW_NUMBER()|LAG()使用详解
2008-12-16 14:58 3131ROW_NUMBER()的使用方法: ROW_NUMB ... -
index和rowid的一点关系
2008-12-16 14:18 1520相信很多朋友在rowid和index之间都会有些疑问,今天在w ... -
关于MySQL的查询缓存收
2008-12-13 21:21 1215关于MySQL的查询缓存收 原理 QueryCache(下面简 ... -
oracle 被锁,解锁,阻塞语句
2008-12-12 18:35 2695//查询被锁的表 select A.s ... -
通过Oracle10g的FLASHBACK_TRANSACTION_QUERY指定事务的历史信息
2008-12-12 13:05 3196在数据库操作中,我们经常会遇到余下情况: 1.莫名其妙数据被D ... -
对于Oracle中DML使用UNDO的一些看法
2008-12-11 17:53 1258insert操作回滚段中只记录这些记录的ROWID updat ... -
oracle中x$ksppi和x$ksppcv详解
2008-12-09 17:22 3455SQL> desc x$ksppi 名称 ... -
ORA-600 [2103]错误及CF enqueue竞争
2008-12-09 17:21 1263昨天,客户的一套Oracle 10.2.0.3 RAC环境遇到 ... -
Oracle的redo 和undo的区别
2008-12-05 15:26 2633redo--> undo-->datafile i ... -
从 v$session 视图获取客户端 IP 地址
2008-11-18 19:42 2691缺省从 v$session 中不能直接获得客户端 IP ... -
oracle中聚合函数RANK和dense_rank的使用
2008-04-18 17:23 1388聚合函数RANK 和 dense_rank ...
相关推荐
### Oracle 10g的内存调整报告 #### 内存配置的重要性 Oracle 数据库的内存配置对于数据库的整体性能至关重要。不恰当的内存设置不仅会导致性能下降,还可能引发各种难以定位的问题。因此,在进行Oracle 10g的内存...
这些区域共同构成了Oracle实例的共享内存空间。 - **Shared Pool**: 存储共享SQL语句、PL/SQL代码等。包括Library Cache、Dictionary Cache等。 - **Buffer Cache**: 用于缓存数据块,分为Default Buffer Cache、...
- **自动管理(ASMM)**:自10g开始,Oracle引入了ASMM,通过自动调整内存组件的大小来优化性能。 - 优点:极大简化了内存管理配置,提高了内存利用率和系统性能;降低了ORA-04031错误发生的可能性。 #### 五、...
- 自动存储管理(ASM)是Oracle 10g推出的新特性,它允许数据库管理员通过一个统一的接口管理存储设备,简化了存储配置和管理。 5. 其他相关操作 安装Oracle数据库之后,可能还需要了解如何进行一些基本的管理操作...
例如,10g中的自动内存管理(Automatic Memory Management, AMM)可以动态调整SGA和PGA的大小,提高资源利用率。 #### 四、Oracle 9i/10g 服务器组件 - **服务器组件**:包括数据库服务器、应用服务器、中间件组件...
4. **内存管理的变迁**:Oracle内存管理经历了从早期的静态分配到动态调整,再到自动共享内存管理(ASMM)和自动内存管理(AMM)的演变。AMM使得数据库能够自动管理SGA和PGA,简化了管理员的工作。 5. **Shared ...
4. **自动内存管理**:在Oracle10g中,引入了自动内存管理,简化了数据库管理员的工作,自动调整SGA的大小,包括数据缓冲区高速缓存、共享池和Java池。 5. **RAC(Real Application Clusters)**:Oracle10g强化了...
8. **自动管理功能**:Oracle 10g引入了自动内存管理、自动工作负载监控和自动存储优化等特性,简化了数据库的日常管理。 9. **XML支持**:Oracle 10g提供了内置的XMLDB功能,可以存储、查询和处理XML文档,使其...
- **自动内存管理**:Oracle 10g引入了自动内存管理机制,可以自动调整SGA的各个组件大小,简化内存管理。通过`MEMORY_TARGET`和`MEMORY_MAX_TARGET`参数实现。 - **PGA调整**:PGA的大小通常由`pga_aggregate_...
Oracle 10g引入了许多新特性,包括自动存储管理(ASM)、实时应用集群(RAC)、数据屏蔽和透明数据加密等,提升了数据库的性能、可用性和安全性。 **3. 安装过程** 安装ArcSDE for Oracle 10g通常涉及以下步骤: - ...
《Oracle10g系统管理员使用手册》是一本深入解析Oracle10g数据库管理系统运维的权威指南,主要面向那些需要管理、监控和优化Oracle10g环境的系统管理员。Oracle10g是Oracle公司推出的数据库产品,它在性能、可扩展性...
- **Oracle Grid Infrastructure for a Single Instance**:针对单个实例的Oracle Grid Infrastructure提供了一系列工具和服务,如自动存储管理(ASM)、Oracle Restart等,这些服务可以增强数据库的高可用性和管理...
实际上,Solaris10的内存限制由项目机制管理,默认情况下,共享内存已足够满足Oracle运行,但为了确保最佳性能,仍然推荐进行设置。 3. **用户和组的创建**: 在创建Oracle用户时,Solaris与Linux有所不同。在...
Oracle 10g 是Oracle公司推出的数据库管理系统的一个重要版本,主要关注高性能、高可用性和安全性。这个"Oracle10g培训PPT"很显然是一份深入讲解Oracle 10g特性和使用的教学材料,内容全面且详尽。下面将根据这个...
Oracle 10g RAC(Real Application Clusters)集群技术是Oracle数据库系统中的一种高可用性和高性能解决方案。它允许多个数据库实例同时访问同一物理数据库,以实现数据的共享和负载均衡,从而提高系统的可靠性和...
Oracle 10G DBA Reference 是一本针对Oracle数据库管理员(DBA)的重要参考资料,主要涵盖了在Oracle 10g版本中的管理和维护技术。Oracle 10g是Oracle公司的一个重大发布,提供了许多新特性和改进,以提升数据库的...
7. 内存管理:Oracle 11g改进了内存结构,如共享池(Shared Pool)、数据库缓冲区高速缓存(Buffer Cache)和Java池(Java Pool),提升了系统响应速度。 8. 空间管理:通过扩展的分区技术和压缩功能,Oracle 11g...
### 虚拟机ESXi + SuSELinux11 + Oracle10g RAC 安装 #### 一、安装前准备 ##### 1.1 基础概念 - **ESXi**: VMware ESXi 是一种类型 1 的虚拟化平台,能够直接运行在服务器硬件上,提供对硬件资源(CPU、内存、...
Oracle 10g是Oracle公司推出的数据库管理系统的一个版本,它在2003年发布,提供了许多创新功能,包括高级数据管理、企业级安全性、优化的性能以及全面的数据集成。以下是一些关于Oracle 10g的核心知识点: 1. ...