(读书笔记)
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';