ORACLE内存调整建议
Oracle内存调优及优化思路

Buffer Cache的使用进程
• 前台进程:从磁盘中读数据块至buffer cache中 • DBWR进程:从buffer cache写数据块至磁盘中
提示:前台进程和DBWR进程可以有多个,严格来讲,同一时刻 只能由一个进程更改数据块(可以有多个进程读取数据块),所 以Buffer Cache中需要有latch来保护并发性访问数据块
软解析
• 如果一个session发起一个已经在shared pool中的SQL语句并且 它可以使用一个当前存在的版本,那么这个过程被称为一个 'soft parse'。对于应用来说,它只需请求解析这个语句。
软解析
• 通过设置SESSION_CACHED_CURSORS参数将某个会话中常用的SQL放 入UGA的会话缓冲区中,当会话发起相同的SQL时,可以快速地从 UGA(User Global Area)取得CURSOR信息,从而减少共享池的争用
(续)
• BUFFER CACHE的命中率高,并不意味着数据库性能良好。 执行计划出错时,逻辑读高,但效率低下 “热”块争用时,逻辑读低,但效率低下
Flash cache特性
Buffer Cache种类
• Default buffer cache:数据块的默认缓冲池,与db_block_size参数有关 • Keep buffer cache:缓存热块 • Recycle buffer cache:缓存冷块
– Library cache – Data dictionary cache
• Sized by the parameter • SHARED_POOL_SIZE.
Shared pool
Library cache
Data dM SET SHARED_POOL_SIZE = 64M;
oracle内存分配和调优总结

oracle内存分配和调优总结⼀直都想总结⼀下oracle内存调整⽅⾯的知识,最近正好优化⼀个数据库内存参数,查找⼀些资料并且google很多下。
现在记录下来,做下备份。
⼀、概述:oracle 的内存可以按照共享和私有的⾓度分为系统全局区和进程全局区,也就是 SGA和 PGA(process global area or private global area)。
对于 SGA 区域内的内存来说,是共享的全局的,在 UNIX 上,必须为 oracle 设置共享内存段(可以是⼀个或者多个),因为 oracle 在UNIX 上是多进程;⽽在 WINDOWS 上 oracle 是单进程(多个线程),所以不⽤设置共享内存段。
PGA 是属于进程(线程)私有的区域。
在 oracle 使⽤共享服务器模式下(MTS),PGA中的⼀部分,也就是 UGA 会被放⼊共享内存 large_pool_size 中。
发张图oracle内存架构组成,按照图上⾯的显⽰可以⼀⽬了然关键的参数和参数名称:对于 SGA 部分,我们通过 sqlplus 中查询可以看到:SQL> select * from v$sga;NAME VALUE---------- --------------------Fixed Size 454032Variable Size 109051904Database Buffers 385875968Redo Buffers 667648Fixed Size:oracle 的不同平台和不同版本下可能不⼀样,但对于确定环境是⼀个固定的值,⾥⾯存储了 SGA 各部分组件的信息,可以看作引导建⽴SGA 的区域。
Variable Size :包含了 shared_pool_size、java_pool_size、large_pool_size 等内存设置Database Buffers :指数据缓冲区:在 8i 中包含 db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分内存。
Oracle数据库内存优化操作说明

