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

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

8

积分

0

好友

7

主题
1#
发表于 2015-1-22 11:10:00 | 查看: 4530| 回复: 7
11.2.0.3的RAC系统,做了单机dataguard,系统中每个小时有个跑批的语句,循环100多次。平时白天交易量大的时候,速度都没问题,但是只要是凌晨1点左右开始,速度就特别慢,在dataguard只读模式下查询的,同时在dataguard下生成了ash报告,可以看到这个语句变成了3种执行计划方式
267u084sjc4rc        581374162        15        87.95        INDEX - RANGE SCAN        25.00        CPU + Wait for CPU        25.00        select d.TRAN_SNO DTRAN_SNO, t...
267u084sjc4rc        581374162        15        87.95180722891566265060240963855421686747        TABLE ACCESS - BY GLOBAL INDEX ROWID        24.60        CPU + Wait for CPU        24.60       
267u084sjc4rc        581374162        15        87.95180722891566265060240963855421686747        TABLE ACCESS - BY GLOBAL INDEX ROWID        23.59        CPU + Wait for CPU        23.59       
加了附件图片和ASH报告,同时通过脚本查询,但是历史执行计划查不到结果。
执行的脚本如下:
set lines 150 pages 150
col BEGIN_INTERVAL_TIME for a23
col PLAN_HASH_VALUE for 9999999999
col date_time for a30
col snap_id heading 'SnapId'
col executions_delta heading "No. of exec"
col sql_profile heading "SQL|Profile" for a7
col date_time heading 'Date time'

