查询相互阻塞

时间:2013-01-10 09:42:18

标签: sql concurrency oracle10g locks

我从系统登录了我的应用程序。我从一个用户执行刷新并复制粘贴 从另一个。 refresh主要有一组select查询,而copy paste则有更多的insert查询。 刷新这样做需要一分钟或更短的时间来执行,但是当从其他系统完成复制粘贴时,需要花费很多时间或等待复制粘贴完成,然后才完成。

我正在使用oracle 10g数据库。我一直在使用oracle sql develepor(监控会话)来查看实时查询,但却无法有效地使用它。

你能告诉我:

  1. 如何查看有冲突的查询。
  2. 如何查看variuos查询获取的锁。
  3. 完成一个查询需要多长时间。
  4. 我可以使用的任何其他建议或任何其他方法或工具。

1 个答案:

答案 0 :(得分:0)

如何查看有冲突的查询

企业版中,您可以使用企业管理器来跟踪缓冲会话和参与的查询。 (Enterprise Manager for 10g documentation

您也可以为此编写SQL查询,如本文详述:Tracking Oracle blocking sessions

文章中的SQL(列出阻止会话):

select blocking_session, sid, serial#, wait_class, seconds_in_wait
from  v$session
where blocking_session is not NULL
order by blocking_session;

列出活动查询(来自Ask Anantha):

SELECT a.USERNAME, a.STATUS, b.sql_text
FROM V$SESSION a 
INNER JOIN V$SQLAREA b ON a.SQL_ADDRESS= b.ADDRESS; 

如何查看variuos查询获取的锁。

此查询将告诉您会话ID(来自Oracle forum):

设置lineize 150; 开头; col sid_serial形式a13 col ora_user for a15; col对象名为a35; col object_type for a10; col lock_mode for a15; col last_ddl for a8; col的状态为a10;

打破sid_serial;

SELECT l.session_id||','||v.serial# sid_serial,
   l.ORACLE_USERNAME ora_user,
   o.object_name, 
   o.object_type, 
   DECODE(l.locked_mode,
      0, 'None',
      1, 'Null',
      2, 'Row-S (SS)',
      3, 'Row-X (SX)',
      4, 'Share',
      5, 'S/Row-X (SSX)',
      6, 'Exclusive', 
      TO_CHAR(l.locked_mode)
   ) lock_mode,
   o.status, 
   to_char(o.last_ddl_time,'dd.mm.yy') last_ddl
FROM dba_objects o, gv$locked_object l, v$session v
WHERE o.object_id = l.object_id
  and l.SESSION_ID=v.sid
order by 2,3;

完成一个查询需要多长时间

您可以使用SearchOracle

中的此SQL跟踪它
SELECT * 
FROM 
    (select 
        username,opname,sid,serial#,context,sofar,totalwork ,round(sofar/totalwork*100,2) "% Complete" 
    from v$session_longops) 
WHERE "% Complete" != 100 

我可以使用的任何其他建议或任何其他方法或工具

好吧,谷歌想到了......