Oracle 在9i版本之前,需要对内存参数手动设置,由于系统的负载是动态变化的,很难设置一个合适的值。
在Oracle9i版本之后,有了自动内存管理的功能,大大方便了DBA的工作。只要对PGA,SGA,Log_buffer 三个参数值设置好,Oralce会根据系统的负载动态平衡各个参数的设置。
如何设置PGA的参数:
在Oracle EM 内存参数页面,可以查看Oracle 对于PGA的建议,这是Oracle对当前时间以来系统的负载预估出来相应的PGA及对当前系统的性能的提高比例。
也可以通过查询下面的表
SELECT PGA_TARGET_FOR_ESTIMATE / 1024 / 1024,
PGA_TARGET_FACTOR,
BYTES_PROCESSED, --TOTAL BYTES PROCESSED BY ALL THE WORK AREAS CONSIDERED BY THIS ADVICE (IN BYTES)
ESTD_EXTRA_BYTES_RW, -- ESTIMATED NUMBER OF EXTRA BYTES WHICH WOULD BE READ OR WRITTEN IF PGA_AGGREGATE_TARGET WAS SET TO THE VALUE OF THE PGA_TARGET_FOR_ESTIMATE COLUMN.
ESTD_PGA_CACHE_HIT_PERCENTAGE, --预计CACHE数据的命中率,计算公式 BYTES_PROCESSED / (BYTES_PROCESSED + ESTD_EXTRA_BYTES_RW)
ESTD_OVERALLOC_COUNT --若非0,则意味着PGA不够大,不能够去处理工作区域的工作量
FROM V$PGA_TARGET_ADVICE
ORDER BY PGA_TARGET_FOR_ESTIMATE
-------------------------------------------------------------------------------------------------------------------------
设置SGA:
在Oracle EM 内存参数页面,可以查看Oracle 对于SGA的建议,这是Oracle对当前时间以来系统的负载预估出来的相应的PGA及对当前系统的性能的提高比例。
也可以通过查询下面的表
SELECT SGA_SIZE, --SGA的大小
SGA_SIZE_FACTOR, --以当前sga为比重,每个sga size的比例
ESTD_DB_TIME, --所有session活动时间的总和,内存越大,相对处理的时间就越短
ROUND(100 * ((1 - A.ESTD_DB_TIME_FACTOR) / 1), 2), --针对当前的SGA改善的百分比
ESTD_PHYSICAL_READS --预计物理读
FROM V$SGA_TARGET_ADVICE A
ORDER BY SGA_SIZE;
-----------------------------------------------------------------------------------------------------------------------
设置log buffer
一般情况下不用设置这个值,默认值即可,oracle的LGWR会频繁的把此缓存的内容写入磁盘。
------------------------------------------------------------------------------------------------------------------------
SGA 的结构:
1.DATA BUFFER CACHE --数据缓存,读取数据须先把磁盘的数据写入此块区域(*)
--SHOW PARAMETER DB_CACHE_SIZE
2.SHARED POOL--共享池
A.LIBRARY CACHE --解析过的SQL存放的区域
A1.解析SQL
A2.解析PLSQL
B.DICTIONARY CACHE --数据字典的缓存区域,提高解析SQL的性能
--SHOW PARAMETER SHARED_POOL_SIZE
3.LOG BUFFER--日志缓存,后由LGWR进程写入磁盘(*)
--SHOW PARAMETER LOG_BUFFER
4.JAVA POOL
--SHOW PARAMETER JAVA_POOL
5.LARGE POOL --RMAN或者共享连接模式会用到
6.STREAM POOL --9.2以后的流复制会用到
其中对ORALCE 影响比较大的三个部分
1.DB CACHE SIZE
2.SHARE POOL
3.LOG BUFFER
SELECT * FROM V$SGA_DYNAMIC_COMPONENTS--SGA的五个参数可以通过这个视图查看
------------------------------------------------------------------------------------------------------------------------------
以下内容来至于Oracle 编程艺术的摘抄:
PGA的设置
WORKAREA_SIZE_POLICY:这个参数可以设置为MANUAL或AUTO,如果是MANUAL,会使用排序区和散列区大小参数来控制分配的内存量;
如果是AUTO,分配的内存量会根据数据库中的当前工作负载而变化。默认值是AUTO,这也是推荐的设置
假设WORKAREA_SIZE_POLICY设置为AUTO,PGA_AGGREGATE_TARGET有一个非0值,就会使用这种新引入的自动PGA内存管理
1.PGA_AGGREGATE_TARGET是一个上限目标,而不是启动数据库时预分配的内存大小。可以把PGA_AGGREGATE_TARGET设置为一个超大的值(远远大于服务器上实际可用的物理内存量),
你会看到,并不会因此分配很大的内存
2.串行(非并行查询)会话会使用PGA_AGGREGATE_TARGET中的很少一部分,大约5%或者更少。所以,如果把PGA_AGGREGATE_TARGET设置为100 MB,可能每个工作区(例如,排序或散列工作区)只会使用大约不到5 MB。
你的会话中可能为多个查询分配有多个工作区,或者一个查询中就有多个排序/散列操作,但是不论怎样,每个工作区只会用PGA_AGGREGATE_TARGET中不到5%的内存。
3.随着服务器上工作负载的增加(可能有更多的并发查询和更多的并发用户),分配给各个工作区的PGA内存量会减少。数据库会努力保证所有PGA分配的总和不超过PGA_AGGREGATE_TARGET设置的阈值。这就像有一位DBA整天坐在控制台前,
不断地根据数据库中完成的工作量来设置SORT_AREA_SIZE和HASH_AREA_SIZE参数。稍后会通过一个测试来观察这种行为。
4.一个并行查询最多可以使用PGA_AGGREGATE_TARGET的30%,每个并行进程会在这30%中得到自己的那一份。也就是说,每个并行进程能使用的内存量大约是0.3*PGA_ AGGREGATE_TARGET / (并行进程数)
Oracle建议使用自动管理pga,当不想使用自动自动模式,可以使用alter session 命令,充分利用所有可用的资源。
---------------------------------------------------------------------------------------------------------
SGA 内存管理
要使用自动SGA内存管理,参数STATISTICS_LEVEL必须设置为TYPICAL或ALL。如果不支持统计集合,数据库就没有必要的历史信息来确定大小。
采用自动SGA内存管理时,确定自动调整组件大小的主要参数是SGA_TARGET,这个参数可以在数据库启动并运行时动态调整,
最大可以达到SGA_MAX_SIZE参数设置的值(默认等于SGA_TARGET,所以如果想增加SGA_TARGET,就必须在启动数据库实例之前先把SGA_MAX_SIZE设置得大一些)。
相关推荐
oracle 19c数据库参数优化最佳实践
讲解了,oracle内存结构和内存参数的设置
Oracle 不同平台的数据库安装指导为我们部署Oracle提供了一些系统参数设置的建议值,然而建议值是在通用的情况下得出的结论,并非能完全满足不同的需求。使用不同的操作系统内核参数将使得数据库性能相差甚远。本文...
Oracle内存参数调优技术详解
主要介绍了Linux环境下Oracle安装参数设置方法,本文通过代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
Oracle内存结构 64 sys用户和system用户 67 Oracle SQL语句 67 GROUPING SETS分组 74 Oracle外部程序触发 75 Oracle数据库的备份与恢复 77 Oracle分区功能提高应用程序性能 79 Oracle数据库处理时间基本准则 81 入侵...
如何突破Oracle 在32 bit windows环境下的1.7G限制? OS:windows2003 server (entprise) ...据说Oracle在32 bit windows平台上有1.7G的限制,但是我不知道需要调整什么参数让Oracle可以使用到更大的内存。。。
安装oracle内核参数说明及设置 kernel.shmmax 说明: · Linux进程可以分配的单独共享内存段的大值(byte) · 64位的linux操作系统,设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值/或者1/2的物理...
--Oracle 11g参数设置建议 --Oracle Database Memory Advisors 2.Storage Structure --Contolfiles&Online Redo Log Files --LMT vs DMT --ASSM --SEGments,extents&Datablocks --SPECIAL TABLESpaces:...
ASMM有所了解,从使用的角度来说ASMM的出现极大地简化了Oracle内存初始化参数的设置,在ASMM的使 用上高级DBA和初学者不会有太大的差别;很多人因此而认为ASMM极大程度地减少了数据库对于专业DBA的 依赖:如果我们有...
为用户oracle设置环境变量,并允许使用X终端 [root@dbserver ~]# groupadd oinstall //安装组 [root@dbserver ~]# groupadd dba //管理组 [root@dbserver ~]# useradd -g oinstall -G dba oracle [root@dbserver ~]...
数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了. 当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句. 这里需要...
2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 ...
11由于空间参数设置不合理导致扩展表空间、索引等失败 12由于时间格式的环境变量设置问题导致话单无法入库 13由于大事务未使用大回滚段导致事务挂起 14由于数据库连接数太多导致服务器进程数多或内存耗尽 15由于使用...
3 ORACLE内存结构概述 3 4 常用参数说明 3 4.1 BUFFER_POOL_KEEP 4 4.2 CPU_COUNT 4 4.3 DB_BLOCK_BUFFERS 4 4.4 DB_BLOCK_SIZE 5 4.5 DB_FILE_MULTIBLOCK_READ_COUNT 5 4.6 GLOBAL_NAMES 5 4.7 INSTANCE_NAME 5 4.8...
Oracle 实例的多数内存和进程设置 以下是一些主要参 数的说明 1 实例的数据库名称 db_name = "cams" 2 实例名称 instance_name = cams 3 数据库控制文件的名称和位置 control_files = ...
Oracle 内存结构 1-10 进程结构 1-12 Oracle 实例管理 1-13 服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-15 表空间和数据文件 1-17 SYSTEM 和 SYSAUX 表空间 1-18 段、区和块 1-19 逻辑和物理...
§2.4.2.2 参数设置与初始化文件: 54 §2.4.2.3 在控制实用程序运行中设置跟踪参数 56 §2.4.2.4 服务器/客户包跟踪 57 §2.4.2.5 评估NET跟踪信息 58 §2.4.2.6 使用跟踪助理(Trace Assistant)检查跟踪文件 60 第...
Oracle 内存结构1-10 进程结构1-12 Oracle 实例管理1-13 服务器进程和数据库缓冲区高速缓存1-14 物理数据库结构1-15 表空间和数据文件1-17 SYSTEM 和SYSAUX 表空间1-18 段、区和块1-19 逻辑和物理数据库结构1-20 ...