switch logfile是一种昂贵的操作,在进行日志切换的时候,是不允许生成新的redo信息
在前台进程生成redo日志信息的时候,此时redo buffer已经分配了空间,并且在当前的redo日志文件组中也必定能写入这些数据
在进行日志切换的时候,步骤如下:
1、LGWR根据control file里的信息找到当前可用的日志文件组
2、LGWR将redo log buffer中的信息写入到当前的redo日志文件组中,并且产生一个SCN作为当前日志组的高位SCN
3、初始化可用的日志文件组,将老的日志文件组的状态设置为active,将可用的日志文件组的状态设置为current
4、将active的日志文件组进行归档,如果归档进程都在忙碌的话,那么在不超过归档进程最大数的情况下,产生新的归档进程来进行归档
5、发生一次checkpoint,将脏数据写入磁盘,当脏数据都写入磁盘之后,旧日志文件组的状态修改为inactive
事物的提交和回滚
一万条事物的提交和一条数据的提交速度基本上是相同的
而一万条事物的回滚和一条数据的回滚速度是相差很大的,一万条事物的回滚会持续很长的时间
如何减少switch logfile的次数
1、减少redo日志的产生量
2、加大redo日志文件组的大小
如何减少redo日志的产生量
使用nologging的操作,例如bulk操作、direct path write,在归档模式下,可以大大的减少日志的产生量
使用shutdown abort操作的时候
1、多使用几次alter system checkpoint
2、杀掉所有的LOCAL=YES和LOCAL=NO的进程
ps -ef|grep "LOCAL=NO" |awk '{print "kill -9 " $2}'|sh
3、使用shutdown abort(SMON进程结束了事务层面的回退操作,关闭了cache层面的恢复,也就是SMON已经开始进行临时段的的回收工作,此时就可以关闭数据库)
关于redo日志优化的建议
1、redo日志文件的大小
2、redo日志文件组的数量
3、redo日志文件的镜像数量
4、redo日志存储的性能
5、redo log buffer的大小