调优5(SGA其他缓存区调整)

第五章 SGA其他缓存区调整

一、redo log buffer

1、redo log 的功能
1)Sever 进程在buffer
cache修改数据块后,Oracle提倡‘先记后写’,对修改的数据块的改变生成log entries(日志条目),将日志条目按顺序写入log
buffer;而对于脏块
先链接到检查点队列,等待dbwr 进程写入到datafile
2) 进程会及时的将其按顺序写入到redo log
files。(日志条目的数据块大小一般和操作系统数据块大小一致,在Unix 和linux 下一般为512Bytes)
3)lgwr 在以下条件会写log
entries:
A)、commit
B)、log buffer 空间1/3
C)、日志到1M时
D)、每隔3S

E)、在dbwr 写脏块前
--redo 日志及时的写入到redo log files,可以在instance 或 media recover
时,通过redo log 来对数据库进行recovery

2、redo log buffer 大小

09:59:26 [email protected] test1>select name ,bytes/1024/1024 from v$sgainfo;

NAME
BYTES/1024/1024
-------------------------------- ---------------
Fixed SGA
Size 1.16233444
Redo Buffers
2.8359375
----由于redo log buffer的空间循环使用,可以不用设太大的尺寸,一般默认值即可。

3、监控log buffer

10:07:36 [email protected] test1>select sid,event,seconds_in_wait,state
10:07:59 2
from v$session_wait
10:08:05 3 where event=‘log buffer space‘;

no rows selected
------‘log buffer space’ 事件,指的是当server 进程写日志条目到log buffer
时,没有可用的空间,而导致等待

10:10:58 [email protected] test1>begin
10:11:28 2 for i in
1..1000000
10:11:38 3 loop
10:11:41 4 execute immediate ‘insert into
t1 values (:num)‘ using i;
10:11:46 5 end loop;
10:11:50 6
end;
10:11:51 7 /

PL/SQL procedure successfully completed.

10:13:10 [email protected] test1>r
1 select sid,event,seconds_in_wait,state

2 from v$session_wait
3* where event=‘log buffer space‘;
10:12:04
[email protected] test1>/

SID EVENT
SECONDS_IN_WAIT STATE
----------
---------------------------------------------------------------- ---------------
-------------------
20 log buffer space
9 WAITED KNOWN TIME

Elapsed: 00:00:00.01
10:12:24 [email protected] test1>/

SID EVENT
SECONDS_IN_WAIT STATE
----------
---------------------------------------------------------------- ---------------
-------------------
20 log buffer space
22 WAITED KNOWN TIME

Elapsed: 00:00:00.00
-----事务量增加,导致了“log buffer space” 的等待事件

10:17:55 [email protected] test1>select username,sid from v$session where username is
not null;

USERNAME SID
------------------------------
----------
SYS 39
SCOTT
28

Elapsed: 00:00:00.02
10:18:07 [email protected] test1>select SID,EVENT,TOTAL_WAITS
WAIT_CLASS from v$session_event
10:18:29 2 where sid in(39,28) and event
in (‘log file sync‘,‘log file parallel write‘);

SID EVENT
WAIT_CLASS
----------
----------------------------------------------------------------
----------
39 log file sync
5

Elapsed: 00:00:00.03
10:18:30 [email protected] test1>

log file sync等待事件
当用户发出提交或回滚语句时会触发LGWR将重做记录写入联机日志文件,这种触发LGWR的方式叫做同步写(sync
writes)触发,
而其他剩下的触发LGWR的方式叫做后台写(background writes)。log file sync等待事件只与sync
writes有关,
而log file parallel write等待事件只与background writes有关。

-----调整(增加日志组或日志组的大小,或者增加log_buffer 的大小)

10:35:42 [email protected] test1>alter system set log_buffer =10240000
scope=spfile;

System altered.

10:38:53 [email protected] test1>
begin
10:39:03 [email protected] test1>for i in
1..1000000
loop
10:39:03 3 execute immediate ‘insert into t1
values (:num)‘ using i;
10:39:03 5 end loop;
10:39:03 6
end;
10:39:03 7 /

PL/SQL procedure successfully completed.

Elapsed: 00:01:39.52
10:40:44 [email protected] test1>

10:38:17 [email protected] test1>select sid,event,seconds_in_wait,state
10:39:14 2
from v$session_wait
10:39:14 3 where event=‘log buffer space‘;

no rows selected

Elapsed: 00:00:00.11
10:39:15 [email protected] test1>/

no rows selected

Elapsed: 00:00:00.04
10:39:42 [email protected] test1>/

no rows selected

Elapsed: 00:00:00.05
10:39:51 [email protected] test1>/

no rows selected

Elapsed: 00:00:00.09

10:43:18 [email protected] test1>select SID,EVENT,TOTAL_WAITS WAIT_CLASS from
v$session_event
10:43:19 2 where sid in(39,22) and event in (‘log file
sync‘,‘log file parallel write‘);

no rows selected

-------调整了redo buffer 空间后,log buffer space 等待事件被消除

-------查看日志条目的信息

