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

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

131

积分

1

好友

13

主题
1#
发表于 2012-12-21 10:54:13 | 查看: 4790| 回复: 16
os:Red Hat Enterprise 4 32位
db:11.2.0.1.0

表的数量只有22行,但是查询这个表时间竟然需要23s之多,请刘大帮忙看一下
  1. [ora11@ntesepstd ~]$ sqlplus '/as sysdba'

  2. SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 21 10:42:46 2012

  3. Copyright (c) 1982, 2009, Oracle.  All rights reserved.


  4. Connected to:
  5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  7. SQL> select distinct sid from v$mystat;

  8.        SID
  9. ----------
  10.        197

  11. SQL> set timing on
  12. SQL> select count(*) from movie.tb_movie_coupon_bak;

  13.   COUNT(*)
  14. ----------
  15.         22

  16. Elapsed: 00:00:00.07
  17. SQL> set serveroutput off
  18. SQL>
  19. SQL> set autotrace TRACEonly
  20. SQL> select * from movie.tb_movie_coupon_bak;

  21. 22 rows selected.

  22. Elapsed: 00:00:23.97

  23. Execution Plan
  24. ----------------------------------------------------------
  25. Plan hash value: 1934128472

  26. --------------------------------------------------------------------------------
  27. ---------

  28. | Id  | Operation         | Name                | Rows  | Bytes | Cost (%CPU)| T
  29. ime     |

  30. --------------------------------------------------------------------------------
  31. ---------

  32. |   0 | SELECT STATEMENT  |                     |    22 |  2706 | 11309   (1)| 0
  33. 0:02:16 |

  34. |   1 |  TABLE ACCESS FULL| TB_MOVIE_COUPON_BAK |    22 |  2706 | 11309   (1)| 0
  35. 0:02:16 |

  36. --------------------------------------------------------------------------------
  37. ---------



  38. Statistics
  39. ----------------------------------------------------------
  40.           1  recursive calls
  41.           0  db block gets
  42.       41724  consistent gets
  43.       41717  physical reads
  44.           0  redo size
  45.        4596  bytes sent via SQL*Net to client
  46.         431  bytes received via SQL*Net from client
  47.           3  SQL*Net roundtrips to/from client
  48.           0  sorts (memory)
  49.           0  sorts (disk)
  50.          22  rows processed

  51. SQL>
  52. SQL> select event from v$session where sid=197;

  53. EVENT
  54. ----------------------------------------------------------------
  55. direct path read

  56. SQL>
复制代码
2#
发表于 2012-12-21 10:57:00
这个表多大?

select bytes/1024/1024  from dba_Segments where segment_name='&TABNAME';

回复 只看该作者 道具 举报

