ORACLE Buffer cache的调整与优化

合集下载

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内存分配和调优总结⼀直都想总结⼀下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数据库内存优化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的内存优化

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
使用高速缓冲器击中率指南
击中率的值依赖于数据的访问方法: 全表浏览 数据和应用设计 随机访问大数据表 高速缓冲器击中分布的不均衡

OCP知识点讲解 之 什么是Buffer Cache?

OCP知识点讲解 之 什么是Buffer Cache?

一、Buffer cache作用:Buffer cache是Oracle建立的数据文件的缓冲区。

Oracle中所有Select、DML、DDL等命令,凡是需要所有对数据文件进行读、写操作的,基本上都是对Buffer cache 进行读、写操作。

如果需要读或写的块没有包括在Buffer cache,Oracle会先把它读进Buffer cache中,再进行读、写。

通常,如果要读的块已经在Buffer cache中了,Oracle将不必再访问磁盘数据文件,这个读操作被称为逻辑读。

也就是没有真正读写磁盘的意思。

如果要读的块不在Buffer cache,那么Oracle必须到磁盘上将其调入Buffer cache 中,这个操作被称为物理读。

再将块物理读进Buffer cache后,Oracle再从Buffer cache中逻辑读取需要的数据。

二、Buffer cache大小的设置:在Oracle 10g中,非常简单,我们不必设置Buffer cache的大小,只需设置一个sga_target参数,SGA目标值,10g将会根据你的数据库的情况,自动调整共享池、Buffer cache池等等所有SGA中内存组件的大小。

db_cache_size参数是设置Buffer cache大小的,和共享池一样,在Oracle 10g中,它也只是个下限值。

Buffer cache是磁盘数据文件的缓存,数据文件的基本读写单位是Oracle数据块,最常的块大小是4KB、8KB、16KB等等,在我们的实例库,数据库块大小是8KB。

也就是说Oracle一次读写将从数据文件中读写8KB字节。

Buffer cache既然是数据文件的直接缓存,Buffer cache的内存块大小当然也是8KB了。

Oracle从9i之后开始支持多重块大小,你在创建数据库时设置的块大小被称为标准块大小,除了标准块大小外,我们还可以使用多个非标准的块大小。

Oracle 性能调整内存篇PPT课件

Oracle 性能调整内存篇PPT课件
estd_physical_read_factor, estd_physical_reads FROM V$DB_CACHE_ADVICE WHERE name = 'DEFAULT' AND block_size =
(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

Oracle性能优化10大要点

Oracle性能优化10大要点

oracle性能调整的十大要点一、SGA1、Shared pool tunningShared pool的优化应该放在优先考虑,因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高,由于dictionary数据一般比library cache中的数据在内存中保存的时间长,所以关键是library cache的优化。

Gets:(parse)在namespace中查找对象的次数;Pins:(execution)在namespace中读取或执行对象的次数;Reloads:(reparse)在执行阶段library cache misses的次数,导致sql需要重新解析。

1)检查v$librarycache中sql area的gethitratio是否超过90%,如果未超过90%,应该检查应用代码,提高应用代码的效率。

Select gethitratio from v$librarycache where namespace=’sql area’;2) v$librarycache中reloads/pins的比率应该小于1%,如果大于1%,应该增加参数shared_pool_size的值。

Select sum(pins) “executions”,sum(reloads) “cache misses”,sum(reloads)/sum(pins) from v$librarycache;reloads/pins>1%有两种可能,一种是library cache空间不足,一种是sql中引用的对象不合法。

3)shared pool reserved size一般是shared pool size的10%,不能超过50%。

V$shared_pool_reserved中的request misses=0或没有持续增长,或者free_memory大于shared pool reserved size的50%,表明shared pool reserved size过大,可以压缩。

Oracle性能调优——基本参数调整

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数据库参数优化和调整参数主要有以下内容:(1)优化初始参数(2)优化内存(3)优化I/O(4)优化资源争用(5)其它参数优化可变参数的优化参数按其作用可以分为两大类,一大类是起限制作用的,如OPEN_CURSORS;另一大类是影响系统性能的,如DB_BLOCK_BUFFERS。

在进行数据库系统性能优化时,需要熟练掌握和了解一些可变参数。

本文讨论了一些对系统性能有较大影响的参数。