10:20:30 [email protected] test1>select name,value from v$sysstat
10:20:51 2
where name in (‘redo buffer allocation retries‘,‘redo entries‘);

NAME
VALUE
----------------------------------------------------------------
----------
redo entries
1125660
redo buffer allocation retries
9

Elapsed: 00:00:00.01

------redo entries 生成的redo 日志条目的个数
------redo buffer allocation retries
server 进程在写入日志条目时,没有足够的空间,重试的次数

--一般要求,重试次数应该为0,两者相比的比率小于1%

4、减少redo 的生成

1)、在做sql load 时采用direct 导入和nologging。
2)、在执行sql 语句时,使用nologging(但dml
操作无效)

------dml

0:32:36 [email protected] test1>update emp1 nologging set sal=sal+2000 where
deptno=10;

12 rows updated.

Elapsed: 00:00:00.01

Execution
Plan
----------------------------------------------------------
Plan hash
value: 2879231406

-----------------------------------
| Id | Operation | Name
|
-----------------------------------
| 0 | UPDATE STATEMENT |
|
| 1 | UPDATE | EMP1 |
|* 2 | TABLE ACCESS FULL| EMP1
|
-----------------------------------

Predicate Information (identified by operation
id):
---------------------------------------------------

2 - filter("DEPTNO"=10)

Note
-----
- rule based optimizer used (consider using cbo)

Statistics
----------------------------------------------------------
1
recursive calls
6 db block gets
23 consistent
gets
0 physical reads
3036 redo size
681
bytes sent via SQL*Net to client
589 bytes received via SQL*Net from
client
4 SQL*Net roundtrips to/from client
1 sorts
(memory)
0 sorts (disk)
12 rows processed

10:32:44 [email protected] test1>

------在nologging 下仍有日志生成

------通过视图监控

10:36:58 [email protected] test1>select a.name,b.value from v$statname a,v$mystat
b
10:37:05 2 where a.STATISTIC#=b.STATISTIC# and a.name like ‘%redo
size%‘;

NAME
VALUE
----------------------------------------------------------------
----------
redo size
269785556

10:37:11 [email protected] test1>update emp1 nologging set sal=sal+2000 where
deptno=10;

12 rows updated.

10:37:31 [email protected] test1>select a.name,b.value from v$statname a,v$mystat
b
10:37:45 2 where a.STATISTIC#=b.STATISTIC# and a.name like ‘%redo
size%‘;

NAME
VALUE
----------------------------------------------------------------
----------
redo size
269790652

------DDL

-------使用nologging 创建索引

10:40:32 [email protected] test1>create index t1_id_ind on t1(id) nologging;

Index created.

Elapsed: 00:00:04.53
10:41:12 [email protected] test1>select a.name,b.value from
v$statname a,v$mystat b
10:41:25 2 where a.STATISTIC#=b.STATISTIC# and
a.name like ‘%redo size%‘;

NAME
VALUE
----------------------------------------------------------------
----------
redo size
269910748

Elapsed: 00:00:00.00
10:41:33 [email protected] test1>

------正常创建索引

10:20:30 [email protected] test1>select name,value from v$sysstat
10:20:51 2
where name in (‘redo buffer allocation retries‘,‘redo entries‘);

NAME
VALUE
----------------------------------------------------------------
----------
redo entries
1125660
redo buffer allocation retries
9

Elapsed: 00:00:00.01
10:20:56 [email protected] test1>create table t1 as select *
from scott.t1;

Table created.

Elapsed: 00:00:02.48
10:43:04 [email protected] test1>select a.name,b.value from
v$statname a,v$mystat b
10:43:18 2 where a.STATISTIC#=b.STATISTIC# and
a.name like ‘%redo size%‘;

NAME
VALUE
----------------------------------------------------------------
----------
redo size
13852204

Elapsed: 00:00:00.02
10:43:29 [email protected] test1>create index t1_id_index on
t1(id);

Index created.

Elapsed: 00:00:17.44
10:44:08 [email protected] test1>select a.name,b.value from
v$statname a,v$mystat b
10:44:20 2 where a.STATISTIC#=b.STATISTIC# and
a.name like ‘%redo size%‘;

NAME
VALUE
----------------------------------------------------------------
----------
redo size
34085060

Elapsed: 00:00:00.01
10:44:24 [email protected] test1>

15:09:25 [email protected] test1 > select sid,event,seconds_in_wait,state
15:09:58
2 from v$session_wait
15:09:58 3 where event like ‘log%‘;

no rows selected

Elapsed: 00:00:00.00
15:09:59 [email protected] test1 >/

SID EVENT
SECONDS_IN_WAIT STATE
----------
---------------------------------------------------------------- ---------------
-------------------
11 log file parallel write
0 WAITING

Elapsed: 00:00:00.00
15:10:02 [email protected] test1 >/

no rows selected

Elapsed: 00:00:00.00
15:10:03 [email protected] test1 >/

SID EVENT
SECONDS_IN_WAIT STATE
----------
---------------------------------------------------------------- ---------------
-------------------
11 log file parallel write
0 WAITING
36 log buffer space
1 WAITING
37 log buffer
space 1
WAITING

Elapsed: 00:00:00.00
15:10:04 [email protected] test1 >

