热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle响应慢问题解决

问题描述1、应用连接数据异常缓慢,包括客户端使用plsql连接;2、数据库主机cpu占用率居高不下,IO写入居高不下。3、主机日常维护

问题描述1、应用连接数据异常缓慢,包括客户端使用plsql连接;2、数据库主机cpu占用率居高不下,IO写入居高不下。3、主机日常维护

问题描述

1、应用连接数据异常缓慢,包括客户端使用plsql连接;

2、数据库主机cpu占用率居高不下,IO写入居高不下。

3、主机日常维护操作响应慢,如man或w;

分析问题

?系统及Oracle应用为什么响应慢

1、为什么系统连w这么简单的操作都会觉得卡呢?

2、为什么没有任何应用接入的情况下,数据库会有大量的写入操作呢?

Top //查看cpu使用情况,发现iowait%占用了大量的cpu时间;

Iostat –mx 2 100 查看disk使用情况,发现磁盘利用率长时间处于100%状态;将系统响应慢定位在io请求过多导致。(关于iostat的使用参见man)。

?什么导致出现如此之多的IO请求呢?

在观察后台的进程,发现有ora_p000...ora_p015. 共16个进程在运行。

我机器物理上2颗CPU,共有8个core (Cat /proc/cpuinfo可以看到机器cpu信息)。 运行Sqlplus “/as sysdba”进入sql命令行查看rollback相关参数,Show parameter rollback 看到FAST_START_PARALLEL_ROLLBACK = LOW,此参数为默认设置为LOW,表明并行运行的回滚进程有2*number of cpu,在我的系统刚好表现为16个进程。与我使用ps –ef | grep ora_p 看到的ora_p000_*0**到ora_p015_***进程对应。

?为什么会有如此多的回滚进程出现呢?

经过询问项目组相关人员,发现有人在执行imp导入时,手动终止了。拿到该同事的imp语句一看清楚了,由于导入的数据量较大,又没有逐行提交(commit=y),异常终止后产生大量的回滚动作。

?回滚慢操作为什么慢:

View $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_.log查看oracle alert日志,发现大量的Checkpoint not completed,表明redo文件组太少,导致LGWR进程在切换到新redo file时,等待旧数据写入(dbwn)数据文件;

解决办法就是增加redo file 组;

Alert database add logfile group 4(‘/u01/app/oracle/oradata/oracl/redo04.log’) size 100M;

Alert database add logfile group 5(‘/u01/app/oracle/oradata/oracl/redo05.log’) size 100M;

Alert database add logfile group 6(‘/u01/app/oracle/oradata/oracl/redo06.log’) size 100M;

根据需要可添加更多的redo文件组。

Select group#,members,status from v$log;发现有inactive出现就可以了。Redo 文件处在active状态说明redo文件还没写入在数据文件中,若此时LGWR switch切换到active文件,将在alert日志中出现Checkpoint未完成告警。

需要说明的是:回滚操作由于要写入redo文件,其本身就是很消耗系统资源的。


推荐阅读
author-avatar
铁狼爷们儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有