限制类可变参数(1)DML_LOCKS该参数表明多少个用户,可同时能修改多少张表。

例如:有三个用户同时修改二张表,则要求表上的总数为6。

若置为0,则组织队列不起作用,其性能会稍有提高。

使用该参数时不能用DROP TABLE、CREATE INDEX或显式封锁。

(2)LICENSE_MAX_SESSION该参数指出允许并发用户会话的最大数。

若此参数为0,则不能实施并发。

若并发的用户会话数已达到此极限,则只有具有RESTRICTED SESSION权限的用户才能连接到服务器。

(3)LICENSE_MAX_USERS该参数指出在一个数据库上可建立的最大用户数。

当达到最大值时,便不能再建新用户,可改变此值以放松限制。

在LICENSE_MAX_SESSION 或LICENSE_MAX_USER为0时,则并发会话或任何用户都不能用。

若对不同的实例,此参数不同时,则以第一个登录的数据库实例的参数为准。

(4)MAX_DUMP_FILE_SIZE该参数指定操作系统中写跟踪文件的块的最大值。

可用此值来限制跟踪文件的空间。

(5)OPEN_CURSORS该参数指明一个用户进程能同时打开光标的最大数,它能限制每个用户进程占用的内存空间量。

(6)OPEN_LINKS该参数指定并发连接到远程数据库的最大用户进程数。

若同时引用多个数据库,则应该增大该值。

例如:同时交替访问A、B和C三个数据库时,若OPEN_LINKS设置为2,则需花费等待连接时间。

Oracle内存参数调优设置

Oracle内存参数调优设置

Oracle内存参数调优设置Oracle 数据库系统中起到调节作⽤的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些初始化参数以优化Oracle系统。

1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Oracle 实例= 内存结构 + 进程结构 内存结构 = SGA + PGA SGA(系统全局区):⽤户存储数据库信息的内存区,该区域为数据库进程所共享。

它包含服务器的数据和控制信息,主要包含⾼速数据缓冲区、共享池、重做⽇志缓存区、Java池,⼤型池等内存结构。

SGA的设置,理论上SGA的⼤⼩应该占OS的内存的 1/3-1/2左右。

SGA + PGA + OS使⽤的内存 < 总的物理内存 查看当前系统SGA的信息select name,bytes/1024/1024 as "Size(M)"from v$sgainfo; 根据查询信息显⽰当前还有148M可⽤的SGA内存,系统当前的内存配置并不是最优的,我们在实际使⽤过程中根据情况可以重新分配内存。

2.2 SGA的设置原则 SGA = (db_block_buffers * db_block_size) + (shared_pool_size + large_pool_size + java_pool_size + log_buffers) (1)缓冲区⾼速缓存(database_buffer_cache):主要存储由磁盘数据⽂件写⼊的数据 ⼤⼩:db_block_buffers * db_block_size分配原则:缓冲区⾼速缓存的调整,⽤户进程所存取的所有数据都是经过缓冲区⾼速缓存来存取,所以该部分的命中率,对性能⾄关重要。

缓冲区⾼速缓存的使⽤情况记录在动态性能表v$sysstat中,可通过查询该表来了解其活动情况,以决定如何调整。

select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数。

ORACLE Buffer cache 的调整与优化

ORACLE Buffer cache 的调整与优化

--==============================-- Buffer cache 的调整与优化(一)--==============================Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能。

当Buffer Cache过小的时候,将会造成更多的free buffer waits事件。

下面将具体描述Buffer Cache的作用,调整与优化。

一、SGA的所有组件从动态视图v$sga_dynamic_components获取SGA的相关信息SELECT component, current_size, min_size FROM v$sga_dynamic_components;COMPONENT CURRENT_SIZE MIN_SIZE------------------------- ------------ ----------shared pool 71303168 71303168large pool 4194304 4194304java pool 4194304 4194304streams pool 4194304 4194304DEFAULT buffer cache 113246208 113246208KEEP buffer cache 0 0RECYCLE buffer cache 0 0DEFAULT 2K buffer cache 0 0DEFAULT 4K buffer cache 0 0DEFAULT 8K buffer cache 0 0DEFAULT 16K buffer cache 0 0DEFAULT 32K buffer cache 0 0ASM Buffer Cache 0 0二、Buffer cache介绍1.Buffer cache的类型通常包括default buffer cachekeep buffer cacherecycle buffer cachenk buffer caches与Buffer cache打交道的后台进程为DBWn,与之对应的数据文件通常位于system 表空间,sysaux表空间,undo表空间,datafile 等Buffer cache是SGA的一部分,其内容是由用户进程从数据文件读取出来的数据块,并且所有的用户共享这些数据块。

