Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

84

积分

1

好友

27

主题
1#
发表于 2013-2-18 14:59:59 | 查看: 6008| 回复: 10
问题前言:我想诊断一个关于临时表空间老是报出空间不足问题,老大的action plan是做一个error statck。但是客户不让随便运行导致临时表空间不足的存储过程,只能使用JOB 早上7点运行。
  我的想法是这样:修改下存储过程
create or replace procedure test01 as
test varchar2(100);
begin
execute immediate q'[alter session set tracefile_identifier = errorstackfile]';
execute immediate q'[alter session set events='1438 trace name errorstack forever,level 10']';
select * into test from dual; --执行的SQL语句
execute immediate q'[alter session set tracefile_identifier = errorstack]';
end;
不知道这个方法能不能达到目的?

问题:临时表空间不足的问题已经报错过3次,客户也烦了,前两次都是同事添加5G的数据文件,目前已经达到40G,占用临时表空间主要是distinct 和group by 以及Union all (表的数据量蛮大的单个表的排序可以耗用4G左右的临时表空间)。
问题是不能一直增加数据文件,但又担心临时表空间会不足,怎么确定最优的临时表空间大小?

代码见附件
希望热心的老大以及网友提提意见

New Text Document.txt

22.35 KB, 下载次数: 1116

2#
发表于 2013-2-18 15:03:35
运行一下 SQL,并给出结果
  1. REM SORT ACTIVITY

  2. set linesize 150 pagesize 1400;

  3.     SELECT d.tablespace_name "Name",
  4.                 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)",
  5.                 TO_CHAR(NVL(t.hwm, 0)/1024/1024,'99999999.999')  "HWM (M)",
  6.                 TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % " ,
  7.                 TO_CHAR(NVL(t.bytes/1024/1024, 0),'99999999.999') "Using (M)",
  8.                 TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %"
  9.            FROM sys.dba_tablespaces d,
  10.                 (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
  11.                 (select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t
  12.           WHERE d.tablespace_name = a.tablespace_name(+)
  13.             AND d.tablespace_name = t.tablespace_name(+)
  14.             AND d.extent_management like 'LOCAL'
  15.             AND d.contents like 'TEMPORARY'
  16. /

  17. alter session set nls_date_format='dd-mon-yy';
  18. set lines 160 pages 1000 echo off feedback off
  19. col stat_name for a25
  20. col date_time for a40
  21. col BEGIN_INTERVAL_TIME for a20
  22. col END_INTERVAL_TIME for a20
  23. prompt "Enter the date in DD-Mon-YY Format and Stats you want to trend like 'redo size','physical reads','physical writes','session logical reads' etc."

  24. WITH sysstat AS
  25. (select sn.begin_interval_time begin_interval_time,
  26.          sn.end_interval_time end_interval_time,
  27.          ss.stat_name stat_name,
  28.          ss.value e_value,
  29.          lag(ss.value, 1) over(order by ss.snap_id) b_value
  30.     from dba_hist_sysstat ss, dba_hist_snapshot sn
  31.    where trunc(sn.begin_interval_time) >= sysdate-7
  32.      and ss.snap_id = sn.snap_id
  33.      and ss.dbid = sn.dbid
  34.      and ss.instance_number = sn.instance_number
  35.      and ss.dbid = (select dbid from v$database)
  36.      and ss.instance_number = (select instance_number from v$instance)
  37.      and ss.stat_name = 'sorts (disk)')
  38. select to_char(BEGIN_INTERVAL_TIME, 'mm/dd/yy_hh24_mi') || to_char(END_INTERVAL_TIME, '_hh24_mi') date_time,
  39. stat_name,
  40. round((e_value - nvl(b_value,0)) / (extract(day from(end_interval_time - begin_interval_time)) * 24 * 60 * 60
  41. + extract(hour from(end_interval_time - begin_interval_time)) * 60 * 60
  42. + extract(minute from(end_interval_time - begin_interval_time)) * 60 + extract(second from(end_interval_time - begin_interval_time))),0) per_sec
  43. from sysstat where(e_value - nvl(b_value,0)) > 0 and nvl(b_value,0) > 0
  44. /

  45. select temp_space/1024/1024,SQL_ID  from DBA_HIST_SQL_PLAN where temp_space>0 order by 1 asc;

  46. --For 8.1.7 to 9.2:
复制代码

回复 只看该作者 道具 举报

3#
发表于 2013-2-18 15:14:46
Maclean Liu(刘相兵 发表于 2013-2-18 15:03
运行一下 SQL,并给出结果

回老大:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Connected as datacore@10.24.128.80

SQL>

Name                           Size (M)        HWM (M)       HWM %   Using (M)     Using %
------------------------------ --------------- ------------- ------- ------------- -------
TEMP                                 1,024.000        12.000    1.17          .000    0.00
UPRR_TEMP                           41,600.000     26165.000   62.90          .000    0.00

Session altered
Cannot SET LINES
"Enter the date in DD-Mon-YY Format and Stats you want to trend like 'redo size','physical reads','physical writes','session logical reads' etc."

DATE_TIME                                STAT_NAME                    PER_SEC
---------------------------------------- ------------------------- ----------
02/17/13_06_00_07_00                     sorts (disk)                       0

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
   0.992774963378906 16ba97fyd3hfr
    1.04713439941406 2h18c838s8hb4
    1.15680694580078 67kxduz2mgkpu
    1.16443634033203 g5m0bnvyy37b1
    1.16443634033203 g5m0bnvyy37b1
    1.35993957519531 86wgmf9b6vjna
    1.45339965820313 as5mspaqs5bzp
    1.57833099365234 1v2y10pvdsjb2
     1.6021728515625 7b2wwfb7wwru7
    1.75857543945313 20x3w1r9rqa21
    1.85203552246094 3j1yrf7qqr8rb
    1.89876556396484 19urtpq6bg9xn
    1.99222564697266 2h18c838s8hb4
    2.08663940429688 d3xdy4pvzpv0v
    2.17247009277344 f0wnvfw5x89n8
    2.17247009277344 f0wnvfw5x89n8
    2.17247009277344 22kmhbskja8v7
    2.17247009277344 22kmhbskja8v7
    2.17247009277344 22kmhbskja8v7
    2.26593017578125 dvx12aaaqrkqq

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
    2.31266021728516 1atp3cjw0f2j3
    2.35939025878906 fprqvdfdg1c8g
    2.35939025878906 958k7h53hmnjs
    2.35939025878906 bfaucrspyst4v
    2.38323211669922 aqgrgavwc5x8q
    2.39849090576172 7b2wwfb7wwru7
    2.87532806396484 8n58uzssgttyk
    2.87532806396484 8n58uzssgttyk
    2.87628173828125 dff0qfp1mrzsq
    2.89154052734375 79gdj3amhss5f
    2.97737121582031 0anxvs0g87x7n
    2.98500061035156 a17tfh5kz2vc6
    3.16524505615234 5zcca8buuqfk3
    3.16524505615234 as5mspaqs5bzp
    3.16524505615234 19urtpq6bg9xn
    3.16524505615234 3j1yrf7qqr8rb
       3.23486328125 d3xdy4pvzpv0v
    3.28922271728516 7b2wwfb7wwru7
    3.46946716308594 708wj1nqfmywg
    3.53145599365234 20x3w1r9rqa21
    3.60965728759766 1atp3cjw0f2j3

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
    3.75080108642578 f0wnvfw5x89n8
    3.75080108642578 f0wnvfw5x89n8
    3.91483306884766 5qf3bp4kp9xvw
    4.52423095703125 6j9jwrbh3z51b
    4.53948974609375 1sdbtkgqg32tm
    4.56333160400391 dazfmxvc7uw5c
    4.65679168701172 7j8dj9aypp66y
    4.66442108154297 7b2wwfb7wwru7
     5.8441162109375 d3xdy4pvzpv0v
    5.95378875732422 f2v33zqq8zjaa
    6.00051879882813 8n58uzssgttyk
    6.96945190429688 f0wnvfw5x89n8
     7.4615478515625 f0wnvfw5x89n8
    7.51590728759766 f2v33zqq8zjaa
    7.51590728759766 f2v33zqq8zjaa
    7.57122039794922 1sdbtkgqg32tm
    7.61032104492188 f0wnvfw5x89n8
    8.46958160400391 f0wnvfw5x89n8
    8.91494750976563 g5m0bnvyy37b1
    8.98456573486328 1atp3cjw0f2j3
    9.04750823974609 79urjnasyhf71

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
    9.07039642333984 1sdbtkgqg32tm
    9.07039642333984 1sdbtkgqg32tm
    9.31262969970703 9nzb7a4pxykna
    9.31262969970703 69mnq4jf15tyd
    9.31262969970703 7ctcrwh6uv2c2
    9.31262969970703 czvw3dax6j0wm
    9.31262969970703 gvd487c022sfv
    9.58633422851563 64dtubcq1y4c3
    10.1022720336914 6v8gq8q0fwc1h
    10.1022720336914 7975jcrn9v7j5
    10.1022720336914 6zxqh7wrfwcnp
    10.1022720336914 7qj2x8yqkfvqx
    10.4923248291016 fcgwjs1212jjc
    11.3677978515625 493vxq4t9vaaa
    11.3677978515625 64dtubcq1y4c3
    11.3677978515625 a90vrsvmqtc1w
    11.3677978515625 4zrrgg52zydsn
    11.9924545288086 8n58uzssgttyk
    12.5160217285156 bffbx7rr5k6th
    13.5631561279297 bn4b3vjw2mj3u
    13.6098861694336 bn4b3vjw2mj3u

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
    18.0940628051758 4r0m311k8ta7c
    20.9770202636719 fcgwjs1212jjc
    23.7512588500977 f0wnvfw5x89n8
    23.7512588500977 f0wnvfw5x89n8
    23.7817764282227 48hzggh7ptv1j
    23.7817764282227 48hzggh7ptv1j
    23.9067077636719 f0wnvfw5x89n8
    23.9067077636719 22kmhbskja8v7
    23.9067077636719 22kmhbskja8v7
    24.2891311645508 64dtubcq1y4c3
    24.2891311645508 64dtubcq1y4c3
    25.3524780273438 4rhnxzmu87t9r
    25.3524780273438 4rhnxzmu87t9r
    26.6256332397461 awv06a0pydwmu
    27.1177291870117 f0wnvfw5x89n8
    28.6331176757813 9htg1rk788dr2
    28.7351608276367 avrafc206tyvs
    28.7351608276367 6ahf2k7s2337w
    31.8441390991211 awv06a0pydwmu
    33.2508087158203 gxrp1rw44f5v2
    33.2813262939453 gxrp1rw44f5v2

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
    34.3360900878906 dvx12aaaqrkqq
    34.3360900878906 6j9jwrbh3z51b
    34.3360900878906 4r0m311k8ta7c
    34.3360900878906 6ahf2k7s2337w
    34.3360900878906 4dg9jn9n1j3a3
    34.3360900878906 avrafc206tyvs
    34.3360900878906 79urjnasyhf71
    34.3360900878906 gkx50v44q1drf
    35.7503890991211 awv06a0pydwmu
     38.578987121582 avrafc206tyvs
     38.578987121582 6ahf2k7s2337w
     38.578987121582 gkx50v44q1drf
     38.578987121582 4r0m311k8ta7c
     38.578987121582 79urjnasyhf71
     38.578987121582 4dg9jn9n1j3a3
     38.578987121582 dvx12aaaqrkqq
     38.578987121582 6j9jwrbh3z51b
    47.7581024169922 48hzggh7ptv1j
    50.9147644042969 4rhnxzmu87t9r
    87.3050689697266 f0wnvfw5x89n8
    87.3050689697266 f0wnvfw5x89n8

TEMP_SPACE/1024/1024 SQL_ID
-------------------- -------------
         129.8828125 64dtubcq1y4c3
     444.89860534668 7f4qavcb4qv93

127 rows selected

SQL>

回复 只看该作者 道具 举报

4#
发表于 2013-2-18 16:03:55
execute immediate q'[alter session set events='1438 trace name errorstack forever,level 10']';?


为什么是1438?

oracle@localhost:~$ oerr ora 1438
01438, 00000, "value larger than specified precision allowed for this column"
// *Cause: When inserting or updating records, a numeric value was entered
//         that exceeded the precision defined for the column.
// *Action: Enter a value that complies with the numeric column's precision,
//          or use the MODIFY option with the ALTER TABLE command to expand
//          the precision.


UPRR_TEMP                           41,600.000     26165.000   62.90          .000    0.00

这个临时空间 高水位只到过 62.9%, 为什么你说总是temp不足?

你temp不足的时候到底报了什么错误?

回复 只看该作者 道具 举报

5#
发表于 2013-2-18 16:24:50
Maclean Liu(刘相兵 发表于 2013-2-18 16:03
execute immediate q'[alter session set events='1438 trace name errorstack forever,level 10']';?

错误代码1438只是测试时候用的,生产环境中的存储过程中已经改成6512,但不知道能不能抓取到错误?
错误日志信息:执行存储过程ACC_ETL_DM_BASE_CHANGES(2013-02-16)失败.使用的数据源是:udl,调用存储过程失败 ... call ACC_ETL_DM_BASE_CHANGES(?) class java.sql.SQLException:ORA-01652: 无法通过 128 (在表空间 UPRR_TEMP 中) 扩展 temp 段 ORA-06512: 在 "DATACORE.ACC_ETL_DM_BASE_CHANGES", line 33 请检查该数据源配置或确认该存储过程定义是否正确
alert.log 中也是ORA-06512错误信息不多。

回复 只看该作者 道具 举报

6#
发表于 2013-2-18 20:04:19
附件中是errorstatck ,在测试环境中同样的存储过程 报空间不足,SQL语句问题的可能性比较大,还请老大鉴定

uprr_ora_11881_ERRORSTACKFILE.zip

1.39 MB, 下载次数: 1162

回复 只看该作者 道具 举报

7#
发表于 2013-2-18 22:23:20
思路1:

dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=10, mask=0x0)
----- Error Stack Dump -----
ORA-01652: 无法通过 128 (在表空间 UPRR_TEMP 中) 扩展 temp 段
ORA-06512: 在 "DATACORE.ACC_ETL_DM_BASE_CHANGES", line 48
----- Current SQL Statement for this session (sql_id=81jm7baz8m9un) ----


DATACORE.ACC_ETL_DM_BASE_CHANGES的 第48行是什么SQL?

回复 只看该作者 道具 举报

8#
发表于 2013-2-18 22:30:42
思路2
重新触发 ORA-1652并立即查询下面的SQL:
  1. REM SORT ACTIVITY

  2. set linesize 150 pagesize 1400;

  3.     SELECT d.tablespace_name "Name",
  4.                 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)",
  5.                 TO_CHAR(NVL(t.hwm, 0)/1024/1024,'99999999.999')  "HWM (M)",
  6.                 TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % " ,
  7.                 TO_CHAR(NVL(t.bytes/1024/1024, 0),'99999999.999') "Using (M)",
  8.                 TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %"
  9.            FROM sys.dba_tablespaces d,
  10.                 (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
  11.                 (select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t
  12.           WHERE d.tablespace_name = a.tablespace_name(+)
  13.             AND d.tablespace_name = t.tablespace_name(+)
  14.             AND d.extent_management like 'LOCAL'
  15.             AND d.contents like 'TEMPORARY'
  16. /

  17. --For 10.1 and above:

  18. SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text
  19. FROM v$session a, v$tempseg_usage b, v$sqlarea c
  20. WHERE a.saddr = b.session_addr
  21. AND c.address= a.sql_address
  22. AND c.hash_value = a.sql_hash_value
  23. ORDER BY b.tablespace, b.blocks;

  24. SELECT S.sid || ',' || S.serial# sid_serial, S.username, S.osuser, P.spid, S.module,
  25. P.program, SUM (T.blocks) * TBS.block_size / 1024 / 1024 mb_used, T.tablespace,
  26. COUNT(*) statements
  27. FROM v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P
  28. WHERE T.session_addr = S.saddr
  29. AND S.paddr = P.addr
  30. AND T.tablespace = TBS.tablespace_name
  31. GROUP BY S.sid, S.serial#, S.username, S.osuser, P.spid, S.module,
  32. P.program, TBS.block_size, T.tablespace
  33. ORDER BY sid_serial;

  34. SELECT *
  35.   FROM (SELECT matching_criteria,
  36.                TO_CHAR(force_matching_signature) force_matching_signature,
  37.                sql_id,
  38.                child_number,
  39.                sql_text,
  40.                executions,
  41.                elapsed_time / 1000,
  42.                operation_type,
  43.                policy,
  44.                estimated_optimal_size,
  45.                last_memory_used,
  46.                last_execution,
  47.                active_time / 1000,
  48.                num_sort_operations,
  49.                tot_active_time / 1000,
  50.                tot_optimal_executions,
  51.                tot_onepass_executions,
  52.                tot_multipasses_executions,
  53.                all_tot_active_time / 1000,
  54.                max_tempseg_size,
  55.                parsing_schema_name
  56.           FROM (SELECT force_matching_signature,
  57.                        sql_id,
  58.                        child_number,
  59.                        sql_text,
  60.                        matching_criteria,
  61.                        SUM(executions) OVER(PARTITION BY matching_criteria) executions,
  62.                        SUM(elapsed_time) OVER(PARTITION BY matching_criteria) elapsed_time,
  63.                        operation_type,
  64.                        policy,
  65.                        estimated_optimal_size,
  66.                        last_memory_used,
  67.                        last_execution,
  68.                        active_time,
  69.                        num_sort_operations,
  70.                        SUM(tot_active_time) OVER(PARTITION BY matching_criteria) tot_active_time,
  71.                        SUM(tot_optimal_executions) OVER(PARTITION BY matching_criteria) tot_optimal_executions,
  72.                        SUM(tot_onepass_executions) OVER(PARTITION BY matching_criteria) tot_onepass_executions,
  73.                        SUM(tot_multipasses_executions) OVER(PARTITION BY matching_criteria) tot_multipasses_executions,
  74.                        MAX(max_tempseg_size) OVER(PARTITION BY matching_criteria) max_tempseg_size,
  75.                        SUM(tot_active_time) OVER() all_tot_active_time,
  76.                        ROW_NUMBER() OVER(PARTITION BY matching_criteria ORDER BY tot_multipasses_executions DESC, tot_onepass_executions DESC, last_memory_used DESC) rnum,
  77.                        parsing_schema_name
  78.                   FROM (SELECT s.sql_id,
  79.                                s.child_number,
  80.                                s.sql_text,
  81.                                s.executions,
  82.                                s.elapsed_time,
  83.                                s.force_matching_signature,
  84.                                CASE
  85.                                  WHEN s.force_matching_signature > 0 THEN
  86.                                   TO_CHAR(s.force_matching_signature)
  87.                                  ELSE
  88.                                   s.sql_id
  89.                                END matching_criteria,
  90.                                ROW_NUMBER() OVER(PARTITION BY s.sql_id, s.child_number ORDER BY sw.multipasses_executions DESC, sw.onepass_executions DESC, sw.last_memory_used DESC) rnum,
  91.                                sw.operation_type,
  92.                                sw.policy,
  93.                                sw.estimated_optimal_size,
  94.                                sw.last_memory_used,
  95.                                sw.last_execution,
  96.                                MAX(sw.max_tempseg_size) OVER(PARTITION BY s.sql_id, s.child_number) max_tempseg_size,
  97.                                sw.active_time * sw.total_executions active_time,
  98.                                SUM(sw.active_time * sw.total_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_active_time,
  99.                                COUNT(*) OVER(PARTITION BY s.sql_id, s.child_number) num_sort_operations,
  100.                                SUM(sw.optimal_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_optimal_executions,
  101.                                SUM(sw.onepass_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_onepass_executions,
  102.                                SUM(sw.multipasses_executions) OVER(PARTITION BY s.sql_id, s.child_number) tot_multipasses_executions,
  103.                                NVL(u.username, s.parsing_schema_name) parsing_schema_name
  104.                           FROM v$sql s, v$sql_workarea sw, all_users u
  105.                          WHERE sw.sql_id = s.sql_id
  106.                            AND sw.child_number = s.child_number
  107.                            AND u.user_id(+) = s.parsing_user_id)
  108.                  WHERE rnum = 1)
  109.          WHERE rnum = 1
  110.          ORDER BY tot_multipasses_executions DESC,
  111.                   tot_onepass_executions     DESC,
  112.                   last_memory_used           DESC)
  113. WHERE ROWNUM <= 200
  114. /

  115. SELECT *
  116.   FROM (SELECT s.sid,
  117.                s.machine,
  118.                s.program,
  119.                s.module,
  120.                s.osuser,
  121.                NVL(DECODE(TYPE,
  122.                           'BACKGROUND',
  123.                           'SYS (' || b.ksbdpnam || ')',
  124.                           s.username),
  125.                    SUBSTR(p.program, INSTR(p.program, '('))) username,
  126.                NVL(SUM(CASE
  127.                          WHEN sn.name = 'sorts (memory)' THEN
  128.                           ss.VALUE
  129.                          ELSE
  130.                           0
  131.                        END),
  132.                    0) sorts_memory,
  133.                NVL(SUM(CASE
  134.                          WHEN sn.name = 'sorts (disk)' THEN
  135.                           ss.VALUE
  136.                          ELSE
  137.                           0
  138.                        END),
  139.                    0) sorts_disk,
  140.                NVL(SUM(CASE
  141.                          WHEN sn.name = 'sorts (rows)' THEN
  142.                           ss.VALUE
  143.                          ELSE
  144.                           0
  145.                        END),
  146.                    0) sorts_rows,
  147.                NVL(SUM(CASE
  148.                          WHEN sn.name = 'physical reads direct temporary tablespace' THEN
  149.                           ss.VALUE
  150.                          ELSE
  151.                           0
  152.                        END),
  153.                    0) reads_direct_temp,
  154.                NVL(SUM(CASE
  155.                          WHEN sn.name = 'physical writes direct temporary tablespace' THEN
  156.                           ss.VALUE
  157.                          ELSE
  158.                           0
  159.                        END),
  160.                    0) writes_direct_temp,
  161.                NVL(SUM(CASE
  162.                          WHEN sn.name = 'workarea executions - optimal' THEN
  163.                           ss.VALUE
  164.                          ELSE
  165.                           0
  166.                        END),
  167.                    0) workarea_exec_optimal,
  168.                NVL(SUM(CASE
  169.                          WHEN sn.name = 'workarea executions - onepass' THEN
  170.                           ss.VALUE
  171.                          ELSE
  172.                           0
  173.                        END),
  174.                    0) workarea_exec_onepass,
  175.                NVL(SUM(CASE
  176.                          WHEN sn.name = 'workarea executions - multipass' THEN
  177.                           ss.VALUE
  178.                          ELSE
  179.                           0
  180.                        END),
  181.                    0) workarea_exec_multipass
  182.           FROM v$session  s,
  183.                v$sesstat  ss,
  184.                v$statname sn,
  185.                v$process  p,
  186.                x$ksbdp    b
  187.          WHERE s.paddr = p.addr
  188.            AND b.inst_id(+) = USERENV('INSTANCE')
  189.            AND p.addr = b.ksbdppro(+)
  190.            AND s.TYPE = 'USER'
  191.            AND s.sid = ss.sid
  192.            AND ss.statistic# = sn.statistic#
  193.            AND sn.name IN ('sorts (memory)',
  194.                            'sorts (disk)',
  195.                            'sorts (rows)',
  196.                            'physical reads direct temporary tablespace',
  197.                            'physical writes direct temporary tablespace',
  198.                            'workarea executions - optimal',
  199.                            'workarea executions - onepass',
  200.                            'workarea executions - multipass')
  201.          GROUP BY s.sid,
  202.                   s.machine,
  203.                   s.program,
  204.                   s.module,
  205.                   s.osuser,
  206.                   NVL(DECODE(TYPE,
  207.                              'BACKGROUND',
  208.                              'SYS (' || b.ksbdpnam || ')',
  209.                              s.username),
  210.                       SUBSTR(p.program, INSTR(p.program, '(')))
  211.          ORDER BY workarea_exec_multipass DESC,
  212.                   workarea_exec_onepass DESC,
  213.                   reads_direct_temp + writes_direct_temp DESC,
  214.                   sorts_rows DESC)
  215. WHERE ROWNUM <= 200
  216. /

  217. SELECT rawtohex(workarea_address) workarea_address,
  218.        sql_id,
  219.        sql_text,
  220.        operation_type,
  221.        policy,
  222.        sid,
  223.        active_time,
  224.        work_area_size,
  225.        expected_size,
  226.        actual_mem_used,
  227.        max_mem_used,
  228.        number_passes,
  229.        tempseg_size,
  230.        tablespace,
  231.        complete_ratio,
  232.        elapsed,
  233.        time_remaining,
  234.        opname,
  235.        machine,
  236.        program,
  237.        module,
  238.        osuser,
  239.        username
  240.   FROM (SELECT swa.workarea_address,
  241.                swa.sql_id,
  242.                sa.sql_text,
  243.                swa.operation_type,
  244.                swa.policy,
  245.                swa.sid,
  246.                swa.active_time / 1000 active_time,
  247.                swa.work_area_size,
  248.                swa.expected_size,
  249.                swa.actual_mem_used,
  250.                swa.max_mem_used,
  251.                swa.number_passes,
  252.                swa.tempseg_size,
  253.                swa.tablespace,
  254.                (CASE
  255.                  WHEN sl.totalwork <> 0 THEN
  256.                   sl.sofar / sl.totalwork
  257.                  ELSE
  258.                   NULL
  259.                END) complete_ratio,
  260.                sl.elapsed_seconds * 1000 elapsed,
  261.                sl.time_remaining * 1000 time_remaining,
  262.                sl.opname,
  263.                s.machine,
  264.                s.program,
  265.                s.module,
  266.                s.osuser,
  267.                NVL(DECODE(TYPE,
  268.                           'BACKGROUND',
  269.                           'SYS (' || b.ksbdpnam || ')',
  270.                           s.username),
  271.                    SUBSTR(p.program, INSTR(p.program, '('))) username,
  272.                ROW_NUMBER() OVER(PARTITION BY swa.sql_id ORDER BY sl.last_update_time DESC) rnum
  273.           FROM v$sql_workarea_active swa,
  274.                v$sqlarea sa,
  275.                (SELECT * FROM v$session_longops WHERE sofar <> totalwork) sl,
  276.                v$session s,
  277.                v$process p,
  278.                x$ksbdp b
  279.          WHERE sl.sid(+) = swa.sid
  280.            AND sl.sql_id(+) = swa.sql_id
  281.            AND swa.sid <> USERENV('sid')
  282.            AND sa.sql_id = swa.sql_id
  283.            AND s.sid = swa.sid
  284.            AND s.paddr = p.addr
  285.            AND b.inst_id(+) = USERENV('INSTANCE')
  286.            AND p.addr = b.ksbdppro(+)
  287.          ORDER BY swa.number_passes DESC, swa.work_area_size DESC)
  288. WHERE rnum = 1
  289. /
复制代码

回复 只看该作者 道具 举报

9#
发表于 2013-2-19 11:14:26
Maclean Liu(刘相兵 发表于 2013-2-18 22:23
思路1:

dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=10, mask=0x0)

昨天在测试库上发现了同样的问题,晚上9点多找到了原因:是一个SQL引起的 select 'A',
           d.explanation, --金融机构标识码
           c.account_no, --交易账号
           to_date(a.batchentrydate, 'yyyy-mm-dd'), --发生日期
           c.currencycode, --币种
           SUM(decode(A.Creditdebit, 'C', a.transactionamount, 0)), --当日贷方发生额
           SUM(decode(A.Creditdebit, 'D', a.transactionamount, 0)), --当日借方发生额
           case
             when C.Currencycode = 'JPY' Then
              Round(c.Ccyledgerbalance, 0)
             else
              c.ccyledgerbalance
           End Balance, --账户余额
           --b.instcode instcode, --系统虚拟机构代号
           1 datastatus, --前台对应的数据状态
           c.account_no || c.currencycode || '2013-01-04',
           to_date('2013-01-04', 'yyyy-mm-dd')
      from df_cust C
      left join (select distinct ACCOUNTBRANCH,
                                 DESCRIPTION,
                                 MASTERNO,
                                 CURRENCYCODE,
                                 ACCOUNT_NUMBER,
                                 SEQNO,
                                 ACCT_CLASS_CODE,
                                 PRODUCTCODE,
                                 VALUEDT_YYYY,
                                 VALUEDT_MM,
                                 VALUEDT_DD,
                                 BATCHENTRYDATE,
                                 VALUEDT_YYYYMMDD,
                                 NARRATIONPOST,
                                 TRANSACTIONAMOUNT,
                                 CREDITDEBIT,
                                 ACCOUNTBRANCH1,
                                 SEGMENTCODE,
                                 REFERENCENUMBER,
                                 NARRATIONTRAN,
                                 BATCHNUMBER,
                                 GLDEPTID,
                                 ARMCODE,
                                 EXTREFNO,
                                 MAKERID,
                                 CHECKERID,
                                 CHANNELID,
                                 TRANSACTION_AMT_IN_USD,
                                 ACCSHORTNAME,
                                 ARMNAME,
                                 SEGNAME,
                                 TXNCODE,
                                 REVERSALFLAG,
                                 EBBSREFERENCE,
                                 TRANSTYPECODE,
                                 CUSTOMERRATE,
                                 ADVTREASURYFLAG,
                                 VA_FLAG
                   from df_acmov_today
                  where Creditdebit in ('C', 'D')) a on a.account_number =
                                                        c.account_no
   
      Left Join Da_Mid_Acc_Gl_Dic D On D.Source = A.Accountbranch
   
     Where exists (select 1
              from acc.t_base_account b
             where b.account = c.account_no
               and b.currence_code = c.currencycode)
       and a.account_number is not null
       and c.account_no like '0%'
     group by d.explanation, --金融机构标识码
              c.account_no, --交易账号
              a.batchentrydate, --发生日期
              c.currencycode, --币种
              C.Ccyledgerbalance--系统机构代号
单独运行此SQL 临时表空间耗用 100%左右。但是郁闷的是,今天早上 准备调优SQL时,发现此问题消失了。我把AWR报告传上来。

回复 只看该作者 道具 举报

10#
发表于 2013-2-19 11:17:35
18518-18520 昨天出问题时。18531-18532今天早上的状况。很郁闷

awrrpt_1_18518_18520.html

389.34 KB, 下载次数: 946

awrrpt_1_18531_18532.html

388.31 KB, 下载次数: 900

回复 只看该作者 道具 举报

11#
发表于 2013-2-20 16:41:40
问题原因找到:表df_acmov_today,在执行计划中基数不对,导致执行计划错误,从而造成临时表空间爆掉。 使用crontab 在凌晨2:30对表做分析,但是早上6点。其他任务对表做了,truncate 和Insert into 从而导致改原因。谢谢老大和网友们的热心帮助!!!
已有 1 人评分威望 理由
Maclean Liu(刘相兵 + 5 结贴有奖

总评分: 威望 + 5   查看全部评分

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-26 14:34 , Processed in 0.056785 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569