解决方法:

可以调整log buffer
空间大小(不推荐),主要是调整lgwr的写出的速度

1、对于大的事务量,尽量采用分批提交
2、将redo 日志存放到磁盘I/O
最快的磁盘上(比如 采用RAID10方式)
3、增加日志组,增加日志组的大小
4、如果是归档模式,可再启用多个归档进程

二、java
pool

在oracle 10g 采用内存自动管理,可动态分配java pool的大小

三、启动异步读写

异步: 当dbwr 写时,后台进程可以继续运行
同步: 当dbwr 写时,后台进程必须处于等待状态(串行方式)
10:44:24 [email protected]
test1>show parameter syn

NAME TYPE
VALUE
------------------------------------ -----------
------------------------------
disk_asynch_io boolean
TRUE
tape_asynch_io boolean TRUE
10:56:49 [email protected]
test1>

------可以启用多个dbwr 进程(dbw0-dbw9)
10:57:37 [email protected] test1>show parameter
writer

NAME TYPE
VALUE
------------------------------------ -----------
------------------------------
db_writer_processes integer
1
10:57:56 [email protected] test1>

----但和cpu个数有关,如果是多个cpu ,可以启动多个dbwr

db_writer_processes integer 1
10:57:56 [email protected]
test1>show parameter cpu

NAME TYPE
VALUE
------------------------------------ -----------
------------------------------
cpu_count integer
1

时间: 2024-10-12 13:22:47

调优5(SGA其他缓存区调整)的相关文章

下载深入Java程序性能调优(阿姆达尔定律、缓存组件、并行开发、线程池、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:http://pan.baidu.com/s/1cvD3rw 密码:eevh 1.1. 性能概述--两个实战在线项目对比突出性能的重要性1.2. 性能概述--阿姆达尔定律解决性能的关键点2.1. 设计优化--模式在实际开发中运用012.2. 设计优化--模式在实际开发中运用02-延迟加载的核心2.3. 设计优化--模式在实际开发中运用03-基于动态代理的拦截器2

linux性能查看调优

一 linux服务器性能查看1.1 cpu性能查看1.查看物理cpu个数:cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l2.查看每个物理cpu中的core个数:cat /proc/cpuinfo |grep "cpu cores"|wc -l3.逻辑cpu的个数:cat /proc/cpuinfo |grep "processor"|wc -l物理cpu个数*核数=逻辑cpu个数(不支持

JBoss AS 7性能调优 (一)

原文:http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning 调优JBoss应用服务器 虽然许多架构师和软件工程师都同意,约70-80%的应用程序的性能取决于应用程序本身的编码,配置不当的服务器环境可以显著影响你的用户体验,并最终影响到你的应用程序性能. 很多配置元素,可以显著地影响你的服务器的性能,他们中的一些配置值得特别注意: ?    JVM 调优 ?    应用服务器资源池 ?    日志

spark调优经验(待续)

spark调优是须要依据业务须要调整的,并非说某个设置是一成不变的,就比方机器学习一样,是在不断的调试中找出当前业务下更优的调优配置.以下零碎的总结了一些我的调优笔记. spark 存储的时候存在严重的分配不均的现象,有几台机器在过渡使用, 有几台机器却非常少被使用.有几台机器缓存了几十个上百个RDD blocks  有的机器一个RDD blocks 都没有.这样存储有RDD blocks 的能够进行运算.运算的tasks 最多为该机器core数. spark.storage.memoryFra

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南

原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergonomics) 垃圾收集器实现(Garbage Collector Implementation) 影响垃圾收集性能的因素 总堆(Total Heap) 年轻代 可用的收集器(Available Collectors) 串行收集器(Serial Collector) 并行收集器(Parallel Co

JVM参数调优:Eclipse启动实践

本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java Virtual Machine)的架构,垃圾收集的介绍等.这里摘录出关于配置 JVM 基本参数来调优 Eclipse 启动的过程,比较初级,供初学者参考. 基础知识 针对 JVM 的参数调优主要集中在数据区大小的控制和垃圾回收策略的选择.关于 JVM 运行机制等更多内容可参考其他博文 JVM 的运行时数据区

调优3(share pool 调整)

第三章 share pool 调整 1.sga 组成部分 1)database buffer2)redolog buffer3)share pool :共享池,存放最近最常使用的sql和plsql语句及解析计划和数据字典信息---library cache: 存放最近最常使用的sql及plsql 语句和执行计划.解析代码(采用LRU算法)---Dictionary cache:存放最近最常使用的数据字典信息(表.字段.权限等)---uga :用户全局区(如果server process 是专有模

调优4(buffer cache 调整)

第四章. buffer cache 调整 1.buffer cache 功能 buffer cache: 用于存放从datafile 里读出的数据块的镜像,并共享这些数据块,采用LRU算法 buffer cache 数据块状态: pending:数据块正在使用,状态未决dirty: 被修改过的块,还未写入到datafilefree: 已经从cache里写入到datafile的块,可以被覆盖 LRU LIST :链接从datafile里读出的块的头部信息,一般用于free 状态的块Checkpoi