Oracle性能调整与优化精品文档

Oracle性能调整与优化精品文档

TABLESPACE_NAME SYSTEM TOOLS TEMP USERS
EXTENT_MAN DICTIONARY LOCAL LOCAL LOCAL
ALLOCATIO USER UNIFORM UNIFORM UNIFORM
SUPPORT SERVICES
2.4 使用分区表避免磁盘争用
Create table dept
PHYRDS
48,310 34,520 35,189 1,320 1,454
PHYWRTS
51,798 40,224 36,904 11,725
10
READTIM
200,564 117,925 97,474
1,214 10
WRITEIM
903,199 611,121 401,290
39,892 956
2.1 使用磁盘阵列
2.1.1 可用的RAID级别
RAID0: 允许自动磁盘分段(STRIPING).表空间所对应的数据文件 可扩展到多个磁盘,并可同时对其进行访问(节省大量I/O).
RAID1: 主要想得到更高的可用性. RAID5: 有大量 读操作的系统可获得最大性能.
有大量写操作的系统,其效率并不高. RAID1+0: 支持镜像的磁盘和分段.
1-3磁盘经常被使用,4-5使用较少,因此须移动数据文件或使用分区以均衡I/O.
SUPPORT SERVICES
2.3通过移动数据文件来均衡I/O
(1) 使与数据文件有关的表空间脱机
(2)
ALTER TABLESPACE ORDERS OFFLINE;
(3) (2) 把数据文件复制到磁盘的新位置上
SUPPORT SERVICES

Oracle数据库的优化与调整

Oracle数据库的优化与调整

0
TRIGGER 1852 1844 0 0
Library cache命中率计算
• Library Cache Hit Ratio = sum(pinhits) / sum(pins)
• 上例中结果为.999466248
使用V$SHARED_POOL_ADVICE视图判 定共享池的调整量
视图主要各列意义:
• 例如:SET TRANSACTION USE ROLLBACK SEGMENT oltp_13
• Oracle对于大规模SQL语句自动扩展回 滚段,但这样显然会影响性能,正确 的做法是实现分配好适宜的回滚段。
CPU的调整
• 效劳器良好的工作状态表现为在工作顶峰时 CPU的使用率高于90%。如果空闲时间CPU使 用率就在90%以上,说明效劳器缺乏CPU资源
日志缓冲区
LGWR进程在下述情况下将日志缓冲区 写入日志文件: 日志缓冲区1/3的时候 用户commit或者rollback的时候 DBWR进展写数据文件的时候
日志缓冲区的调整方法1
• 查看V$SYSSTAT视图: SELECT name, value FROM v$sysstat WHERE name = 'redo buffer allocation retries';
reads’,’physical reads’,’physical reads direct’,’physical reads direct (lob)’)
• 查询结果为 NAME VALUE ------------ ---------session logical reads 464905358 physical reads 10380487 physical reads direct 86850 physical reads direct (lob) 0

Oracle数据库的性能调整与优化方式探析_存储_基础信息化_410