col avg_lio heading 'LIO/exec' for 99999999999.99
col avg_cputime heading 'CPUTIM/exec' for 9999999.99
col avg_etime heading 'ETIME/exec' for 9999999.99
col avg_pio heading 'PIO/exec' for 9999999.99
col avg_row heading 'ROWs/exec' for 9999999.99
SELECT distinct
s.snap_id ,
PLAN_HASH_VALUE,
to_char(s.BEGIN_INTERVAL_TIME,'mm/dd/yy_hh24mi')|| to_char(s.END_INTERVAL_TIME,'_hh24mi') Date_Time,
SQL.executions_delta,
SQL.buffer_gets_delta/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_lio,
--SQL.ccwait_delta,
(SQL.cpu_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_cputime ,
(SQL.elapsed_time_delta/1000000)/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_etime,
SQL.DISK_READS_DELTA/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_pio,
SQL.rows_processed_total/decode(nvl(SQL.executions_delta,0),0,1,SQL.executions_delta) avg_row
--,SQL.sql_profile
FROM
dba_hist_sqlstat SQL,
dba_hist_snapshot s
WHERE
SQL.instance_number =(select instance_number from v$instance)
and SQL.dbid =(select dbid from v$database)
and s.snap_id = SQL.snap_id
AND sql_id in
('&SQLID') order by s.snap_id
/
这个没有显示结果。

然后执行了另外一个脚本

select a.INSTANCE_NUMBER,a.snap_id,a.sql_id,a.plan_hash_value,b.begin_interval_time
from dba_hist_sqlstat a, dba_hist_snapshot b
where sql_id ='267u084sjc4rc'
and a.snap_id = b.snap_id
order by instance_number, snap_id;

select distinct SQL_ID,PLAN_HASH_VALUE,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')  TIMESTAMP
from dba_hist_sql_plan
where SQL_ID='267u084sjc4rc' order by TIMESTAMP;

都未发现改变的执行计划,但是ash报告明显可以看到从INDEX - RANGE SCAN 到TABLE ACCESS - BY GLOBAL INDEX ROWID
请问下这个要从什么方向重新查找。

这几个脚本,分别在dataguard只读模式下查询,RAC的一个节点中查询。ash报告是在dataguard只读模式下生成的。

变慢的SQL.png (11.88 KB, 下载次数: 257)

ash中显示的改变的SQL

ash中显示的改变的SQL

ashrpt_1_0122_0155.html

37.54 KB, 下载次数: 584

变慢的SQL

2#
发表于 2015-1-22 11:15:26
给出 针对该SQL_ID 的脚本运行,使用代码模式贴出来
  1. select plan_table_output from table (dbms_xplan.display_awr('&sql_id',null,null,'ADVANCED +PEEKED_BINDS'));


  2.   SELECT *
  3.     FROM (SELECT '1.v$sql'||'实例号:'||GV$SQL.inst_id source,
  4.                  SQL_ID,
  5.                  plan_hash_value,
  6.                  TO_CHAR (FIRST_LOAD_TIME) begin_time,
  7.                  '在cursor cache中' end_time,
  8.                  executions "No. of exec",
  9.                  (buffer_gets / executions) "LIO/exec",
  10.                  (cpu_time / executions / 1000000) "CPUTIM/exec",
  11.                  (elapsed_time / executions / 1000000) "ETIME/exec",
  12.                  (disk_reads / executions) "PIO/exec",
  13.                  (ROWS_PROCESSED / executions) "ROWs/exec"
  14.             FROM Gv$SQL
  15.            WHERE sql_id = '&A'
  16.           UNION ALL
  17.           SELECT '2.sqltuning set' source,
  18.                  sql_id,
  19.                  plan_hash_value,
  20.                  'JUST SQLSET NO DATE' begin_time,
  21.                  'JUST SQLSET NO DATE' end_time,
  22.                  EXECUTIONS "No. of exec",
  23.                  (buffer_gets / executions) "LIO/exec",
  24.                  (cpu_time / executions / 1000000) "CPUTIM/exec",
  25.                  (elapsed_time / executions / 1000000) "ETIME/exec",
  26.                  (disk_reads / executions) "PIO/exec",
  27.                  (ROWS_PROCESSED / executions) "ROWs/exec"
  28.             FROM dba_sqlset_statements
  29.            WHERE SQL_ID = '&A'
  30.           UNION ALL
  31.           SELECT '3.dba_advisor_sqlstats' source,
  32.                  sql_id,
  33.                  plan_hash_value,
  34.                  'JUST SQLSET NO DATE' begin_time,
  35.                  'JUST SQLSET NO DATE' end_time,
  36.                  EXECUTIONS "No. of exec",
  37.                  (buffer_gets / executions) "LIO/exec",
  38.                  (cpu_time / executions / 1000000) "CPUTIM/exec",
  39.                  (elapsed_time / executions / 1000000) "ETIME/exec",
  40.                  (disk_reads / executions) "PIO/exec",
  41.                  (ROWS_PROCESSED / executions) "ROWs/exec"
  42.             FROM dba_sqlset_statements
  43.            WHERE SQL_ID = '&A'
  44.           UNION ALL
  45.           SELECT DISTINCT
  46.                  '4.dba_hist_sqlstat' || '实例号:' || SQL.INSTANCE_NUMBER
  47.                     source,
  48.                  sql_id,
  49.                  PLAN_HASH_VALUE,
  50.                  TO_CHAR (s.BEGIN_INTERVAL_TIME ,'YYYY-MM-DD hh24:mi:ss') begin_time,
  51.                  TO_CHAR (s.END_INTERVAL_TIME,'YYYY-MM-DD hh24:mi:ss') end_time,
  52.                  SQL.executions_delta,
  53.                  SQL.buffer_gets_delta
  54.                  / DECODE (NVL (SQL.executions_delta, 0),
  55.                            0, 1,
  56.                            SQL.executions_delta)
  57.                     "LIO/exec",
  58.                  (SQL.cpu_time_delta / 1000000)
  59.                  / DECODE (NVL (SQL.executions_delta, 0),
  60.                            0, 1,
  61.                            SQL.executions_delta)
  62.                     "CPUTIM/exec",
  63.                  (SQL.elapsed_time_delta / 1000000)
  64.                  / DECODE (NVL (SQL.executions_delta, 0),
  65.                            0, 1,
  66.                            SQL.executions_delta)
  67.                     "ETIME/exec",
  68.                  SQL.DISK_READS_DELTA
  69.                  / DECODE (NVL (SQL.executions_delta, 0),
  70.                            0, 1,
  71.                            SQL.executions_delta)
  72.                     "PIO/exec",
  73.                  SQL.ROWS_PROCESSED_DELTA
  74.                  / DECODE (NVL (SQL.executions_delta, 0),
  75.                            0, 1,
  76.                            SQL.executions_delta)
  77.                     "ROWs/exec"
  78.             FROM dba_hist_sqlstat SQL, dba_hist_snapshot s
  79.            WHERE     SQL.INSTANCE_NUMBER = s.INSTANCE_NUMBER
  80.                  AND SQL.dbid = (SELECT dbid FROM v$database)
  81.                  AND s.snap_id = SQL.snap_id
  82.                  AND sql_id IN ('&A'))
  83. ORDER BY source, begin_time DESC;
复制代码

回复 只看该作者 道具 举报

3#
发表于 2015-1-22 11:19:57
  1. SQL>  SELECT *
  2.   2      FROM (SELECT '1.v$sql'||'实例号:'||GV$SQL.inst_id source,
  3.   3                   SQL_ID,
  4.   4                   plan_hash_value,
  5.   5                   TO_CHAR (FIRST_LOAD_TIME) begin_time,
  6.   6                   '在cursor cache中' end_time,
  7.   7                   executions "No. of exec",
  8.   8                   (buffer_gets / executions) "LIO/exec",
  9.   9                   (cpu_time / executions / 1000000) "CPUTIM/exec",
  10. 10                   (elapsed_time / executions / 1000000) "ETIME/exec",
  11. 11                   (disk_reads / executions) "PIO/exec",
  12. 12                   (ROWS_PROCESSED / executions) "ROWs/exec"
  13. 13              FROM Gv$SQL
  14. 14             WHERE sql_id = '&A'
  15. 15            UNION ALL
  16. 16            SELECT '2.sqltuning set' source,
  17. 17                   sql_id,
  18. 18                   plan_hash_value,
  19. 19                   'JUST SQLSET NO DATE' begin_time,
  20. 20                   'JUST SQLSET NO DATE' end_time,
  21. 21                   EXECUTIONS "No. of exec",
  22. 22                   (buffer_gets / executions) "LIO/exec",
  23. 23                   (cpu_time / executions / 1000000) "CPUTIM/exec",
  24. 24                   (elapsed_time / executions / 1000000) "ETIME/exec",
  25. 25                   (disk_reads / executions) "PIO/exec",
  26. 26                   (ROWS_PROCESSED / executions) "ROWs/exec"
  27. 27              FROM dba_sqlset_statements
  28. 28             WHERE SQL_ID = '&A'
  29. 29            UNION ALL
  30. 30            SELECT '3.dba_advisor_sqlstats' source,
  31. 31                   sql_id,
  32. 32                   plan_hash_value,
  33. 33                   'JUST SQLSET NO DATE' begin_time,
  34. 34                   'JUST SQLSET NO DATE' end_time,
  35. 35                   EXECUTIONS "No. of exec",
  36. 36                   (buffer_gets / executions) "LIO/exec",
  37. 37                   (cpu_time / executions / 1000000) "CPUTIM/exec",
  38. 38                   (elapsed_time / executions / 1000000) "ETIME/exec",
  39. 39                   (disk_reads / executions) "PIO/exec",
  40. 40                   (ROWS_PROCESSED / executions) "ROWs/exec"
  41. 41              FROM dba_sqlset_statements
  42. 42             WHERE SQL_ID = '&A'
  43. 43            UNION ALL
  44. 44            SELECT DISTINCT
  45. 45                   '4.dba_hist_sqlstat' || '实例号:' || SQL.INSTANCE_NUMBER
  46. 46                      source,
  47. 47                   sql_id,
  48. 48                   PLAN_HASH_VALUE,
  49. 49                   TO_CHAR (s.BEGIN_INTERVAL_TIME ,'YYYY-MM-DD hh24:mi:ss') begin_tim
  50. 50                   TO_CHAR (s.END_INTERVAL_TIME,'YYYY-MM-DD hh24:mi:ss') end_time,
  51. 51                   SQL.executions_delta,
  52. 52                   SQL.buffer_gets_delta
  53. 53                   / DECODE (NVL (SQL.executions_delta, 0),
  54. 54                             0, 1,
  55. 55                             SQL.executions_delta)
  56. 56                      "LIO/exec",
  57. 57                   (SQL.cpu_time_delta / 1000000)
  58. 58                   / DECODE (NVL (SQL.executions_delta, 0),
  59. 59                             0, 1,
  60. 60                             SQL.executions_delta)
  61. 61                      "CPUTIM/exec",
  62. 62                   (SQL.elapsed_time_delta / 1000000)
  63. 63                   / DECODE (NVL (SQL.executions_delta, 0),
  64. 64                             0, 1,
  65. 65                             SQL.executions_delta)
  66. 66                      "ETIME/exec",
  67. 67                   SQL.DISK_READS_DELTA
  68. 68                   / DECODE (NVL (SQL.executions_delta, 0),
  69. 69                             0, 1,
  70. 70                             SQL.executions_delta)
  71. 71                      "PIO/exec",
  72. 72                   SQL.ROWS_PROCESSED_DELTA
  73. 73                   / DECODE (NVL (SQL.executions_delta, 0),
  74. 74                             0, 1,
  75. 75                             SQL.executions_delta)
  76. 76                      "ROWs/exec"
  77. 77              FROM dba_hist_sqlstat SQL, dba_hist_snapshot s
  78. 78             WHERE     SQL.INSTANCE_NUMBER = s.INSTANCE_NUMBER
  79. 79                   AND SQL.dbid = (SELECT dbid FROM v$database)
  80. 80                   AND s.snap_id = SQL.snap_id
  81. 81                   AND sql_id IN ('&A'))
  82. 82  ORDER BY source, begin_time DESC;
  83. 输入 a 的值:  267u084sjc4rc
  84. 原值   14:            WHERE sql_id = '&A'
  85. 新值   14:            WHERE sql_id = '267u084sjc4rc'
  86. 输入 a 的值:  267u084sjc4rc
  87. 原值   28:            WHERE SQL_ID = '&A'
  88. 新值   28:            WHERE SQL_ID = '267u084sjc4rc'
  89. 输入 a 的值:  267u084sjc4rc
  90. 原值   42:            WHERE SQL_ID = '&A'
  91. 新值   42:            WHERE SQL_ID = '267u084sjc4rc'
  92. 输入 a 的值:  267u084sjc4rc
  93. 原值   81:                  AND sql_id IN ('&A'))
  94. 新值   81:                  AND sql_id IN ('267u084sjc4rc'))

  95. 未选定行

  96. SQL>
