我有一个sql,查询同样的数据,在两台机器上跑,一台是11G,一台是10G,在10G的上跑只需要100秒,在11G上跑却要3000秒
  最后跟踪了下,发现11G出现一个type为AE, MODE为4的锁,一直不释放,不知道是怎么回事(数据库是刚启动的,应该不会有别的操作对这个表加锁)

解决方案 »

  1.   

    查询那些用户,操纵了那些表造成了锁机 
    SELECT  s.username, 
    decode(l.type,'TM','TABLE LOCK', 
    'TX','ROW LOCK', 
    NULL) LOCK_LEVEL, 
    o.owner,o.object_name,o.object_type, 
    s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser 
    FROM v$session s,v$lock l,all_objects o 
    WHERE l.sid = s.sid 
    AND l.id1 = o.object_id(+) 
    AND s.username is NOT Null 查出被锁的表,和锁住这个表的会话ID 
    select a.session_id ,b.* from v$locked_object a,all_objects b 
    where a.object_id=b.object_id 
      

  2.   

    更多的锁查询,请参考:
    http://blog.csdn.net/hdhai9451/archive/2009/02/25/3935634.aspx
      

  3.   

    先分析下表和index,再试试:
    begin
     DBMS_STATS.GATHER_TABLE_STATS(USER, 'yourTable', CASCADE => TRUE);
    end;
    /如果存在阻塞锁,sql运行时间就不可控了,首先消除阻塞锁.
    查看阻塞情况:
    select * from dba_waiters;
      

  4.   

    诚聘DBA!!!! 有意者请联系[email protected] 
    本科以上学历,计算机或相关专业 
    -至少2年的Oracle数据库管理的相关经验 
    -熟悉Oracle的备份恢复,数据迁移,RAC,数据库调优和PL/SQL编写 
    -熟悉Red Hat和Solaris操作系统及Shell脚本编写 
    -熟练的英语听说读写能力 
    -良好的沟通和表达能力 
    -在高强度和富有挑战的工作环境下,进行有效工作的能力 
    -富有创造力,工作积极主动,能主动地与项目组其他成员进行合作 
    -高度认同公司的企业文化:尊重员工,诚实和正直,追求品质和卓越,以客户为中心,恪守个人职责和倡导团队精神,求变创新,专注于技术,社会责任。
      

  5.   

    首先一点,AE是11G中新的lock会话登录就会出现.你把你的trace发来看看?
      

  6.   

    再说,lock是不会阻塞查询的.