Oracle数据库的性能调整与优化方式探析_存储_基础信息化_410
在实际应用中,常常会碰着Oracle数据库性能恶化的问题,目前,性能恶化的要紧表现是系统响应时刻较长,需要用户长时刻的等待。而性能恶化的缘故是多种多样的,要紧包括数据库运行环境恶化、数据库参数设定不妥和数据库应用不够优化三个方面,这就需要数据库治理员有比较全面的运算机知识,能够灵敏地觉察到阻碍数据库性能的要紧缘故,并及时解决问题。
8)尽可能少利用“distinct”
9) “where”子句中尽最不利用转换函数;
10)在可能的情形下,尽可能利用读操作而不是加锁
11)幸免利用逻辑操作符“or”;
12)幸免利用“!=”或“=”如此的操作符,因为这会使系统无法利用索引;
13)关于大数据量的求和,应幸免利用单一的"sum”命令,可人为将数据分组,利用“group by”语句同“sum”命令一路利用。
4. 2 SQL语句优化
SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用。SQL语句消耗了70%-90%的数据库资源。SQL语句的优化是将性能低下的SQL语句转换成为目的相同的、性能优良的SQL语句。SQL语句的编写和优化应该遵循以下原那么:
1)尽可能地幸免扫描整个表;
2)减少查询规那么数;
TARGET的益处确实是:可设定用户会话的总内存利用量来减少分页。PGA_ AGGREGATETARGET参数应该被设定成能维持ESTD_ PGACACH几HITPERCENTAGE大于95%的值,如此能够产生95%乃至更高的缓存命中率。
3)DB_ GASHE_ SIZE的设置。DB_ GASHE_SIZE是Oracle最关键的参数,它设定了用来存储和处置内存中数据的SGA区域的大小。DBCASH几SIZE是可用来调整数据库缓存命中率的重要参数,命中率确实是指那些不用从硬盘上物理读操作的数据库块的访问比例。关于那些事务处置系统来讲,数据缓存命中率通常都应该在95%以上,假设是命中率低于95%,通常就必需增大DB_CASHE_SIZE。

Oracle系统参数调整和优化原则(精)

Oracle系统参数调整和优化原则(精)

Oracle 系统参数调整和优化原则(来自时代朝阳数据库技术中心)粗略来讲,系统调整一般反映在下列方面:∙Shared Pool and Library Cache Performance Tuning(共享池和Library Cache):Oracle将SQL语句、存储包、对象信息和很多其他的项目保存在SGA中一个叫共享池(shared pool)的地方。

这个可共享的区域由一个成熟的高速缓存和堆管理器管理。

它有3个基本的问题要克服:o内存分配的单元不是个常量。

从池中分配的内存单元可能是从几个字节到几千个字节。

o在用户完成工作时,不是所有的内存都能够释放出来,因为共享池的目标是使信息最大程度的共享。

o没有一个象其他常规的高速缓存的文件做后备的存储那样磁盘空间供整页的导出。

只有可重新创建的信息可以从Cache中丢弃,在他被再次需要的时候再重新创建。

共享池调整的技巧有:o刷(Flush)共享池可以使小块的内存合并为大块的内存。

当共享池的碎片过多时,这能够暂时恢复性能。

刷共享池可以使用语句:alter system flush shared_pool;o注意执行这个语句将会造成性能的暂时尖峰,因为对象都要重新加载。

所以应当在数据库的负载不是很大的情况下进行。

o确保联机事务处理(OLTP)应用使用绑定变量(bind variables). 这一点对于决策支持系统(DSS)并不重要。

o确保library cache 的命中率> 95%o增大共享池并不总能解决命中率过多的问题。

∙Buffer Cache Performance Tuning(数据库缓存调整):数据库缓存保持了从磁盘上读去的数据块的备份。

因为缓存通常受到内存约束的限制,不是磁盘上所有的数据都可以放到缓存里。

当缓存满了的时候,后来的缓存不中使得Oracle 将已经在缓存中的数据写到磁盘上。

后续的对写到磁盘上的数据的访问还会造成缓存不中。

从缓存调整的角度看,应力求避免以下的问题:o'缓存的最近最少使用(LRN)链'('cache buffers LRU chain' )的加锁竞争o'平均写队列'("Average Write Queue" )长度过大o过多时间花在等待‘写完毕等待上’("write complete waits" )o过多时间花在等待‘缓冲释放等待’上("free buffer waits" )∙Latch Contention加锁(插销)竞争:插销加锁是SGA中保护共享数据结构的低层的串行化机制。

buffer-cache深度分析及性能调整

buffer-cache深度分析及性能调整

buffer-cache深度分析及性能调整1. buffer cache的概念用最简单的语言来描述oracle数据库的本质,其实就是能够用磁盘上的一堆文件来存储数据,并提供了各种各样的手段对这些数据进行管理。

作为管理数据的最基本要求就是能够保存和读取磁盘上的文件中的数据。

众所周知,读取磁盘的速度相对来说是非常慢的,而内存相对速度则要快的多。

因此为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。

而oracle对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做buffer cache。

按照oracle官方的说法,buffercache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。