Oracle数据库内存优化Oracle的一些启动参数都保存在pfile和spfile这两个文件里面,早先的oracle(8i及之前版本)都是用pfile,这是个文本文件,可以用记事本修改,但必须要重新启动数据库服务才能生效,后来的oracle(8i之后)改用spfile,这是二进制文件没法用记事本修改,不过可以不用手动启动数据库服务。
oracle9i数据库默认从pfile中启动,但是可以指定从spfile 启动数据库,所以优化oracle数据库内存就会出现两种方法,即静态修改pfile文件和动态修改spfile。
方法一:静态修改pfile方式(注意:此方法只使用于数据库管理员明确当前数据库实例使用哪个pfile文件的情况,一般不建议使用这种方法,建议选用下面的方法操作)。
具体步骤如下所示:1)开始→运行→输入sqlplus /nolog ,然后用下图所示的命令连接到数据库。
注意:如果当前数据库的系统用户密码做了修改请用修改后的,一般9i数据库的系统用户名和密码与下图中是一致的。
2)输入命令:show parameter pfile查看当前数据库实例是不是以pfile启动,如果是pfile 启动的vale为空,如果是spfile启动的value下是spfile的路径。
3)输入命令:show parameter db_cache_size查看当前缓存大小注意:如果确定当前数据库实例从默认pfile中启动就找到下图所示的pfile文件夹下的init.ora文件,修改db_cache_size=838860800,然后保存这个文件夹,在“我的电脑-管理-服务”中重新启动oracle服务即可达到修改的目的。
方法二:动态修改spfile方式。
(注意:建议选用这种方法修改内存,因为这种方法不用关注pfile的位置,因为需要从spfile 中生成pfile)具体步骤如下所示:1)开始→运行→输入sqlplus /nolog ,然后用下图所示的命令连接到数据库。
Oracle数据库内存参数调优技术

Oracle数据库内存参数调优技术的个人总结近来公司技术,研发都在问我关于内存参数如何设置可以优化Oracle的性能,所以抽时间整理了这篇文档,以做参考。
目的:希望通过整理此文档,使公司同事对oracle内存结构有一个全面的了解,并在实际的工作中灵活应用,使oracle的内存性能达到最优配置,提升应用程序反应速度,并进行合理的内存使用。
实例结构oracle实例=内存结构进程结构oracle实例启动的过程,其实就是oracle内存参数设置的值加载到内存中,并启动相应的后台进程进行相关的服务过程。
进程结构oracle进程=服务器进程用户进程几个重要的后台进程:DBWR:数据写入进程.LGWR:日志写入进程.ARCH:归档进程.CKPT:检查点进程(日志切换;上一个检查点之后,又超过了指定的时间;预定义的日志块写入磁盘;例程关闭,DBA强制产生,表空间offline)LCKn(0-9):封锁进程.Dnnn:调度进程.内存结构(我们重点讲解的)内存结构=SGA(系统全局区) PGA(程序全局区)SGA就是我们所说的内存调优的主要对象。
我们重点就是设置SGA原则:SGA PGA OS使用内存<总物理RAM1、SGA系统全局区.(包括以下五个区)A、数据缓冲区:(db_block_buffers)存储由磁盘数据文件读入的数据。
大小: db_block_buffers*db_block_sizeOracle9i设置数据缓冲区为:Db_cache_size原则:SGA中主要设置对象,一般为可用内存40%。
B、共享池:(shared_pool_size):数据字典,sql缓冲,pl/sql语法分析.加大可提速度。
原则:SGA中主要设置对象,一般为可用内存10%C、日志缓冲区:(log_buffer)存储数据库的修改信息.原则:128K ---- 1M 之间,不应该太大D 、JAVA池(Java_pool_size)主要用于JAVA语言的开发.原则:若不使用java,原则上不能小于20M,给30M通常就够了E、大池(Large_pool_size)如果不设置MTS,主要用于数据库备份恢复管理器RMAN。
Oracle的内存优化

140432
127
3-11
指导:数据字典缓存失误
STATSPACK报告输出:
Get Pct Scan Pct
Mod
Final Pct
Cache
Requests Miss Reqs Miss
Reqs
Usage SGA
---------------------- ------------ ------ ------ ----- -------- ---------- ----
dc_free_extents
2 0.0
0
0
33
dc_histogram_defs
11 0.0
0
0
49 92
dc_object_ids
19 0.0
0
0
440 98
如果缓存的失误太多,要增加SHARD_POOL_SIZE参数
3-12
Oracle的内存优化-设置高速缓冲大小
服务器
Datafiles
数据文件
– Error message indicating insufficient memory. – Check scoreboard to see if shrink has completed. ALTER SYSTEM SET SHARED_POOL_SIZE = 64M; – The statement is now processed.
诊断方法 – 等待事件 – 缓冲命中率 –优化方法 – 减少SQL语句需要的块数量,增加高速缓冲的尺寸 – 使用多个缓冲池 – 缓存表 – 在排序合并行读取的时候越过高速缓冲
3-20
使用高速缓冲器击中率指南
击中率的值依赖于数据的访问方法: 全表浏览 数据和应用设计 随机访问大数据表 高速缓冲器击中分布的不均衡
Oracle数据库内存优化操作说明

