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

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

0

积分

1

好友

7

主题
1#
发表于 2013-1-28 10:27:26 | 查看: 2922| 回复: 1
      PID
----------
        41

       SID
----------
        55
SQL> set autot traceonly
SQL> select p.productname,sum(od.unitprice*od.quantity) from products p,orderdetails od,orders o where p.productid=od.productid and od.orderid=o.orderid and o.orderdate between 20120101 and 20120401 group by p.productname ;


Execution Plan
----------------------------------------------------------
Plan hash value: 3920099203

------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |              |     3 |    84 |       | 11107   (2)| 00:02:14 |
|   1 |  HASH GROUP BY                |              |     3 |    84 |       | 11107   (2)| 00:02:14 |
|   2 |   NESTED LOOPS                |              |       |       |       |            |          |
|   3 |    NESTED LOOPS               |              |  1006 | 28168 |       | 11106   (2)| 00:02:14 |
|   4 |     VIEW                      | VW_GBC_9     |  1000 | 17000 |       |  9102   (2)| 00:01:50 |
|   5 |      HASH GROUP BY            |              |  1000 | 31000 |       |  9102   (2)| 00:01:50 |
|*  6 |       HASH JOIN               |              |  1012K|    29M|    23M|  9055   (1)| 00:01:49 |
|*  7 |        TABLE ACCESS FULL      | ORDERS       |  1007K|    11M|       |  4142   (1)| 00:00:50 |
|   8 |        TABLE ACCESS FULL      | ORDERDETAILS |  1520K|    27M|       |  1519   (2)| 00:00:19 |
|*  9 |     INDEX RANGE SCAN          | PRODUCTS_1   |     1 |       |       |     2   (0)| 00:00:01 |
|  10 |    TABLE ACCESS BY INDEX ROWID| PRODUCTS     |     1 |    11 |       |     3   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - access("OD"."ORDERID"="O"."ORDERID")
   7 - filter("O"."ORDERDATE"<=20120401 AND "O"."ORDERDATE">=20120101)
   9 - access("P"."PRODUCTID"="ITEM_1")


Statistics
----------------------------------------------------------
       1043  recursive calls
          0  db block gets
      23378  consistent gets
      24779  physical reads (24779*8196=203088684bytes和v$sesstat的value也不匹配啊)
          0  redo size
        713  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         18  sorts (memory)
          0  sorts (disk)
          3  rows processed


SELECT sn.name,st.value FROM v$sesstat st, v$statname sn WHERE  st.statistic# = sn.statistic# AND st.sid = 55 ORDER BY st.value;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
physical write total bytes                                        148324352
physical read total bytes                                         729079808
physical read bytes                                               729079808
cell physical IO interconnect bytes                               877404160
session connect time                                             1359333559
process last non-idle time                                       1359333559

请教一下老大为什么两个physical read会不一样呢( (24779*8196=203088684bytes和v$sesstat的value也不匹配啊)),还是我SELECT sn.name,st.value FROM v$sesstat st, v$statname sn WHERE  st.statistic# = sn.statistic# AND st.sid = 55 ORDER BY st.value;的写法是有问题的?
2#
发表于 2013-1-28 14:05:38
事实上这2种看法(autotrace和v$sesstat )都不太准确,v$sesstat 存在一些bug 这里不枚举了。

建议你针对SQL级别的physical read 可以参考V$SQL.DISK_READS

平均物理读的话 参考下面的语句:
  1. Want to Know if Execution Plan Changed Recently?


  2. set lines 150 pages 150
  3. col BEGIN_INTERVAL_TIME for a23
  4. col PLAN_HASH_VALUE for 9999999999
  5. col date_time for a30
  6. col snap_id heading 'SnapId'
  7. col executions_delta heading "No. of exec"
  8. col sql_profile heading "SQL|Profile" for a7
  9. col date_time heading 'Date time'

  10. col avg_lio heading 'LIO/exec' for 99999999999.99
  11. col avg_cputime heading 'CPUTIM/exec' for 9999999.99
  12. col avg_etime heading 'ETIME/exec' for 9999999.99
  13. col avg_pio heading 'PIO/exec' for 9999999.99
  14. col avg_row heading 'ROWs/exec' for 9999999.99
  15. SELECT distinct
  16. s.snap_id ,
  17. PLAN_HASH_VALUE,
  18. to_char(s.BEGIN_INTERVAL_TIME,'mm/dd/yy_hh24mi')|| to_char(s.END_INTERVAL_TIME,'_hh24mi') Date_Time,
  19. SQL.executions_delta,
  20. SQL.buffer_gets_delta/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_lio,
  21. --SQL.ccwait_delta,
  22. (SQL.cpu_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_cputime ,
  23. (SQL.elapsed_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_etime,
  24. SQL.DISK_READS_DELTA/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_pio,
  25. SQL.rows_processed_total/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_row
  26. --,SQL.sql_profile
  27. FROM
  28. dba_hist_sqlstat SQL,
  29. dba_hist_snapshot s
  30. WHERE
  31. SQL.instance_number =(select instance_number from v$instance)
  32. and SQL.dbid =(select dbid from v$database)
  33. and s.snap_id = SQL.snap_id
  34. AND sql_id in
  35. ('&SQLID') order by s.snap_id
  36. /
复制代码

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-11-16 08:47 , Processed in 0.046656 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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