做数据库时间长了,可能会经常去客户那里进行应急处理问题,特别是客户急急忙忙的给你打电话,说数据库运行很慢,甚至说数据库无法使用了,让你到客户现场去解决问题,这个可能是大家最不想出现的,因为这个很急,到客户现场需要赶紧解决问题,那么如果你遇到了这个问题,也不要慌,还是按照自己的思路去解决,只不过要思路敏捷,速度快,不要到客户那里磨磨蹭蹭,让客户反感。
下面给大家简单讲解一下我们去客户现场去处理应急问题的思路:
•查看系统是否能登陆(root用户) 如果系统都不能登陆了,那么就只能重新启动了,因为系统都挂起了,只有等到重新启动后,再看看有没有可用的历史信息,比如操作系统错误,数据库错误,awr等等。 •查看oracle用户是否能登陆 如果root用户可以登录,但是oracle用户不能登录,可能是操作系统的用户最大进程数达到限制,特别在aix上,用户最大进程默认128,这个必须更改,我在某个银行就遇到过这个问题。 •查看系统资源(io,memory,cpu,network) 看看是否系统还有资源,如果查看cpu使用100%,那么可以通过各个操作系统的监控命令看看是哪些进程占用,然后查找到对应的sql。 sql>select sql_text from v$session a,v$process b ,v$sqltext c where a.paddress=b.address and a.sql_address=c.address and b.spid='操作系统进程’如果是网络,查看是应用网卡还是内部通讯网卡(rac),一般是内部通讯的网卡,那么一般都是由于sql写的很垃圾,或是缺少索引,使得内部通讯压力很大。 •查看数据库sys用户是否能登陆 如果数据sqlplus不能登录,那么数据库已经挂起,查看alert是否有可用信息,如果无可用信息,那么只能重新启动数据库,然后看看数据库的历史信息是否可以查到对应问题。 •查看本地动态性能视图是否能查询 如果sys用户可以登录,那么到数据库里边看看数据库的等待事件,然后通过等待事件,查到对应的sql语句
sql>select event,count(*) from v$session group by event; 里边的空闲等待事件是没有用的,大家要知道大概哪些是空闲的等待事件,我发现很多人根本就不知道哪些等待事件是我们需要的。 sql>select sql_text from v$session a,v$sqltext b where a.sql_address=b.address and a.event=' 等待事件‘ order by piece; •查看全局动态性能视图是否能查询 主要是看rac之间通讯是否正常,如果rac之间存在问题,那么数据库挂起很正常。
•生成awr报告,查看出问题时间数据库的运行情况 如果数据库挂起,那么重新启动数据库后,把挂起之前的awr生成,间隔越短越好,最好是每个快照之间生成一个awr。
•一直监测,找到不经常执行,但是影响系统的sql 当把对数据库影响大的sql找到,然后去查看执行计划,和开发商一起解决问题。当解决完紧急问题后,需要查看是否还有比较占用资源的sql。有些sql不是经常执行,那么可能在awr中无法发现,那么需要我们认为频繁监测找到对应的sql。
以上是我的一个简单思路。
当把对数据库影响大的sql找到,然后去查看执行计划,和开发商一起解决问题