
公司系统就用了很多种
数据库MySQL、SQL sever、Oracle、MariaDB,基础架构使用大厂云的IAAS平台,但是数据库的运维管理需要自己做。我们去年弄了一套远光的YGdata,运维方便了很多。提供统一RDS支撑平台,即开即用、性能卓越,运行比较稳定,没有出现过故障,运维团队整体专业性都能大大提高了,给领导的各类报告也特别容易,而且好看多了。Oracle数据库运维过程中有时会遇到一种
异常情况,由于错误的 *** 作或代码BUG造成session异常地持有锁不释放,并大量阻塞系统对话。这时候需要找出造成异常阻塞的session并清除。oracle session通常具有三个特征:(1)一个session可能阻塞多个session;(2)一个session最多被一个session阻塞;(3)session阻塞
关系不会形成环路。(环路即死锁,oracle能自动解除)因此session的阻塞关系为一棵树,进而DB系统所有session的BLOCK阻塞关系是一个由若干session阻塞关系树构成的森林,而异常session一定会在故障爆发时成为根(root)。因此,找寻异常锁表session的过程就是找出异常的root。一般认为异常root有两个特征:(1)block树的规模过大,阻塞树规模即被root层层阻塞的session总数;(2)阻塞的平均等待时间过长。查找异常session的方法一:OEM—>performance—>Blocking Sessions查找异常session的方法二:select r.root_sid, s.serial#,r.blocked_num, r.avg_wait_seconds,s.username,s.status,s.event,s.MACHINE,s.PROGRAM,s.sql_id,s.prev_sql_idfrom (select root_sid, avg(seconds_in_wait) as avg_wait_seconds,count(*) - 1 as blocked_numfrom (select CONNECT_BY_ROOT sid as root_sid, seconds_in_waitfrom v$sessionstart with blocking_session is nullconnect by prior sid = blocking_session)group by root_sidhaving count(*) >1) r,v$session swhere r.root_sid = s.sidorder by r.blocked_num desc, r.avg_wait_seconds desc该SQL语句即是根据v$session的字段blocking_session统计阻塞树根阻塞session的计数以及平均阻塞时间、并进行排序,排名最前的往往是异常session。另外需要注意的是,持有锁时间最长、或等待时间最长的session都不一定是造成阻塞的根源session!
评论列表(0条)