oracle怎么查看redo大小,计算oracle redo block size的大小

计算redo  block size的大小

LGWR以block为单位把redo写入磁盘,redo block size是Oracle源代码中固定的,与操作系统相关。

通常的操作系统都是以512 bytes为单位,如:Solaris, AIX, Windows NT/2000, Linux 等

这个Log size可以从Oracle的内部视图中获得:

SQL> select max(lebsz) from x$kccle;

MAX(LEBSZ)

----------

512

也可以从v$sysstat中的统计信息中通过计算粗略得到.

以下几个统计信息如:

redo size------------redo信息的大小

redo wastage---------浪费的redo的大小

redo blocks written--LGWR写出的redo block的数量

额外的信息,每个redo block header需要占用16 bytes.

由此可以粗略的计算redo block size如下

SQL> select name,value from v$sysstat

2  where name in ('redo size','redo wastage','redo blocks written');

NAME                                                                  VALUE

---------------------------------------------------------------- ----------

redo size                                                           2242628

redo wastage                                                          63904

redo blocks written                                                    4657

SQL> select ceil(16 + (2242628 + 63904)/4657) rbsize from dual;

RBSIZE

----------

512

Although the size of redo entries is measured in bytes, LGWR writes the redo to the log files on disk in blocks. The size of redo log blocks is fixed in the Oracle source code and is operating system specific. Oracle's documentation uses the term "operating system block size" to refer to the log block size. Normally it is the smallest unit of I/O supported by the operating system for raw I/O, but on some operating systems it is the smallest possible unit of file system based I/O. The following table shows the most common log block sizes and some of the operating systems that use them.<?XML:NAMESPACE PREFIX = O />

虽然redo entries是以字节为单位的,但是LGWR将redo写入log file还是以块为单位的。redo log block的大小在Oracle代码中是固定的,是依据操作系统的,是操作系统支持的I/O的最小单位

Log Block Size

Operating Systems

512 bytes

Solaris, AIX, Windows NT/2000, Linux, Irix, DG/UX, OpenVMS, NetWare, UnixWare, DYNIX/ptx

1024 bytes

HP-UX, Tru64 Unix

2048 bytes

SCO Unix, Reliant Unix

4096 bytes

MVS, MPE/ix

从上表可以看出,最常用的操作系统的log block的大小都是512字节。查看这个块大小有很多方法:

从x$kccle中查:

selectmax(l.lebsz)log_block_size_kccle

from sys.x$kcclel

where l.inst_id = userenv('Instance')

The log block size can also be inferred from the system statistics in StatsPack reports. There is a 16 byte header for each log block, and the size of the data area is approximately the number of bytes of redo generated (redo size) plus the number of bytes of redo space left unused (redo wastage) divided by the number of log blocks written (redo blocks written). Thus the approximate formula is

log block size可以大致由统计信息中推断。每个log block有16个字节的头,数据区域大约是

(redo size(redo信息的大小)+redo wastage(浪费的redo大小))/redo blocks written(LGWR写Redo的块的数量)

16 + (redo size+redo wastage) /redo blocks written

从v$sysstat中查:

select ceil(16+(redo_size+redo_wastage)/redo_block_written) log_block_size_sysstat

from(select max(decode(name,'redo size',value)) redo_size,

max(decode(name,'redo wastage',value)) redo_wastage,

max(decode(name,'redo blocks written',value)) redo_block_written

from (select name,value from v$sysstat

where name in('redo size','redo wastage','redo blocks written')))

This formula will commonly understate the log block size by a few bytes, because it does not allow for redo that has been generated but not yet written, and theredo sizestatistic is commonly a little inaccurate.

按道理redo block written *(512-16)应该等于redo size+redo wastage的,现在还不是很理解,准备发一个帖子请教论坛高手

另外,既然redo写入log file都是以block为单位,那在LGWR频繁给触发时,必然存在block还没有写满就被写入了log file,针对这样的场景如何理解----看了redo wastage就明白了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,扩大Redo日志的具体步骤如下: 1. 在主库上查询当前Redo日志的大小和数量: ``` SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS, FIRST_CHANGE#, NEXT_CHANGE#, BLOCKS*BLOCK_SIZE/1024/1024 AS SIZE_MB FROM V$LOG; ``` 其中,BLOCKS列表示该Redo日志组的块数,BLOCK_SIZE表示每个块的大小SIZE_MB表示该Redo日志组的大小。 2. 根据查询结果,计算出每个Redo日志组的平均大小和数量,以及需要扩大的大小。 3. 在主库上切换到需要扩大的Online Redo日志组: ``` SQL> ALTER SYSTEM SWITCH LOGFILE; ``` 4. 在主库上强制刷写Redo日志: ``` SQL> ALTER SYSTEM CHECKPOINT; ``` 5. 在主库上将当前Online Redo日志组标记为需要归档: ``` SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; ``` 6. 在主库上使用ALTER DATABASE命令扩大Online Redo日志组的大小,例如: ``` SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04a.log', '/u01/app/oracle/oradata/orcl/redo04b.log') SIZE 100M; ``` 其中,THREAD 1表示要添加到的线程号,GROUP 4表示要添加到的Redo日志组号,('/u01/app/oracle/oradata/orcl/redo04a.log', '/u01/app/oracle/oradata/orcl/redo04b.log')表示要添加的Redo日志文件名,SIZE 100M表示每个Redo日志文件的大小。 7. 在主库上启用新的Redo日志组: ``` SQL> ALTER SYSTEM SWITCH LOGFILE; ``` 8. 在备库上检查Redo同步情况: ``` SQL> SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG WHERE THREAD#=1 ORDER BY SEQUENCE#; ``` 如果APPLIED列的值为YES,则表示该Redo日志已经被成功应用到备库中。 注意:在执行以上操作前,请先备份主库和备库中的数据,以防止数据丢失。同时,如果不熟悉Redo日志的操作,请勿轻易操作,以免造成不可逆的后果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值