Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101938533
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-16 13:33:30

     来源:赛迪网    作者:Alice

虽然使用这种方法可以得到相当详细的信息,但是需要注意的是,这种方法捕获到的语句并不一定是问题的根源,因为有可能前一个语句消耗了99.9%临时空间,而第二个语句被捕获到跟踪文件中。

跟踪文件同时还会包含如调用栈跟踪和二进制栈dump,该信息通常没有价值,除非想要了解Oracle内部。

通常不应该在实例级别设置该诊断事件。如果经常在批处理期间遇到该错误,可以在批处理开始设置alter session进行会话级跟踪。

监控临时表空间

可以在发生错误前实时监控数据库中临时表空间的使用情况,以避免出现错误。任何时候,Oracle都可以告诉dba数据库中的临时表空间,会话使用的排序空间,以及语句使用的排序空间。所有这些信息都可以通过v$得到。

临时段

Oracle会在第一次执行磁盘排序时创建排序段,并且根据需要扩展,但是不会收缩。

SELECT A.tablespace_name tablespace,

D.mb_total,

SUM(A.used_blocks * D.block_size) / 1024 / 1024 mb_used,

D.mb_total - SUM(A.used_blocks * D.block_size) / 1024 / 1024 mb_free

FROM v$sort_segment A,

(SELECT B.name, C.block_size, SUM(C.bytes) / 1024 / 1024 mb_total

FROM v$tablespace B, v$tempfile C

WHERE B.ts# = C.ts#

GROUP BY B.name, C.block_size) D

WHERE A.tablespace_name = D.name

GROUP by A.tablespace_name, D.mb_total;

会话使用的排序空间

SELECT S.sid || ',' || S.serial# sid_serial,

S.username,

S.osuser,

P.spid,

S.module,

S.program,

SUM(T.blocks) * TBS.block_size / 1024 / 1024 mb_used,

T.tablespace,

COUNT(*) sort_ops

FROM v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P

WHERE T.session_addr = S.saddr

AND S.paddr = P.addr

AND T.tablespace = TBS.tablespace_name

GROUP BY S.sid,

S.serial#,

S.username,

S.osuser,

P.spid,

S.module,

S.program,

TBS.block_size,

T.tablespace

ORDER BY sid_serial;

语句使用的临时空间

SELECT S.sid || ',' || S.serial# sid_serial,

S.username,

T.blocks * TBS.block_size / 1024 / 1024 mb_used,

T.tablespace,

T.sqladdr address,

Q.hash_value,

Q.sql_text

FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS

WHERE T.session_addr = S.saddr

AND T.sqladdr = Q.address(+)

AND T.tablespace = TBS.tablespace_name

ORDER BY S.sid;

阅读(405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~