ORACLE性能优化救生指南_21章 重做和归档的优化

(读书笔记)


21.5 重做日志与归档化

一般的做法是,把重做日志、闪回日志和归档日志与数据库文件分开。
这些文件的上的IO类型,与数据文件的IO在性质上完全不同,备份与归档期间产生的突发IO可能会干扰
进行中的数据文件IO。

有两种常见的方式用来配置重做日志、归档日志与闪回日志:
1.在两个磁盘卷上交替存放重做日志文。且把归档日志放到一个独立的卷上。
2.把所有的这些文件放在一个单独的位置,例如:使用一个单独的做了条带化的卷存放所有的非数据文件。
或至少存放归档日志与闪回日志


21.5.3 对重做日志使用RAID 5 大声说NO

RAID5 绝对不该用于存放重做日志。RAID5 的写缺陷奖严重制约数据库的事务能力。

给数据库文件使用RAID5是有问题的。但给重做日志使用RAID5 则几乎肯定是一个坏主意。
因为重做日志面向持续的写行为,且因为由这些写带来的延时通常是数据库处理的一个限制因素。
RAID5的写缺陷总是不可接受的。建议使用交替的磁盘设置。而不是把它他们组成RAID5


21.5 重做日志
重做日志的最佳大小取决于事务速率。合理设置日志文件的大小以便日志切换不会发生
得太快。512Mb--1G的日志文件大小是很普通的,配置1-20个日志文件也很平常。

这个查询报告了24小时的日志切换之间的平均,最大,最小次数。
平均时间在5分钟以下,那要考虑增加日志文件的大小。


WITH log_history AS
       (SELECT thread#, first_time,
               LAG(first_time) OVER (ORDER BY thread#, sequence#)
                  last_first_time,
               (first_time
                - LAG(first_time) OVER (ORDER BY thread#, sequence#))
                    * 24* 60   last_log_time_minutes,
               LAG(thread#) OVER (ORDER BY thread#, sequence#)
                   last_thread#
        FROM v$log_history)
SELECT ROUND(MIN(last_log_time_minutes), 2) min_minutes,
       ROUND(MAX(last_log_time_minutes), 2) max_minutes,
       ROUND(AVG(last_log_time_minutes), 2) avg_minutes
FROM log_history
WHERE     last_first_time IS NOT NULL
      AND last_thread# = thread#
      AND first_time > SYSDATE - 1;

21.6 闪回日志

把闪回日志和重做日志或归档日志放在相同的磁盘设备上(flash_recovery_area),
可能会引起急用。如遇此问题可考虑把闪回日志放在专门的磁盘卷上。

闪回IO操作通常是很小的,因此推荐使用细粒条带化策略。下面的查询显示闪回写进程的平均IO大小:
select (small_write_megabytes + large_write_megabytes) as total_write_mb,
        (small_write_reqs + large_write_reqs) as total_write_reqs,
        case when (small_write_reqs + large_write_reqs)=0 then 0 else
      round( (small_write_megabytes + large_write_megabytes)*1024/
                (small_write_reqs + large_write_reqs),2)  end as avg_write_kb
from v$iostat_file F
where filetype_name='Flashback Log';



你可能感兴趣的:(ORACLE性能优化救生指南_21章 重做和归档的优化)