REDO LOG大小引起的Oracle数据库性能下降

来源:互联网 发布:金蝶erp软件免费版 编辑:程序博客网 时间:2024/04/29 17:47

今天做一个7W条记录/s插入oracle数据库的实验。两台服务器都在本地复制一个1280W条记录的表到另外一个相同结构的表里面,一台服务器花了12s另一台却花了近2min。在em中生成插入时的awr报告,在eygle的帮助下,发现是redo日志大小引起的数据库性能下降。
#通过如下语句可以发现数据库很慢的原因是log_sync
SQL> select * from v$session_wait;
#查看日志状态
SQL> select * from v$log;
SQL> select member from v$logfile;
#建立新的日志组
SQL> alter database add logfile  group 4 '/oradata/ora108/redo04.log' 2048m;
SQL> alter database add logfile  group 5 '/oradata/ora108/redo05.log' 2048m;
SQL> alter database add logfile  group 6 '/oradata/ora108/redo06.log' 2048m;
#切换日志,使1,2,3为 inactive 状态
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
#删除1,2,3组
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;

小贴士:关于undo log

当用户在Buffer Cache中修改数据时,Oracle并不会立即将修改数据写出到数据文件上,因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的 I/O操作,Oracle这样做的目的是为了减少IO的次数,当修改过的数据达到一定数量之后,可以进行高效地批量写出。
大部分传统数据库(当然包括Oracle)在处理数据修改时都遵循no-force-at-commit策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电)可以恢复,Oracle引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应的性能提升。
同Redo Log Buffer类似,Redo Log File也是循环使用的,Oracle允许使用最少两个日志组。缺省情况下,数据库创建时会建立3个日志组。
    SQL> select group#,members,status from v$log;
    GROUP#    MEMBERS STATUS
    ———- ———- —————-
    1          1 INACTIVE
    2          1 CURRENT
    3          1 INACTIVE
当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch。Log Switch会触发一个检查点,促使DBWR进程将写满的日志文件保护的变更数据写回到数据库。在检查点完成之前,日志文件是不能够被重用的。

原创粉丝点击