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数据库内存优化是提高数据库性能的重要手段之一。
通过设置合理的内存参数,可以有效地削减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数据库参数优化

千里之行,始于足下。
Oracle数据库参数优化Oracle数据库参数优化是指通过调整数据库的配置参数,提高数据库的性能和稳定性。
下面是一些常见的Oracle数据库参数优化技巧:1. SGA参数优化:- 调整sga_target参数以控制SGA的大小。
SGA包括数据库缓冲区、共享池、重做日志缓冲区等,适当调整SGA的大小可以减少IO操作,提高数据库性能。
- 调整db_cache_size参数以增大数据库缓冲区的大小,提高数据块的访问速度。
- 调整shared_pool_size参数以增大共享池的大小,提高SQL语句的解析和执行效率。
2. PGA参数优化:- 调整pga_aggregate_target参数以控制PGA的大小。
PGA是用于处理SQL查询和排序的内存区域,适当调整PGA的大小可以减少磁盘IO操作,提高查询和排序的性能。
3. Redo日志参数优化:- 调整log_buffer参数以增大重做日志缓冲区的大小,减少频繁的重做日志刷新操作,提高数据库的写入性能。
- 调整log_checkpoint_timeout参数以控制重做日志刷新的频率,避免过于频繁的刷新。
4. 并行处理参数优化:- 调整parallel_max_servers参数以增大并行处理的资源限制,提高并行查询和并行DML操作的性能。
第1页/共2页锲而不舍,金石可镂。
- 调整parallel_min_servers参数以设置最小的并行处理资源数,避免并行操作的启动延迟。
5. SQL优化:- 使用合适的索引和优化的SQL语句,优化查询的执行计划。
- 使用绑定变量而不是直接将参数传递到SQL语句中,避免SQL重解析,提高性能。
6. 服务器参数优化:- 调整processes参数以增加数据库的并发连接数。
- 调整sessions参数以控制数据库的最大会话数。
- 调整open_cursors参数以增大打开游标的数量,避免游标溢出。
以上是一些常见的Oracle数据库参数优化技巧,但具体的优化策略需要根据实际情况进行调整,可以参考Oracle官方文档和专业的DBA建议。
Oracle数据库优化思路

Oracle数据库优化思路在当今大数据时代,数据库优化不仅对于企业的运营重要,也对提升用户体验和系统性能至关重要。
Oracle数据库作为一款功能强大的关系型数据库管理系统,提供了多种优化手段和策略,以下是一些Oracle数据库优化的思路。
一、合理的物理设计1. 表和索引的设计:合理设计数据库表结构,使用恰当的数据类型和长度,将字段划分为彼此独立的表,避免数据冗余和重复。
同时,使用适当的索引来加快查询速度,避免全表扫描。
2. 磁盘和文件组织:通过合理配置数据文件和表空间,将热点数据分散在不同的磁盘上,并进行良好的分区设计,以提高数据的存取效率。
3. 存储参数的调整:根据实际需求和硬件资源,调整数据库的存储参数,包括块大小、缓冲区大小、日志文件大小等,以最大限度地减少I/O操作,提高数据库性能。
二、查询优化1. SQL语句的优化:优化复杂查询和连接查询,避免使用SELECT *,只选取需要的字段;使用合适的查询条件和索引,避免全表扫描;避免使用嵌套子查询,使用EXISTS或IN等更高效的方式。
2. 统计信息的收集:定期收集并更新表和索引的统计信息,让优化器能够生成更优化的执行计划,提高查询性能。
3. 使用HINT来指导优化器:当优化器的自动选择不符合实际情况时,可以使用HINT来指导优化器选择更优化的执行计划。
三、索引优化1. 合理创建和使用索引:根据查询的特点和频率,创建合适的索引,以加快查询速度。
但索引的创建也需要权衡考虑,过多或者不合理的索引可能会导致更新和插入操作变慢。
2. 对索引进行监控和调整:定期检查数据库的索引使用情况和性能,通过索引重建或删除来优化索引的使用效果。
四、内存管理与性能优化1. SGA和PGA的调整:对于大型数据库,适当调整共享内存区域(SGA)和私有内存区域(PGA)的大小,以提高内存使用效率,减少I/O操作。
2. 合理设置数据库缓存:合理设置数据库缓存区域,包括数据缓冲区、重做日志缓冲区和共享池等,以减少磁盘I/O操作,提高数据库的性能。
Oracle性能调优——基本参数调整

