0

我从系统登录到我的应用程序。我从一个用户执行刷新并从另一个用户复制粘贴。刷新主要有一组选择查询,复制粘贴有更多的插入查询。这样刷新需要一分钟或更短的时间来执行,但是当从其他系统完成复制粘贴时,它需要很长时间或等待复制粘贴完成,然后才完成。

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

你能告诉我:

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

1 回答 1

0

如何查看有冲突的查询

Enterprise Edition中,您可以使用Enterprise Manager来跟踪阻塞会话和参与的查询。( Enterprise Manager for 10g 文档)

您还可以为此编写 SQL 查询,如本文所述:跟踪 Oracle 阻塞会话

文章中的 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; 

如何查看各种查询获取的锁。

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

设置 linesize 150;迎头赶上;col sid_serial form a13 col ora_user for a15; a35 的 col 对象名称;a10 的 col 对象类型;a15 的 col lock_mode;col last_ddl for a8; a10 的 col 状态;

在 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 

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

好吧,谷歌浮现在脑海...

于 2013-01-10T09:47:14.827 回答