通过初始化参数:buffer_cache_size来指定buffer cache的大小。

oracle实例一旦启动,该区域大小就被分配好了。

buffer cache所能提供的功能主要包括:1)通过缓存数据块,从而减少I/O。

2)通过构造CR块,从而提供读一致性功能。

3)通过提供各种lock、latch机制,从而提供多个进程并发访问同一个数据块的功能。

2.buffer cache的内存结构2.1buffer cache概述oracle内部在实现其管理的过程中,有两个非常有名的名词:链表和hash算法。

链表是一种数据结构,通过将对象串连在一起,从而构成链表结构。

这样,如果要修改、删除、查找某个对象的话,都可以先到链表中去查找,而不必实际的访问物理介质。

oracle中最有名的链表大概就是LRU链表了,我们后面会介绍它。

而hash算法则是为了能够进行快速查找定位所使用一种技术。

所谓hash 算法,就是根据要查找的值,对该值进行一定的hash算法后得出该值所在的索引号,然后进入到该值应该存在的一列数值列表(可以理解为一个二维数组)里,通过该索引号去找它应该属于哪一个列表。

ORACLE缓存性能调整与优化研究

ORACLE缓存性能调整与优化研究
理 ,其 中各个列表上存放 的是 指向具体 的 B u f f e r的指针等信 息 。( i )增大 B u f f e r C a c h e 。使 B u f f e r C a c h e 变的越大 ,缓存 数据 的缓冲区也越大, 得到 的缓存数据就不可能被 L R U列表从 B u f f e r C a c h e中删除掉。B u f f e r C a c h e的命中率也越高。计算 缓冲 区的命 中率 :C a c h e H i t R a t i o = 1 一 ( P H Y s I c A L R E A D s ) / ( D B B L 0 C K G E T S + C 0 N S I S T E N T G E T S ) 数据库缓冲区命中率低 于 7 0 % 或8 O % 时, 可增加数据库缓冲 区以提高系统性能。调整 O r a c l e 初 始 C A C H E S I Z E 化参 数 D B 可 以增 加 数 据 库 缓 冲 区 的 内 存 空 间 。 ( 2 )合理使用多个缓 冲池 。O r a c l e 提供 了将 B u f f e r C a c h e分 解成 3个独立区域的能力,分别 为 D e f a u l t 、K e e p 、R e c y c l e 池 ,提 高 B u f f e r C a c h e 的命中率。避免所有数据库段都争用 D e f a u l t P o o l中的相同 B u f f e r C a c h e缓冲区 。K e e p池的 目的是 在缓冲 区中将信息保存更长的时间, 其方法是保 留缓冲池提供 了一个缓冲 区, 只有被指定给保 留缓冲池 的对象才能删除保存 在这个区域 中的其他对象 。 我们可以将保 留缓冲池用于那些需 要较快响应 时间且不会被经常访 问的表和索引, 这样可提高用 户访 问这些对 象时的性 能。可在建表时就指定将其放 在 K e e p 池中。R e c y c l e 池 的 目的是从缓冲池 中移 出对象 ,其实现方法 是通过提供一个缓冲 区域 , 在这个区域中对象 的保存 时间将很 快到期 。对于经常一 次性读取 时用 的数据,可以将其 存放在 R e c y c l e池中 。K e e p池中数据倾 向于一直保存 ,R e c y c l e池 中 的数据倾 向于即时老化 。为了检索某个特定的数据 , 对 于一些 大规模的表扫描非常普遍 ,正确地设置 R e c y c l e池, 使这些表 在缓冲池 的保存时间很快 到期 , 从而不会造成将一 些很 重要 的 数据从主缓冲池中删除掉。 D e f a u l t 池的 目的是实现保 留缓冲 池和循环缓冲池之外的其他功 能。 未指定存储池的数据会放 到 D e f a u l t池 中。其分配到的内存 空问为 D B C A C H E S I Z E — D B K E E P C A C H E — D B R E C Y C L E C A C H E S I Z E 。 数据库 已经成为人们进 行 数据存储 、数据共享和数据处理以及信息管理 的重要工具 。 三 、结 论 数据库 的性能达到最大化, 应该从操作系统, 数据库结构 , O r a c l e资源配 置,S O L语句等方面对其进行性能调整与优化 。 在实际应用系统 中,操作系统的性 能、服务器硬件 的性 能、数 据 库的设计 ,内存配置 , 应用程 序设计等都影 响数据库运行 的 整体性能,是一个高度可优化的软件产 品。 本文仅从缓存角度 出发分析了操作系统 内存调整对 O ra c l e内存 的影 响;共享池 性能调整优化方法 、数据缓冲区高速缓存性 能调整优化方法 , 需要在 以后的实践中不断应用研究和发展。 参考文献: f 1 ] 郑 煜. 结构化数据异构 同步技 术的研 究【 D】 . 北京林业 大 学, 2 0 1 3 . [ 2 ] 邓 世权 基 于 Me mc a c h e d的告 诉 缓 存 功 能 扩展 研 究 【 D] . 西南交通大学, 2 0 1 2 . 『 3 1 吴洁明, 周锦. 基 于 Or ac l e数据库 S QL查询语句优化规 则的研究r 兀 . 陕西理工 学院 学报, 2 0 1 3 , 8 . [ 4 】 王术海. 基 于 Or a c l e的电信企业数据库平 台性能调优研 究【 D】 . 吉林大学, 2 0 1 2 .
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Buffer cache 的调整与优化-==============================-- Buffer cache 的调整与优化(一)--==============================Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能。

当Buffer Cache过小的时候,将会造成更多的free buffer waits事件。

下面将具体描述Buffer Cache的作用,调整与优化。

一、SGA的所有组件从动态视图v$sga_dynamic_components获取SGA的相关信息SELECT component, current_size, min_size FROM v$sga_dynami c_components;COMPONENT CURRENT_SIZE MIN_SIZE ------------------------- ------------ ----------shared pool 71303168 71303168large pool 4194304 4194304java pool 4194304 4194304streams pool 4194304 4194304DEFAULT buffer cache 113246208 113246208KEEP buffer cache 0 0RECYCLE buffer cache 0 0DEFAULT 2K buffer cache 0 0DEFAULT 4K buffer cache 0 0DEFAULT 8K buffer cache 0 0DEFAULT 16K buffer cache 0 0DEFAULT 32K buffer cache 0 0ASM Buffer Cache 0 007:15:31 SQL> select component,current_size ,min_size from v$sga_dynamic_components;COMPONENT CURRENT_SIZE MIN_SIZE---------------------------------------------------------------- ------------ ----------shared pool 75497472 75497472large pool 4194304 4194304java pool 4194304 4194304streams pool 0 0DEFAULT buffer cache 167772160 167772160KEEP buffer cache 0 0RECYCLE buffer cache 0 0DEFAULT 2K buffer cache 0 0DEFAULT 4K buffer cache 0 0DEFAULT 8K buffer cache 0 0DEFAULT 16K buffer cache 0 0DEFAULT 32K buffer cache 0 0ASM Buffer Cache 0 013 rows selected.07:15:40 SQL>二、Buffer cache介绍1.Buffer cache的类型通常包括default buffer cachekeep buffer cacherecycle buffer cachenk buffer caches与Buffer cache打交道的后台进程为DBWn,与之对应的数据文件通常位于system 表空间,sysaux表空间,undo表空间,datafile 等Buffer cache是SGA的一部分,其内容是由用户进程从数据文件读取出来的数据块,并且所有的用户共享这些数据块。

通常,服务器进程为提高I/O 性能,会一次性读多个数据块。

对于Buffer cache中的脏数据则由DBWn进程写入到数据文件。

同样为提高性能,DBWn进程也会一次写多个数据块。

Buffer cache会拥有一个数据块的多个副本,当前块的最新副本仅有一份,而该数据块老的或旧的副本可能有多份,用于块的读一致性。

Buffer cache采用LRU算法来淘汰掉过时的数据块。

Buffer cache中存在检查点队列以及LRU链表。

2.Buffer cache的几个相关参数Buffer cache能有由多个独立的且具有不同block size的缓冲池(buffer pool)组成。

DB_BLOCK_SIZE:参数决定了数据库主块的块大小,该块的大小通常被系统表(system,sysaux)空间和主要的Buffer cache(recycle,keep,default buffer cache)所使用决定主要的Buffer cache大小的几个参数db_cache_sizedb_keep_cache_sizedb_recycle_cache_size3.Buffer cache中块的四种状态pinned:意味着多个会话在相同的时段写同一个数据块,其他的会话等待访问块。

clean:优先要淘汰掉的数据块,即不是pinned状态,也不会被再次使用的块.该块可能和磁盘上的块处于同步状态,也可能是一个读一致性块free/unused:即Buffer cache中的块处于空闲状态或未使用状态,通常是由于实例刚刚启动。

dirty:已发生变化的数据块,且没有进程再使用该块,则在aged out之前需要立即由DBWn 写入到数据文件。

服务器进程将数据块从数据文件填充到Buffer cache,当Buffer cache中不再需要使用到数据块的副本时,而DBWn进程则将脏数据写入到数据文件,用于将数据块由 pinned 状态变为free 状态。

4.参数db_block_checksum该参数设置为true,则一个指定的校验码被同时写入到数据块,用于防止磁盘,I/O系统损坏导致数据的丢失。

三、客户端服务器进程从Buffer cache获取数据的过程v8v1.服务器进程使用一个哈希函数来检查所需的数据块是否已经位于Buffer cache。

如果在Buffer cache中找到所需的数据块,则该块根据使用的频率放置到LRU队列中特定的位置。

此时的读数据块为逻辑读,且不在需要执行后续步骤。

如果不在Buffer cache中,则转到下一步。

2.服务器进程搜索LRU列表中是否存在可用的空闲空间存放新的数据块。

在搜索LRU列表同时时,已经被修改的脏数据将被服务器进程放置到检查点队列。

3.检查点队列长度超出预设大小的阙值或服务器进程搜索空闲块操作预设的次数(由隐藏参数_db_block_max_scan_pct所指定的值,表示已经扫描的buffer header数量占整个LRU链表上的buffer header的总数量,在i中该限定值为40%),则服务器进程通过DBWn将脏数据Buffer cache写出到数据文件。

4.当可用的空闲块被找到后,服务器进程从数据文件读入块到Database Buffer cache并放置到LRU队列中。

如果所得到的块不是一致性读块,则服务器进程从undo segment中重构一致性块。

Buffer cache与DBWn密切相关,下面给出DBWn触发的条件脏缓冲列表达到指定的阙值大小搜索LRU空闲队列达到预设的阙值次数发生检查点事件数据库关闭时表空间实现热备份时表空间离线在段被删除时更多有关体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构)四、对buffer cache调优,命中率等1.调整buffer cache调优规则调优的目标:尽可能在Buffer cache中找到数据,降低等待可用空闲块的时间调试方法:wait eventscache hit rationv$db_cache_advice view调整手段降低SQL命令对数据块的请求,如避免使用select * from 语句增加缓冲池的大小不同访问方式使用不同的缓冲池(buffer pools)缓存常用的表到内存并行读或排序操作不使用cache,直接从磁盘读入到PGA及内存2.决定Buffer cache的几个指标下面的查询中列出了涉及到buffer cache的几个重要指标数SELECT NAME,VALUEFROM v$sysstatWHERE NAME IN('session logical reads','physical reads','physical reads direct','physical reads direct (lob) ','consistent gets','db block gets','free buffer inspected','free buffer requested','dirty buffers inspected','pinned buffers inspected');NAME VALUE------------------------------ -------------session logical reads 139150060175 db block gets 274690511consistent gets 139129962467 physical reads 21335058151 free buffer requested 21085155516 dirty buffers inspected 156801pinned buffers inspected 432841free buffer inspected 968639physical reads direct 4995527Session Logical Reads:所有的逻辑读的数据块的数量。

Free Buffer Inspected指标:为寻找空闲buffer之前所检查块的总数量,即跳过块的数量。

如果该值接近脏数据块的数量,则表明空闲块很少,该值应尽可能小于脏块的数量。

Free Buffer Waits:当session在LRU list上没有寻找到空闲可用数据块或者搜寻可用的内存数据块被暂停的时候,该发生该事件,此为等待DBWn将脏块写入到数据文件的等待数。

除此之外,会话在做一致性读时,需要构造数据块在某个时刻的前映像(image),此时需要申请内存来存放这些新构造的数据块,如果内存中无法找到这样的内存块,也会发生这个等待事件。

相关文档
最新文档