Oracle性能调整(一)——基本参数调整一、操作系统参数交换区是Oracle的一项基本的要求。
可以根据Oracle的发行要求来确定。
一般交换区大小的要求是该服务器内存的2倍至4倍之间,建议是内存的4倍Note2:oracle 文件设置当服务器平台已完成操作系统的安装后,就应该开始认真的考虑下面的问题:A、是否采用裸设备实际应用的生产系统基本都是采用裸设备,使用裸设备对于读写频繁的数据库应用来说,可以极大地提高数据库系统的性能。
B、安装点的考虑Oracle的安装点就是指数据文件、日志文件和控制文件的安置路径,为了使系统在以后运行性能达到优化,建议将数据文件、日志文件和控制文件的安置路径与数据库系统存放在不同的路径上。
最好将数据文件、日志文件和控制文件分别存放在不同的路径。
C、SYSTEM表空间对应数据文件在自定义安装会话中,建议你根据需要设置system表空间所对应的数据文件的大小。
一般要设置比默认值的2倍。
该数据文件的大小最好是在300MB至500MB间。
因为数据文件太小不利于系统的运行。
D、临时表空间对应的数据文件临时表空间对应的数据文件可以根据将来系统存放的应用的处理情况来定。
比如系统将来可能要经常进程排序处理,则需要设置较大的临时表空间,也可能需要再建立新的临时表空间。
这里建议临时表空间的数据文件在100MB至300MB左右。
E、回滚段表空间对应的数据文件回滚表空间都是系统管理,初始值也是根据系统事务量预估计的值,实际到运行阶段如果系统常出现ORA-01555错误的时候,可能就需要增加回滚表空间的大小。
F、日志文件的大小日志文件的大小对于Oracle系统的运行也是相当重要。
默认值是太小。
实际根据事务繁忙预估计日志大小,没有固定的具体值范围,建议重做日志切换时间不能过短也不能过长,一般在20-40分钟左右。
该参数可以在系统运行期间根据数据库系统日志切换时间重新调整,控制文件的大小。
G、数据库块的大小如果你的应用系统是OLTP的话,可以采用较小的数据库块。
Oracle性能调优

