修改日志文件的一次记录

来源:互联网 发布:易驱线 硬盘盒 知乎 编辑:程序博客网 时间:2024/06/09 20:31

这几天发现一个存储过程在执行的时候耗费了半小时时间,按照平时经验类似于这种状况只需要几分钟的事情;于是就监控一下,发现control file parallel write 消耗的

时间很长;在网上查找资料说是日志文件切换频繁;于是就查看日志文件情况:

SELECT * from v$log;
SELECT * from v$logfile;

发现一共有三组日志,每组有一个成员,每个成员50M,在同一个目录(磁盘)下,在bdump中的alter_orcl_log 发现有很多的警告日志,并且间隔几秒钟,如:

查询语句:两种方法

(pl/sql中)

--查看日志切换情况
SELECT      SEQUENCE#,
                      FIRST_CHANGE#,
                      TO_CHAR(FIRST_TIME, 'yyyy-mm-dd hh24:mi:ss') FIRST_TIME,
                      SWITCH_CHANGE#
    FROM       V$LOGHIST
 WHERE      FIRST_TIME > TO_DATE('2013-01-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
        AND      FIRST_TIME < TO_DATE('2013-01-08 23:59:59', 'YYYY-MM-DD HH24:MI:SS')

ORDER BY 1 DESC;
--汇总查看
      SELECT      TO_CHAR(FIRST_TIME, 'yyyy-mm-dd') DAY1, COUNT(*)
          FROM       V$LOG_HISTORY
      WHERE       FIRST_TIME >= TO_DATE('2013-01-01', 'yyyy-mm-dd')
 GROUP BY      TO_CHAR(FIRST_TIME, 'yyyy-mm-dd')
 ORDER BY      1;

(linux系统中)

查看文件alert_orcl.log 的最后100行

 # cat alert_orcl.log  | tail -n 100

结果:

Tue Dec 25 10:43:27 2012
Thread 1 advanced to log sequence 49040 (LGWR switch)
  Current log# 1 seq# 49040 mem# 0: /oracle/oradata/orcl/redo01.log
Tue Dec 25 10:43:43 2012
Thread 1 cannot allocate new log, sequence 49041
Checkpoint not complete
说明日志切换频繁,并且出现等待事件;

于是就准备添加日志组文件(为了减少I/O竞争,把日志组创建在不同目录(磁盘)上):

ALTER DATABASE ADD LOGFILE GROUP 4'/usr/oraclelogfile/redo04.log'  SIZE 200 M

ALTER DATABASE ADD LOGFILE GROUP 5 '/usr/oraclelogfile/redo05.log'  SIZE 200 M

ALTER DATABASE ADD LOGFILE GROUP 6 '/usr/oraclelogfile/redo06.log'  SIZE 200 M

然后切换日志 ALTER SYSTEM SWITCH LOGFILE   ,把当前日志切换到刚创建的日志组上,然后ALTER SYSTEM CHECKPOINT  把active状态的日志组转换为

inactive ,这样就可以把原来的日志组删掉:ALTER DATABASE DROP LOGFILE GROUP 1  ;ALTER DATABASE DROP LOGFILE GROUP 2  ;ALTER DATABASE DROP LOGFILE GROUP 3 ;

然后在观察原来的存储过程,发现5分钟搞定。

 

原创粉丝点击