3#
发表于 2012-12-21 11:00:26
Liu Maclean(刘相兵 发表于 2012-12-21 10:57
这个表多大?

select bytes/1024/1024  from dba_Segments where segment_name='&TABNAME';
  1. SQL> select bytes/1024/1024  from dba_Segments where segment_name=upper('tb_movie_coupon_bak');

  2. BYTES/1024/1024
  3. ---------------
  4.             328

  5. SQL>
复制代码

回复 只看该作者 道具 举报

4#
发表于 2012-12-21 11:03:40

回复 只看该作者 道具 举报

5#
发表于 2012-12-21 11:10:35
使用ctas创建的新表大小才 .0625,这是为啥?
  1. SQL> select bytes/1024/1024  from dba_Segments where segment_name=upper('tb_movie_coupon_bak');

  2. BYTES/1024/1024
  3. ---------------
  4.             328

  5. SQL> select bytes/1024/1024  from dba_Segments where segment_name=upper('tb_movie_coupon');

  6. BYTES/1024/1024
  7. ---------------
  8.           .0625

  9. SQL>
复制代码

回复 只看该作者 道具 举报

6#
发表于 2012-12-21 11:14:43
aaaaaaaa2000 发表于 2012-12-21 11:10
使用ctas创建的新表大小才 .0625,这是为啥?

你不知道什么叫 HIGH WATER MARK 吗?

http://www.askmaclean.com/archiv ... igh-water-mark.html
https://cn.forums.oracle.com/forums/thread.jspa?threadID=2440302

回复 只看该作者 道具 举报

7#
发表于 2012-12-21 11:23:56
哎,知道高水位线,只是没想明白这个表为啥这么高,开发说这个表上没有进行过大批量的dml操作

回复 只看该作者 道具 举报

8#
发表于 2012-12-21 11:29:34
set lines 500
set long 9999
set pages 999
set serveroutput on size 1000000
alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss';
SELECT * FROM DBA_TAB_MODIFICATIONS where table_name=upper('tb_movie_coupon_bak');
select num_rows from dba_tables where table_name=upper('tb_movie_coupon_bak');


执行上面的脚本 输出用code模式贴出

回复 只看该作者 道具 举报

9#
发表于 2012-12-21 11:32:30
  1. SQL> set lines 500
  2. SQL> set long 9999
  3. SQL> set pages 999
  4. SQL> set serveroutput on size 1000000
  5. alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss';
  6. SELECT * FROM DBA_TAB_MODIFICATIONS where table_name=upper('tb_movie_coupon_bak');
  7. SQL>
  8. Session altered.

  9. SQL>
  10. TABLE_OWNER                    TABLE_NAME                     PARTITION_NAME                 SUBPARTITION_NAME                 INSERTS        UPDATES    DELETES TIMESTAMP           TRU DROP_SEGMENTS
  11. ------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------- ---------- ---------- ------------------- --- -------------
  12. MOVIE                          TB_MOVIE_COUPON_BAK                                                                                   0              2          0 2012/12/20 22:00:10 NO              0

  13. SQL> select num_rows from dba_tables where table_name=upper('tb_movie_coupon_bak');

  14.   NUM_ROWS
  15. ----------
  16.         22

  17. SQL>
复制代码

回复 只看该作者 道具 举报

10#
发表于 2012-12-21 11:37:37
最近一次分析是  2012/12/20 22:00:10 时已经只有22行了


  1. column owner format a16
  2. column object_name format a36
  3. column start_day format a11
  4. column block_increase format 9999999999

  5. select   obj.owner, obj.object_name,
  6.          to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD') start_day,
  7.          sum(a.db_block_changes_delta) block_increase
  8. from     dba_hist_seg_stat a,
  9.          dba_hist_snapshot sn,
  10.          dba_objects obj
  11. where    sn.snap_id = a.snap_id
  12. and      obj.object_id = a.obj#
  13. and      obj.owner not in ('SYS','SYSTEM')
  14.          and obj.object_name=upper('tb_movie_coupon_bak')
  15. group by obj.owner, obj.object_name,
  16.          to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD')
  17. order by obj.owner, obj.object_name
  18. /
复制代码
跑一下上面的脚本

回复 只看该作者 道具 举报

11#
发表于 2012-12-21 11:41:58
  1. SQL> column owner format a16
  2. SQL> column object_name format a36
  3. SQL> column start_day format a11
  4. column block_increase format 9999999999
  5. SQL>
  6. SQL> select   obj.owner, obj.object_name,
  7.          to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD') start_day,
  8.          sum(a.db_block_changes_delta) block_increase
  9.   4           dba_objects objat a,
  10. from     dba_hist_seg_stat a,
  11.          dba_hist_snapshot sn,
  12.          dba_objects obj
  13. where    sn.snap_id = a.snap_id
  14.   8  and      obj.object_id = a.obj#
  15. and      obj.owner not in ('SYS','SYSTEM')
  16.          and obj.object_name=upper('tb_movie_coupon_bak')
  17. group by obj.owner, obj.object_name,
  18.          to_char(sn.BEGIN_INTERVAL_TIME,'RRRR-MON-DD')
  19. 13  order by obj.owner, obj.object_name
  20. 14  /

  21. OWNER            OBJECT_NAME                          START_DAY   BLOCK_INCREASE
  22. ---------------- ------------------------------------ ----------- --------------
  23. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-12              0
  24. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-13             16
  25. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-14             16
  26. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-15              0
  27. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-16              0
  28. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-17              0
  29. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-18              0
  30. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-19             32
  31. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-20              0
  32. MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-21              0

  33. 10 rows selected.

  34. SQL>
复制代码

回复 只看该作者 道具 举报

12#
发表于 2012-12-21 11:49:06
MOVIE            TB_MOVIE_COUPON_BAK                  2012-DEC-19             32


12月19号 该表还在增长 到 20号 22:00 只有22条记录,说明 这期间 对该表做了大量删除

回复 只看该作者 道具 举报

13#
发表于 2012-12-21 11:58:04
看BLOCK_INCREASE,不应该增长到328M吧

回复 只看该作者 道具 举报

14#
发表于 2012-12-21 13:22:51
你看到的 仅是过去10天的增长历史!!

select to_char(START_TIMESTAMP,'MM-DD-hh24'),operation,count(*) from flashback_transaction_query where table_name='TB_MOVIE_COUPON_BAK' group by to_char(START_TIMESTAMP,'MM-DD-hh24'),operation;

查一下

回复 只看该作者 道具 举报

15#
发表于 2012-12-21 13:49:39
无记录   

回复 只看该作者 道具 举报

16#
发表于 2012-12-21 14:05:05
aaaaaaaa2000 发表于 2012-12-21 13:49
无记录

估计你的undo很小, 综上所述 19-20期间有人删除了该表上大量数据,可以通过logminer获得更多信息

回复 只看该作者 道具 举报

17#
发表于 2012-12-22 22:53:46
学习了  强。。。。。。。。。

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-11-16 04:48 , Processed in 0.053984 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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