Oracle数据库内存优化操作说明Oracle数据库内存优化是提高数据库性能的重要手段之一。
通过设置合理的内存参数,可以有效地削减IO操作,提高数据访问速度。
本文将介绍一些常见的Oracle数据库内存优化操作。
一、调整PGA参数PGA(Program Global Area)是每个数据库会话独有的内存区域,用于存储排序、哈希操作等临时数据。
调整PGA参数可以提高排序和连接操作的性能。
1. 设置PGA_AGGREGATE_TARGET参数该参数把握PGA内存的总量,一般建议设置为SGA的1/3到1/2。
可以通过以下命令设置:ALTER SYSTEM SET PGA_AGGREGATE_TARGET=XXXM;2. 调整SORT_AREA_SIZE参数该参数把握每个排序操作使用的PGA内存大小,一般建议设置为100MB到200MB。
可以通过以下命令设置:ALTER SESSION SET SORT_AREA_SIZE = XXXM;3. 调整HASH_AREA_SIZE参数第1页/共4页该参数把握每个哈希操作使用的PGA内存大小,一般建议设置为SORT_AREA_SIZE的1/2到1倍。
可以通过以下命令设置:ALTER SESSION SET HASH_AREA_SIZE = XXXM;二、调整SGA参数SGA(System Global Area)是Oracle数据库的全局共享内存区域,用于存储缓存数据、SQL执行方案等。
调整SGA参数可以提高数据访问的速度。
1. 调整SHARED_POOL_SIZE参数该参数把握缓存SQL语句的内存大小,一般建议设置为SGA的1/4到1/3。
可以通过以下命令设置:ALTER SYSTEM SET SHARED_POOL_SIZE=XXXM;2. 调整DB_CACHE_SIZE参数该参数把握数据库缓冲区的内存大小,一般建议设置为SGA的1/2到2/3。
可以通过以下命令设置:ALTER SYSTEM SET DB_CACHE_SIZE=XXXM;3. 调整LOG_BUFFER参数该参数把握数据库日志缓冲区的内存大小,一般建议设置为10MB到100MB。
Oracle数据库内存优化操作说明

千里之行,始于足下。
Oracle数据库内存优化操作说明Oracle数据库的内存优化操作主要包括以下几个方面:1. 调整SGA和PGA的大小:- SGA(System Global Area)是Oracle数据库实例使用的内存区域,包括数据库缓存、共享池等。
可以通过修改SGA_TARGET和SGA_MAX_SIZE等参数来调整SGA的大小。
- PGA(Program Global Area)是每个进程独自使用的内存区域,包括排序区、hash区等。
可以通过修改PGA_AGGREGATE_TARGET参数来调整PGA的大小。
2. 合理配置各个内存区域的大小:- 根据具体的数据库负载情况,可以调整SGA组件的大小,如缓冲区大小、共享池大小等,以提高数据库的性能。
- 合理配置PGA区域的大小,可以减少排序操作的磁盘访问,提高查询效率。
3. 使用自动内存管理 AMM(Automatic Memory Management):- AMM是Oracle 11g及以上版本中提供的内存管理特性,可以自动分配SGA和PGA的大小。
可以通过设置MEMORY_TARGET参数来启用AMM。
4. 使用自动PGA管理:- Oracle 12c及以上版本中提供了自动PGA管理特性,可以根据需要自动调整PGA的大小。
可以通过设置PGA_AGGREGATE_TARGET参数来启用自动PGA管理。
5. 合理配置数据库连接池:第1页/共2页锲而不舍,金石可镂。
- 如果数据库中有大量的并发连接,可以考虑启用连接池来管理连接,减少连接的开销,提高数据库的并发性能。
6. 合理配置数据库缓存:- Oracle数据库中有多个缓存区域,如数据缓存、共享池等,可以根据具体的负载情况,调整缓存的大小,以提高查询性能。
需要注意的是,内存优化操作可能会引起数据库的性能变化,因此在进行内存优化之前,最好先进行充分的测试和评估,以确保优化操作是必要且有效的。
Oracle 性能调整内存篇PPT课件

