第十二讲--logbuffer相关设置

LGWR的出发条件:

1.      用户提交,commit;

2.      有1/3重做日志缓冲区未被写入磁盘;

3.      有大于1M的重做日志缓冲区未被写入磁盘;

4.      每隔3秒钟;

5.      DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR出发LGWR写入;

 

对第5点的解释:

对于一个脏buffer,oracle保证,在脏buffer被DBWR写回block以前,脏buffer对应的重做日志一定是写到磁盘了。如果重做日志没有写回磁盘,oracle会先触发LGWR把重做日志写回磁盘,然后BDWR才把脏buffer写回block。日志总是先于buffer写到磁盘上。这叫做日志写入优先

对硬盘来讲有一个参数:IOPS(IOper second),每秒IO的次数。

LGWR的特点:

1.      非常频繁,写的次数多,即IOPS大;

2.      LGWR一次写的量比较小;

3.      LGWR是顺序写;

 

Log buffer大小设置:

1.      在9i以前,一般是3M;

2.      在10g中oracle会自动调整大小,遵循这样一个原则:‘fixed SGA size’+‘redo buffer ’是granule size的整数倍;

Oracle把SGA和PGA内存分成一个个粒度(granule),粒度大小是oracle自己去调整的。粒度是oracle内存分配的最小单位。相当于windows内存管理的内存页概念。


Oracle的redo log有多个组,查看oracle日志组:

SQL> select * from v$log;

有三个日志组。

查看每个日志组有几个成员:

SQL> select * from v$logfile;

有三个组,每个组有一个成员。

Redo log比dbf还要重要,dbf可以丢失,但是redo log千万不要丢失。

假设redo log有四个组,每组两成员,成员1放在磁盘1上,成员2放在磁盘2上。磁盘1损坏,成员1丢失,还有磁盘2的成员2,这就留下了冗余。

 

对日志组的增删改:


有了以上命令就能对oracle的体系结构进行变化了。

 

Redo log的切换:

Redo log1写满之后开始写redolog2,这就叫切换。我们要把redo log从开始写到写满的时间控制在10-20分钟之间。

查看日志切换时间:

SQL> selectto_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') f_time from v$log_history;
 
F_TIME
---------------------------------------------------------------------------
2012-03-1610:41:36
2012-03-1610:43:24
2012-03-1610:51:02
2015-11-0820:58:54
2015-11-0920:05:42
2015-11-1022:00:19
2015-11-1610:09:39
 
7 rows selected.
 

手工切换redo log日志(强行切换):

<pre name="code" class="sql">SQL> altersystem switch logfile;

System altered.

 
 


然后再查看日志切换时间:

SQL> selectto_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') f_time from v$log_history;
 
F_TIME
---------------------------------------------------------------------------
2012-03-1610:41:36
2012-03-1610:43:24
2012-03-1610:51:02
2015-11-0820:58:54
2015-11-0920:05:42
2015-11-1022:00:19
2015-11-1610:09:39
2015-11-1711:19:24
 
8 rows selected.

发现多了一条数据

你可能感兴趣的:(oracle)