复制代码
  1. SQL> select plan_table_output
  2.   2    from table(dbms_xplan.display_awr('267u084sjc4rc',
  3.   3                                      null,
  4.   4                                      null,
  5.   5                                      'ADVANCED +PEEKED_BINDS'));

  6. 未选定行
复制代码

回复 只看该作者 道具 举报

4#
发表于 2015-1-22 11:21:03
全无结果, 确认你运行的环境正确,否则说明该SQL_ID对应的信息已不可见

回复 只看该作者 道具 举报

5#
发表于 2015-1-22 11:31:37
Liu Maclean(刘相兵 发表于 2015-1-22 11:21
全无结果, 确认你运行的环境正确,否则说明该SQL_ID对应的信息已不可见

这种不可见的信息,我是不是已经无法追溯了。
是否有可能与自动任务的自动搜集统计信息有关?比如到凌晨1点多正好搜集这张分区表数据,
这张表比较大,1亿3千万数据,每天大概是百万左右新增数据,我看了下搜集历史,
最后的搜集时间是14号晚上搜集完成的,目前正在使用的分区,是2月14日搜集完毕的。

回复 只看该作者 道具 举报

6#
发表于 2015-3-11 10:20:56
太晚了……

回复 只看该作者 道具 举报

7#
发表于 2015-3-28 01:15:29
请问下 DATAGUARD 上如何做 ASH AWR 报表呢?
我好像做了,感觉都是主库上的信息

回复 只看该作者 道具 举报

8#
发表于 2015-4-9 22:21:33
楼主辛苦了!

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-5-19 11:59 , Processed in 0.053218 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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