(SELECT value FROM V$PARAMETER WHERE name = 'db_block_size') AND advice_status = 'ON';
➢ 系统全局区
数据缓冲区 共享池 日志缓冲区
➢ 程序全局区
PGA UGA
内存优化
内存最基本的优化方法
➢ 增加内存的大小
增加内存是最简单的优化方法 增加内存不是万金油 增加内存到足够大,内存对性能的增益不是线性递增的
➢ 内存增加到多大合适?
增加到性能增益曲线的拐点或者平滑点 平衡性能和资源的需求 两种方法判断内存大小:
12582912 .5 631649280 3530752 99
3
18874368 .75 631649280
0
100
2
25165824
1 631649280
Oracle 性能调整
Oracle内存优化
Server process
PGA
Shared Pool
Library Cache
Data Dictionary Cache
SGA
Database Buffer Cache
Redo Log Buffer
Stream pool
Large Pool
Java Pool
1Hale Waihona Puke 397263961.2
20
4389 5961
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ABC公司Oracle数据库参数调整建议1.Oracle参数initdb.ora (修改建议)目前系统现在分析:(1)Windows 2003可以显示50G内存,但操作系统是32位,最多默认支持4G,用户进程支持2G,Oracle可能支持1.7G内存;(2)不清楚是否对操作系统做过支持大内存的调整;从下表的参数分析,可能没有修改;(3)不清楚此系统Windows是否允许在虚拟环境(Virtual Machine),故保守起见,我们的建议是:把内存往小里调整。
根据我们的经验,对Oracle数据库调整如下:总内存控制在1.5GSGA控制在800MPGA使用700Mtestdb.__db_cache_size=469762048testdb.__java_pool_size=8388608testdb.__large_pool_size=8388608testdb.__oracle_base='D:\app\Administrator'#ORACLE_BASE set from environment testdb.__pga_aggregate_target= 734003200 #700M #671088640testdb.__sga_target=838860800 #800M #1249902592testdb.__shared_io_pool_size=0testdb.__shared_pool_size= 335544320 #320M #738197504testdb.__streams_pool_size=8388608*.audit_file_dest='D:\app\Administrator\admin\xbrldb\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'*.control_files='E:\data\xbrldb\control01.ctl','D:\app\Administrator\flash_recovery_ area\xbrldb\control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='xbrldb'*.db_recovery_file_dest='D:\app\Administrator\flash_recovery_area'*.db_recovery_file_dest_size=21474836480*.diagnostic_dest='D:\app\Administrator'*.dispatchers='(PROTOCOL=TCP) (SERVICE=xbrldbXDB)'*.fast_start_mttr_target=30*.job_queue_processes=1000testdb.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(H OST=10.24.58.100)(PORT=1531))))'*.log_archive_format='ARC%S_%R.%T'*.memory_target= 1610612736 #1.5G#1916796928*.nls_language='SIMPLIFIED CHINESE'*.nls_territory='CHINA'*.open_cursors=300*.processes=1500*.remote_login_passwordfile='EXCLUSIVE'*.sessions=1655*.sga_max_size=838860800 #800M 1258291200*.undo_tablespace='UNDOTBS1'2.Wind ows内存调整参考资料2.1.Windows 2003支持大内存先要开启PAE功能,方法如下:打开Boot.ini 文件,然后将/PAE 参数添加到boot.ini中,如以下所示:multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /PAE如果CPU、主板、操作系统都支持并启用PAE(物理地址扩展),那么此时的物理内存地址总线就是36位。
2^36 = 68719476736 = 64 GB另外,当前的x64并非真正使用64位的地址总线,而是48位,所以内存上限是2^48。
所以,现在的32位系统并非纯正的“32位”;x64并非纯正的"64位"。
为什么Windows 2003 32位版本最高可以支持128GB内存?自P4、K8以后的32位CPU,物理地址地址都是40位,所以可以支持128GB。
另外windows2003的版本也对此有影响:Windows Server 2003 Web Edition 32位版最大能支援2G的RAM,Windows Server 2003 Standard Edition 32位版最大能支援4G的RAM,Windows Server 2003 Enterprise Edition 32位版最大能支援32G的RAM, Windows Server 2003 Datacenter Edition 32位版最大能支援512G的RAM远景上还有一个很详细的讨论贴:/thread-456977-1-1.html2.2.32位Windows上扩展Oracle SGA使用大内存/2010/04/32位windows上扩展oracle-sga使用大内存/默认情况下32位系统最大只能访问4G的内存,用户进程最多访问2G的内存空间,系统内核保留2G的内存空间。
如果想增加用户进程访问的内存空间,那么需要修改windows 的启动参数boot.ini,在boot.ini文件中增加/3G的开关. [operating systems]multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise"/fastdetect /3G这样可以扩展用户进程访问多达3G的内存空间,系统内核保留1G的内存空间。
/3G只是给用户进程增加了1G的内存空间,但是我们使用的内存还是限制在4G 以内。
针对上面的情况我们可以通过PAE(物理地址扩展,Inter发明)技术让操作系统使用理论上多大64G的内存,大约我们都知道32位的应用最多能识别4G 的内存,要访问大于4G的内存,除了操作系统可以识别访问大于4G的内存外,应用软件也要支持访问大于4G的功能。
支持PAE的Windows操作系统有:Microsoft Windows Server 2003 Enterprise EditionMicrosoft Windows Server 2003 Datacenter EditionMicrosoft Windows 2000 Advanced ServerMicrosoft Windows 2000 Datacenter Server支持PAE技术的Oracle版本:Oracle 9.2.xOracle 10.1.xOracle 10.2.xOracle 11.1.xOracle 11.2.xWindows上启用PAE在Windows上启用PAE,/3G和/PAE可以同时使用,如果同时使用这两个参数,那么操作系统最能只能使用16G的内存。
有关Windows PAE相关知识可以参考下面的连接:/kb/283037/zh-cn/whdc/system/platform/server/PAE/pae_os.mspx [operating systems]multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE[operating systems]multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3G /PAE除了配置/PAE之外,启动OracleServiceSID(SID代表实际的数据库实例)的服务还必须有”Lock Pages In Memory”系统权限,这个权限默认属于LocalSystem用户。
一般Oracle的服务都用这个服务启动,如果不是,则可以修改启动服务的账户为LocalSystem用户。
Oracle中使用PAE在介绍Oracle使用PAE之前,首先必选先引入一概念。
AWE:地址窗口扩展,地址窗口扩展到意思是在普通的用户进程空间内划分一快区域,这里的普通用户进程空间指导前面的2G或3G(启用/3G后)的内存空间。
通过参数AWE_WINDOW_MEMORY定义这个区域大小,默认为1G,这个区域其实是一个指针窗口,这个指针窗口指向大于4G物理内存之外的某个物理地址范围。
Oracle 在访问扩展到物理内存时,首先必须将要访问的数据映射到AWE区域,然后在AWE区域中操作这些数据块。
以此循环。
其实Oracle就是通过AWE间接的访问大于4G的物理内存,并不是Oracle的进程直接操作大于4G的物理内存。
Oracle SGA中只有数据库缓冲区可以使用这一扩展内存空间。
其他的SGA组件都必须在2G/3G的内存空间内定义。
默认情况下AWE_WINDOW_MEMORY=min(4096*DB_BLOCK_SIZE*8*2*CPU_COUNT)/8 + (awe_window_memory * 10%)。
可以通过编辑windows注册表来定义HKLM\Software\Oracle\Home0\AWE_WINDOW_MEMORY 默认为1G并且AWE不支持db_cache_size、ASMM(自动共享内存管理)、AMM(自动内存管理)技术,用db_blocks_buffer的形式使用扩站内存,定义db_blocks_buffer前,首先定义use_indirect_data_buffers=true.操作前搞清楚如何分配内存空间:3G内存空间内包括以下Oracle组件:PGA、UGAshared_pool_size、java_pool_size、large_pool_size、log_buffer_size、streams_pool_sizeAWE_WINDOW_MEMORY所有线程的堆栈空间怎样定义各个内存的大小,需要DBA仔细斟酌。