千里之行,始于足下。
Oracle性能调优
Oracle性能调优是指通过对数据库系统进行各种配置和优化,以提升数据库的响应速度、并发能力和稳定性,以满足用户的需求。
以下是一些常见的Oracle性能调优技巧:
1. 硬件配置:增加服务器的内存、CPU和磁盘等硬件资源,以提高数据库的整体性能。
2. SQL优化:通过检查和优化SQL语句,去除不必要的查询、索引不匹配等问题,以提高查询性能。
3. 索引优化:根据实际查询访问模式,设计合适的索引并定期进行重建和维护,以加快查询速度。
4. 数据库参数优化:调整Oracle数据库的各项参数,如SGA、PGA、缓冲池等,以提升数据库的性能。
5. 分区表和分区索引:将大表分割为多个小表,并使用分区索引来提高查询效率和维护性能。
6. 批处理操作:对于大批量的数据操作,尽量使用批处理操作,减少物理I/O次数,提高处理效率。
7. 数据库统计信息收集:定期收集和更新表的统计信息,以便查询优化器做出更准确的查询计划。
第1页/共2页
锲而不舍,金石可镂。
8. 资源管理:合理配置Oracle数据库的资源管理策略,如设置合适的连接数、并行度等,以实现最大化的利用率。
9. 数据库分析工具:使用各种数据库性能监控和分析工具,如AWR报告、SQL Trace等,来定位和解决性能瓶颈问题。
总结来说,Oracle性能调优是一个持续优化的过程,需要不断地监测、分析、调整和测试,以实现最佳的数据库性能。
同时,在调优过程中需根据具体情况进行有针对性的优化措施,以达到最好的性能效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(续)
• BUFFER CACHE的命中率高,并不意味着数据库性能良好。 执行计划出错时,逻辑读高,但效率低下 “热”块争用时,逻辑读低,但效率低下
Flash cache特性
Buffer Cache种类
• Default buffer cache:数据块的默认缓冲池,与db_block_size参数有关 • Keep buffer cache:缓存热块 • Recycle buffer cache:缓存冷块
• 内存碎片化:
(续)
• 分割连续的内存导致的内存碎片(chunk大小不一致),如下图:
注意:
1 同一个BUCKET中的chunk不严格排序 2 内存碎片是不可避免的,相邻的碎片会定时合并
(续)
Oracle DBA 实战攻略
Oracle内存调优及优化思路
Oracle本质上是一个软件
• Oracle停止当前版本支持时间
Oracle体系结构
Oracle实例组成
Oracle连接过程
监听Байду номын сангаас作用
• 监听是连接客户端和Oracle数据库的“桥梁”,远程客户端进程只有 通过服务端的监听认证、转发才能连接到数据库。
• 数据库(数据文件)存放在磁盘中,buffer cache作为数据库的缓存 • 可以缓存不同大小的数据块,总体使用LRU算法为主淘汰无用的数据块 • 数据块的并发性访问受Latch保护
提示:多重缓存不仅带来浪费内存,而且会带来额外的开销,如内核调 用。所以我们建议使用裸设备、ASM存放数据文件。一般可以提高5% 左右的读取性能。
Buffer Cache的使用进程
• 前台进程:从磁盘中读数据块至buffer cache中 • DBWR进程:从buffer cache写数据块至磁盘中
提示:前台进程和DBWR进程可以有多个,严格来讲,同一时刻 只能由一个进程更改数据块(可以有多个进程读取数据块),所 以Buffer Cache中需要有latch来保护并发性访问数据块
谈谈BUFFER CACHE的命中率
• 从BUFFER CACHE中读取数据块一般需耗时100ns • 从磁盘读取数据块一般需耗时10ms左右(假设缓存没有命中),
所以我们一般建议数据块从buffer cache中读取。
(续)
• 问题:Buffer Cache的命中率越高越好?
BUFFER CACHE的命中率并不是越高越好,避免无效的数据 块读取才是数据库优化之根本
BUFFER CACHE中数据块争用的优化思路
• 重新设计应用 • 让数据块中的数据尽可能地分散 使用不同块大小的数据块 修改数据块PCTFREE参数 表中添加固定大小的列,增加冗余数据 使用HASH分区表和HASH 簇表 使用反转键索引(REVERSE INDEX) 增大BUFFER CACHE 合理使用KEEP POOL和RECYCLE POOL 使用ASSM(自动段空间管理) 加大数据块INTRANS参数
提示:Log Buffer不能实现在线动态调整
(续)
• SGA的组成:
SGA的一些重要属性
• 在Unix/Linux系统中,可以通过ipcs命令可以在操作系统级别观察共 享内存段
• 是数据库实例的重要组成部分,正常访问表数据的通道 • 属于计算性内存 • 内存碎片 • 内存交换
Buffer Cache的作用
续:
注意: 监听和实例是多对多的关系。一个监听可以服务于多个实例。重启主
机前一定要检查主机上是否运行着多少个监听。 监听串行处理客户端连接的会话。 监听的认证和转发只作用于会话连接的一瞬间。 监听的启停与关闭对已连接的会话不受影响。
Oracle内存组成
Oracle’s memory structure consists of two memory areas known as: • System Global Area (SGA): Allocated at instance startup, and is a
– Library cache – Data dictionary cache
• Sized by the parameter • SHARED_POOL_SIZE.
Shared pool
Library cache
Data dictionary cache
ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
提示:BUFFER CACHE中没有内存碎片这一说法
ALTER SYSTEM SET DB_CACHE_SIZE = 9600M;
BUFFER CACHE内存不足的优化思路
• 加大buffer cache内存 • 调整糟糕的SQL语句写法或执行计划 • DBWR进程数不足或者存储性能缓慢
提示:适当加大buffer cache内存是没有坏处的
(续)
• 使用直接路径读写(DIRECT PATH I/O) • CPU紧张的系统中,适当减小BUFFER CACHE • RAC系统中,提高本地节点的BUFFER CACHE命中率 • CPU、内存资源充足的情况下,增加buffer cache容量没有坏处
,但前提是不要产生换页
Shared Pool
fundamental component of an Oracle Instance • Program Global Area (PGA): Allocated when the server process is
started
SGA组成
• Buffer Cache:主要缓存数据块 • Shared Pool:缓存Cursor相关的信息和数据字典 • Log Buffer:缓存重做日志条目
The shared pool is used to store the most recently executed SQL statements and the most recently used data definitions.
• It consists of two key performance-related memory structures: