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

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

133

积分

0

好友

17

主题
1#
发表于 2012-4-23 15:03:12 | 查看: 4528| 回复: 9
从dba_scheduler_job_run_details看这个job,一般在1~2分钟跑完,只有一次6分钟,今天早上却跑了25分钟。
AWR报告如下:(不是不想用文字啊,怎么保存后空白啊,编译时看排版正常啊)





SQL:

sql_id  druk61dn87x31
  1. SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID)
  2. FROM LOG_USER_FIRST_LOGIN_INFO F, LOG_ROLE_FIRST_LOGIN R
  3. WHERE R.GAME_ID = F.GAME_ID
  4. AND R.USER_ID = F.USER_ID
  5. AND R.LOG_ID >= :B4
  6. AND R.LOG_ID < :B3
  7. AND F.LOG_ID >= :B2
  8. AND F.LOG_ID < :B1
  9. GROUP BY R.GAME_ID, R.USER_ID
复制代码
sql_id  9z1aua1jnmzdn
  1. INSERT INTO LOG_NEVER_ENTER_USERS ( USER_ID, GATEWAY_ID, AUTHEN_TIME, GAME_ID )

  2. SELECT R.USER_ID, R.GATEWAY_ID, R.FIRST_LOGIN_TIME, R.GAME_ID
  3. FROM LOG_USER_FIRST_LOGIN_INFO R
  4. WHERE R.GAME_ID = :B2
  5. AND R.USER_ID = :B1
  6. AND R.LOG_ID >= :B4
  7. AND R.LOG_ID < :B3
复制代码
SQL_ID='gzrqbw9tk645c' 为job的SQL。

索引:
LOG_USER_FIRST_LOGIN_INFO      GAME_ID, USER_ID
                                                  GAME_ID, USER_NAME
                                                  LOG_ID                                       主键

LOG_ROLE_FIRST_LOGIN              GAME_ID, ROLE_ID
                                                 GAME_ID, USER_ID
                                                 LOG_ID                                        主键


user_id比game_id 更具有选择性,联合索引已经这样,没有做更改。

[ 本帖最后由 saup007 于 2012-4-23 15:24 编辑 ]
2#
发表于 2012-4-23 15:26:11
性能问题  请尽可能上传完整的AWR

回复 只看该作者 道具 举报

3#
发表于 2012-4-23 15:27:15
awr已经上传。对比昨天凌晨的, 没有这些sql

[ 本帖最后由 saup007 于 2012-4-23 15:28 编辑 ]

awrrpt_1_6896_6897.html

431.52 KB, 下载次数: 646

awrrpt_1_6847_6848.html

448.36 KB, 下载次数: 634

昨天的

回复 只看该作者 道具 举报

4#
发表于 2012-4-23 15:41:12
CPU Time (s)        Executions         CPU per Exec (s)        %Total        Elapsed Time (s)        %CPU        %IO        SQL Id        SQL Module        SQL Text
1,513.02        2        756.51        69.45        1,536.05        98.50        1.47        gzrqbw9tk645c         DBMS_SCHEDULER         DECLARE job BINARY_INTEGER := ...
1,368.53        2        684.26        62.81        1,374.32        99.58        0.39        druk61dn87x31         DBMS_SCHEDULER         SELECT R.GAME_ID, R.USER_ID, M...
139.45        2        69.72        6.40        140.06        99.57        0.39        9z1aua1jnmzdn         DBMS_SCHEDULER         INSERT INTO LOG_NEVER_ENTER_US..



Buffer Gets         Executions        Gets per Exec         %Total        Elapsed Time (s)        %CPU        %IO        SQL Id        SQL Module        SQL Text
1,367,591,094        2        683,795,547.00        98.84        1,536.05        98.50        1.47        gzrqbw9tk645c         DBMS_SCHEDULER         DECLARE job BINARY_INTEGER := ...
1,219,161,768        2        609,580,884.00        88.11        1,374.32        99.58        0.39        druk61dn87x31         DBMS_SCHEDULER         SELECT R.GAME_ID, R.USER_ID, M...
147,873,580        2        73,936,790.00        10.69        140.06        99.57        0.39        9z1aua1jnmzdn         DBMS_SCHEDULER         INSERT INTO LOG_NEVER_ENTER_US...


这2个SQL语句 的buffer gets都很高, 是cpu集中型的



给出这2个SQL 的执行计划

set linesize 140 pagesize 1400
select * from table(dbms_xplan.display_awr('druk61dn87x31',null,null,'all'));
select * from table(dbms_xplan.display_awr('9z1aua1jnmzdn',null,null,'all'));

回复 只看该作者 道具 举报

5#
发表于 2012-4-23 15:44:59
  1. SQL>select * from table(dbms_xplan.display_awr('druk61dn87x31',null,null,'all'));

  2. PLAN_TABLE_OUTPUT
  3. ------------------------------------------------------------------------------------------------------------------------------------------------------
  4. SQL_ID druk61dn87x31
  5. --------------------
  6. SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID) FROM
  7. LOG_USER_FIRST_LOGIN_INFO F, LOG_ROLE_FIRST_LOGIN R WHERE R.GAME_ID =
  8. F.GAME_ID AND R.USER_ID = F.USER_ID AND R.LOG_ID >= :B4 AND R.LOG_ID <
  9. :B3 AND F.LOG_ID >= :B2 AND F.LOG_ID < :B1 GROUP BY R.GAME_ID, R.USER_ID

  10. Plan hash value: 1773663456

  11. ----------------------------------------------------------------------------------------------------------------
  12. | Id  | Operation                        | Name                               | Rows  | Bytes | Cost (%CPU)| Time     |
  13. ----------------------------------------------------------------------------------------------------------------
  14. |   0 | SELECT STATEMENT                |                               |       |       |     8 (100)|               |
  15. |   1 |  HASH GROUP BY                        |                               |     1 |    40 |     8        (13)| 00:00:01 |
  16. |   2 |   FILTER                        |                               |       |       |            |               |
  17. |   3 |    NESTED LOOPS                 |                               |       |       |            |               |
  18. |   4 |     NESTED LOOPS                |                               |     1 |    40 |     7         (0)| 00:00:01 |
  19. |   5 |      TABLE ACCESS BY INDEX ROWID| LOG_ROLE_FIRST_LOGIN               |     1 |    23 |     4         (0)| 00:00:01 |
  20. |   6 |       INDEX RANGE SCAN                | LOG_ROLE_FIRST_LOGIN_PK      |     1 |       |     3         (0)| 00:00:01 |
  21. |   7 |      INDEX RANGE SCAN                | LOG_USER_FIRST_LOGIN_INFO_PK |     1 |       |     2         (0)| 00:00:01 |
  22. |   8 |     TABLE ACCESS BY INDEX ROWID | LOG_USER_FIRST_LOGIN_INFO    |     1 |    17 |     3         (0)| 00:00:01 |
  23. ----------------------------------------------------------------------------------------------------------------

  24. Query Block Name / Object Alias (identified by operation id):
  25. -------------------------------------------------------------

  26.    1 - SEL$1
  27.    5 - SEL$1 / R@SEL$1
  28.    6 - SEL$1 / R@SEL$1
  29.    7 - SEL$1 / F@SEL$1
  30.    8 - SEL$1 / F@SEL$1

  31. SQL_ID druk61dn87x31
  32. --------------------
  33. SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID) FROM
  34. LOG_USER_FIRST_LOGIN_INFO F, LOG_ROLE_FIRST_LOGIN R WHERE R.GAME_ID =
  35. F.GAME_ID AND R.USER_ID = F.USER_ID AND R.LOG_ID >= :B4 AND R.LOG_ID <
  36. :B3 AND F.LOG_ID >= :B2 AND F.LOG_ID < :B1 GROUP BY R.GAME_ID, R.USER_ID

  37. Plan hash value: 3342542580

  38. ----------------------------------------------------------------------------------------------------------------
  39. | Id  | Operation                        | Name                               | Rows  | Bytes | Cost (%CPU)| Time     |
  40. ----------------------------------------------------------------------------------------------------------------
  41. |   0 | SELECT STATEMENT                |                               |       |       |     7 (100)|               |
  42. |   1 |  HASH GROUP BY                        |                               |     1 |    40 |     7        (15)| 00:00:01 |
  43. |   2 |   FILTER                        |                               |       |       |            |               |
  44. |   3 |    NESTED LOOPS                 |                               |       |       |            |               |
  45. |   4 |     NESTED LOOPS                |                               |     1 |    40 |     6         (0)| 00:00:01 |
  46. |   5 |      TABLE ACCESS BY INDEX ROWID| LOG_ROLE_FIRST_LOGIN               |     1 |    23 |     4         (0)| 00:00:01 |
  47. |   6 |       INDEX RANGE SCAN                | LOG_ROLE_FIRST_LOGIN_PK      |     1 |       |     3         (0)| 00:00:01 |
  48. |   7 |      INDEX UNIQUE SCAN                | LOG_USER_FIRST_LOGIN_INFO_IX |     1 |       |     1         (0)| 00:00:01 |
  49. |   8 |     TABLE ACCESS BY INDEX ROWID | LOG_USER_FIRST_LOGIN_INFO    |     1 |    17 |     2         (0)| 00:00:01 |
  50. ----------------------------------------------------------------------------------------------------------------

  51. Query Block Name / Object Alias (identified by operation id):
  52. -------------------------------------------------------------

  53.    1 - SEL$1
  54.    5 - SEL$1 / R@SEL$1
  55.    6 - SEL$1 / R@SEL$1
  56.    7 - SEL$1 / F@SEL$1
  57.    8 - SEL$1 / F@SEL$1

  58. SQL_ID druk61dn87x31
  59. --------------------
  60. SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID) FROM
  61. LOG_USER_FIRST_LOGIN_INFO F, LOG_ROLE_FIRST_LOGIN R WHERE R.GAME_ID =
  62. F.GAME_ID AND R.USER_ID = F.USER_ID AND R.LOG_ID >= :B4 AND R.LOG_ID <
  63. :B3 AND F.LOG_ID >= :B2 AND F.LOG_ID < :B1 GROUP BY R.GAME_ID, R.USER_ID

  64. Plan hash value: 3930933548

  65. ----------------------------------------------------------------------------------------------------------------
  66. | Id  | Operation                        | Name                               | Rows  | Bytes | Cost (%CPU)| Time     |
  67. ----------------------------------------------------------------------------------------------------------------
  68. |   0 | SELECT STATEMENT                |                               |       |       |     8 (100)|               |
  69. |   1 |  HASH GROUP BY                        |                               |     1 |    40 |     8        (13)| 00:00:01 |
  70. |   2 |   FILTER                        |                               |       |       |            |               |
  71. |   3 |    NESTED LOOPS                 |                               |       |       |            |               |
  72. |   4 |     NESTED LOOPS                |                               |     1 |    40 |     7         (0)| 00:00:01 |
  73. |   5 |      TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    |     1 |    17 |     4         (0)| 00:00:01 |
  74. |   6 |       INDEX RANGE SCAN                | LOG_USER_FIRST_LOGIN_INFO_PK |     1 |       |     3         (0)| 00:00:01 |
  75. |   7 |      INDEX RANGE SCAN                | LOG_ROLE_FIRST_LOGIN_IX2     |     1 |       |     2         (0)| 00:00:01 |
  76. |   8 |     TABLE ACCESS BY INDEX ROWID | LOG_ROLE_FIRST_LOGIN               |     1 |    23 |     3         (0)| 00:00:01 |
  77. ----------------------------------------------------------------------------------------------------------------

  78. Query Block Name / Object Alias (identified by operation id):
  79. -------------------------------------------------------------

  80.    1 - SEL$1
  81.    5 - SEL$1 / F@SEL$1
  82.    6 - SEL$1 / F@SEL$1
  83.    7 - SEL$1 / R@SEL$1
  84.    8 - SEL$1 / R@SEL$1


  85. 96 rows selected.
复制代码

  1. SQL> select * from table(dbms_xplan.display_awr('9z1aua1jnmzdn',null,null,'all'));

  2. PLAN_TABLE_OUTPUT
  3. ------------------------------------------------------------------------------------------------------------------------------------------------------
  4. SQL_ID 9z1aua1jnmzdn
  5. --------------------
  6. INSERT INTO LOG_NEVER_ENTER_USERS ( USER_ID, GATEWAY_ID, AUTHEN_TIME,
  7. GAME_ID ) SELECT R.USER_ID, R.GATEWAY_ID, R.FIRST_LOGIN_TIME, R.GAME_ID
  8. FROM LOG_USER_FIRST_LOGIN_INFO R WHERE R.GAME_ID = :B2 AND R.USER_ID =
  9. :B1 AND R.LOG_ID >= :B4 AND R.LOG_ID < :B3

  10. Plan hash value: 406914802

  11. --------------------------------------------------------------------------------------------------------------
  12. | Id  | Operation                      | Name                             | Rows  | Bytes | Cost (%CPU)| Time     |
  13. --------------------------------------------------------------------------------------------------------------
  14. |   0 | INSERT STATEMENT              |                              |             |             |           2 (100)|             |
  15. |   1 |  LOAD TABLE CONVENTIONAL      |                              |             |             |                  |             |
  16. |   2 |   FILTER                      |                              |             |             |                  |             |
  17. |   3 |    TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    |           1 |          27 |           2   (0)| 00:00:01 |
  18. |   4 |     INDEX UNIQUE SCAN              | LOG_USER_FIRST_LOGIN_INFO_IX |           1 |             |           1   (0)| 00:00:01 |
  19. --------------------------------------------------------------------------------------------------------------

  20. Query Block Name / Object Alias (identified by operation id):
  21. -------------------------------------------------------------

  22.    1 - SEL$1
  23.    3 - SEL$1 / R@SEL$1
  24.    4 - SEL$1 / R@SEL$1

  25. SQL_ID 9z1aua1jnmzdn
  26. --------------------
  27. INSERT INTO LOG_NEVER_ENTER_USERS ( USER_ID, GATEWAY_ID, AUTHEN_TIME,
  28. GAME_ID ) SELECT R.USER_ID, R.GATEWAY_ID, R.FIRST_LOGIN_TIME, R.GAME_ID
  29. FROM LOG_USER_FIRST_LOGIN_INFO R WHERE R.GAME_ID = :B2 AND R.USER_ID =
  30. :B1 AND R.LOG_ID >= :B4 AND R.LOG_ID < :B3

  31. Plan hash value: 2643623496

  32. --------------------------------------------------------------------------------------------------------------
  33. | Id  | Operation                      | Name                             | Rows  | Bytes | Cost (%CPU)| Time     |
  34. --------------------------------------------------------------------------------------------------------------
  35. |   0 | INSERT STATEMENT              |                              |             |             |           4 (100)|             |
  36. |   1 |  LOAD TABLE CONVENTIONAL      |                              |             |             |                  |             |
  37. |   2 |   FILTER                      |                              |             |             |                  |             |
  38. |   3 |    TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    |           1 |          30 |           4   (0)| 00:00:01 |
  39. |   4 |     INDEX RANGE SCAN              | LOG_USER_FIRST_LOGIN_INFO_PK |           1 |             |           3   (0)| 00:00:01 |
  40. --------------------------------------------------------------------------------------------------------------

  41. Query Block Name / Object Alias (identified by operation id):
  42. -------------------------------------------------------------

  43.    1 - SEL$1
  44.    3 - SEL$1 / R@SEL$1
  45.    4 - SEL$1 / R@SEL$1


  46. 52 rows selected.
复制代码

回复 只看该作者 道具 举报

6#
发表于 2012-4-23 15:54:21

回复 4# 的帖子

已经回复。。我的执行计划,谓词怎么是这样,因为绑定变量吗。

回复 只看该作者 道具 举报

7#
发表于 2012-4-23 16:21:28

回复 4# 的帖子

我按照包里的SQL,找到logid值代入

  1. SQL> SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID)
  2. FROM erating_hymx.LOG_USER_FIRST_LOGIN_INFO F, erating_hymx.LOG_ROLE_FIRST_LOGIN R
  3. WHERE R.GAME_ID = F.GAME_ID
  4. AND R.USER_ID = F.USER_ID
  5. AND R.LOG_ID >= 1829988
  6. AND R.LOG_ID < 18343137
  7. AND F.LOG_ID >= 21777088
  8. AND F.LOG_ID < 21817732
  9.   9  GROUP BY R.GAME_ID, R.USER_ID;

  10. 35399 rows selected.


  11. Execution Plan
  12. ----------------------------------------------------------
  13. Plan hash value: 2343981671

  14. ---------------------------------------------------------------------------------------------------------------
  15. | Id  | Operation                       | Name                              | Rows  | Bytes | Cost (%CPU)| Time     |
  16. ---------------------------------------------------------------------------------------------------------------
  17. |   0 | SELECT STATEMENT               |                              |     1 |    40 |     8  (13)| 00:00:01 |
  18. |   1 |  HASH GROUP BY                       |                              |     1 |    40 |     8  (13)| 00:00:01 |
  19. |   2 |   NESTED LOOPS                       |                              |       |       |            |              |
  20. |   3 |    NESTED LOOPS                |                              |     1 |    40 |     7        (0)| 00:00:01 |
  21. |   4 |     TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    |     1 |    17 |     4        (0)| 00:00:01 |
  22. |*  5 |      INDEX RANGE SCAN               | LOG_USER_FIRST_LOGIN_INFO_PK |     1 |       |     3        (0)| 00:00:01 |
  23. |*  6 |     INDEX RANGE SCAN               | LOG_ROLE_FIRST_LOGIN_IX2     |     1 |       |     2        (0)| 00:00:01 |
  24. |*  7 |    TABLE ACCESS BY INDEX ROWID | LOG_ROLE_FIRST_LOGIN              |     1 |    23 |     3        (0)| 00:00:01 |
  25. ---------------------------------------------------------------------------------------------------------------

  26. Predicate Information (identified by operation id):
  27. ---------------------------------------------------

  28.    5 - access("F"."LOG_ID">=21777088 AND "F"."LOG_ID"<21817732)
  29.    6 - access("R"."GAME_ID"="F"."GAME_ID" AND "R"."USER_ID"="F"."USER_ID")
  30.    7 - filter("R"."LOG_ID">=1829988 AND "R"."LOG_ID"<18343137)


  31. Statistics
  32. ----------------------------------------------------------
  33.           1  recursive calls
  34.           0  db block gets
  35.      136760  consistent gets
  36.           0  physical reads
  37.           0  redo size
  38.     1049679  bytes sent via SQL*Net to client
  39.       26469  bytes received via SQL*Net from client
  40.        2361  SQL*Net roundtrips to/from client
  41.           0  sorts (memory)
  42.           0  sorts (disk)
  43.       35399  rows processed
复制代码



收集统计信息:
SQL> execute dbms_stats.gather_table_stats(ownname => 'ERATING_HYMX',tabname => 'LOG_USER_FIRST_LOGIN_INFO' ,estimate_percent => 30  ,cascade => true);

SQL> execute dbms_stats.gather_table_stats(ownname => 'ERATING_HYMX',tabname => 'LOG_ROLE_FIRST_LOGIN' ,estimate_percent => 30  ,cascade => true);


执行计划,执行第一次、第二次
  1. SQL> SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID)
  2. FROM erating_hymx.LOG_USER_FIRST_LOGIN_INFO F, erating_hymx.LOG_ROLE_FIRST_LOGIN R
  3. WHERE R.GAME_ID = F.GAME_ID
  4. AND R.USER_ID = F.USER_ID
  5. AND R.LOG_ID >= 1829988
  6. AND R.LOG_ID < 18343137
  7. AND F.LOG_ID >= 21777088
  8. AND F.LOG_ID < 21817732
  9.   9  GROUP BY R.GAME_ID, R.USER_ID;

  10. 35399 rows selected.


  11. Execution Plan
  12. ----------------------------------------------------------
  13. Plan hash value: 3414997560

  14. ----------------------------------------------------------------------------------------------------------------------
  15. | Id  | Operation                      | Name                             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  16. ----------------------------------------------------------------------------------------------------------------------
  17. |   0 | SELECT STATEMENT              |                              | 53138 |        2075K|             | 80043   (1)| 00:16:01 |
  18. |   1 |  HASH GROUP BY                      |                              | 53138 |        2075K|        2720K| 80043   (1)| 00:16:01 |
  19. |*  2 |   HASH JOIN                      |                              | 53138 |        2075K|             | 79496   (1)| 00:15:54 |
  20. |   3 |    TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    | 40503 |         672K|             | 28156   (1)| 00:05:38 |
  21. |*  4 |     INDEX RANGE SCAN              | LOG_USER_FIRST_LOGIN_INFO_PK | 40503 |             |             |         143   (0)| 00:00:02 |
  22. |*  5 |    TABLE ACCESS FULL              | LOG_ROLE_FIRST_LOGIN             |          16M|         361M|             | 51261   (1)| 00:10:16 |
  23. ----------------------------------------------------------------------------------------------------------------------

  24. Predicate Information (identified by operation id):
  25. ---------------------------------------------------

  26.    2 - access("R"."GAME_ID"="F"."GAME_ID" AND "R"."USER_ID"="F"."USER_ID")
  27.    4 - access("F"."LOG_ID">=21777088 AND "F"."LOG_ID"<21817732)
  28.    5 - filter("R"."LOG_ID">=1829988 AND "R"."LOG_ID"<18343137)


  29. Statistics
  30. ----------------------------------------------------------
  31.           1  recursive calls
  32.           0  db block gets
  33.      215485  consistent gets
  34.      187356  physical reads
  35.           0  redo size
  36.     1092229  bytes sent via SQL*Net to client
  37.       26469  bytes received via SQL*Net from client
  38.        2361  SQL*Net roundtrips to/from client
  39.           0  sorts (memory)
  40.           0  sorts (disk)
  41.       35399  rows processed




  42. SQL> SELECT R.GAME_ID, R.USER_ID, MIN(ROLE_ID)
  43. FROM erating_hymx.LOG_USER_FIRST_LOGIN_INFO F, erating_hymx.LOG_ROLE_FIRST_LOGIN R
  44. WHERE R.GAME_ID = F.GAME_ID
  45. AND R.USER_ID = F.USER_ID
  46. AND R.LOG_ID >= 1829988
  47. AND R.LOG_ID < 18343137
  48. AND F.LOG_ID >= 21777088
  49. AND F.LOG_ID < 21817732
  50.   9  GROUP BY R.GAME_ID, R.USER_ID
  51. 10  ;

  52. 35399 rows selected.


  53. Execution Plan
  54. ----------------------------------------------------------
  55. Plan hash value: 3414997560

  56. ----------------------------------------------------------------------------------------------------------------------
  57. | Id  | Operation                      | Name                             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
  58. ----------------------------------------------------------------------------------------------------------------------
  59. |   0 | SELECT STATEMENT              |                              | 53138 |        2075K|             | 80043   (1)| 00:16:01 |
  60. |   1 |  HASH GROUP BY                      |                              | 53138 |        2075K|        2720K| 80043   (1)| 00:16:01 |
  61. |*  2 |   HASH JOIN                      |                              | 53138 |        2075K|             | 79496   (1)| 00:15:54 |
  62. |   3 |    TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    | 40503 |         672K|             | 28156   (1)| 00:05:38 |
  63. |*  4 |     INDEX RANGE SCAN              | LOG_USER_FIRST_LOGIN_INFO_PK | 40503 |             |             |         143   (0)| 00:00:02 |
  64. |*  5 |    TABLE ACCESS FULL              | LOG_ROLE_FIRST_LOGIN             |          16M|         361M|             | 51261   (1)| 00:10:16 |
  65. ----------------------------------------------------------------------------------------------------------------------

  66. Predicate Information (identified by operation id):
  67. ---------------------------------------------------

  68.    2 - access("R"."GAME_ID"="F"."GAME_ID" AND "R"."USER_ID"="F"."USER_ID")
  69.    4 - access("F"."LOG_ID">=21777088 AND "F"."LOG_ID"<21817732)
  70.    5 - filter("R"."LOG_ID">=1829988 AND "R"."LOG_ID"<18343137)


  71. Statistics
  72. ----------------------------------------------------------
  73.           0  recursive calls
  74.           0  db block gets
  75.      136565  consistent gets
  76.          18  physical reads
  77.           0  redo size
  78.     1049725  bytes sent via SQL*Net to client
  79.       26469  bytes received via SQL*Net from client
  80.        2361  SQL*Net roundtrips to/from client
  81.           0  sorts (memory)
  82.           0  sorts (disk)
  83.       35399  rows processed
复制代码

[ 本帖最后由 saup007 于 2012-4-23 16:44 编辑 ]

回复 只看该作者 道具 举报

8#
发表于 2012-4-23 18:30:00
select * from table(dbms_xplan.display_awr('druk61dn87x31',null,null,'all'));

显示 AWR 历史记录中存在3个 不同的执行计划

LOG_USER_FIRST_LOGIN_INFO_PK
LOG_USER_FIRST_LOGIN_INFO_IX
LOG_ROLE_FIRST_LOGIN_IX2

区别在于三个 不同索引的range scan ,具体 "今天早上却跑了25分钟" 使用的是哪一个执行计划 请参考V$SQL 视图的FIRST_LOAD_TIME


就4楼的回复来看  


一开始 LOG_USER_FIRST_LOGIN_INFO 和 LOG_ROLE_FIRST_LOGIN 2张表的统计信息是陈旧的

考虑收集 LOG_ROLE_FIRST_LOGIN 上的histogram 避免使用TABLE ACCESS FULL  全表扫描 LOG_ROLE_FIRST_LOGIN

可以减少较多的逻辑读

给出以下查询的输出:


SELECT count(1)
  FROM erating_hymx.LOG_ROLE_FIRST_LOGIN R
WHERE R.LOG_ID >= 1829988
   AND R.LOG_ID < 18343137;
   
   
   
SELECT count(1)
  FROM erating_hymx.LOG_USER_FIRST_LOGIN_INFO F
WHERE F.LOG_ID >= 21777088
   AND F.LOG_ID < 21817732;

回复 只看该作者 道具 举报

9#
发表于 2012-4-24 10:09:21

回复 8# 的帖子

SELECT count(1)
  FROM erating_hymx.LOG_ROLE_FIRST_LOGIN R
WHERE R.LOG_ID >= 18299887
   AND R.LOG_ID < 18343137;

--43250

SELECT count(1)
  FROM erating_hymx.LOG_USER_FIRST_LOGIN_INFO F
WHERE F.LOG_ID >= 21777088
   AND F.LOG_ID < 21817732;
--40644
非常感谢刘大。。。
修改后,第一个sql范围少了一位数。

[ 本帖最后由 saup007 于 2012-4-24 10:27 编辑 ]

回复 只看该作者 道具 举报

10#
发表于 2012-4-24 10:53:13
http://www.itpub.net/forum.php?m ... &extra=#pid19402343

我在itpub发贴,有位同学写个SQL。我看可以。
intersect求交集,也是35399行,数据应该对。
  1. select distinct zz.GAME_ID,zz.USER_ID,zz.ROLE_ID
  2. from (
  3. select MIN(R.ROLE_ID) ROLE_ID,R.GAME_ID, R.USER_ID
  4. from
  5. LOG_ROLE_FIRST_LOGIN R
  6. where R.LOG_ID >= 18299887
  7. AND   R.LOG_ID < 18343137
  8. group by R.GAME_ID, R.USER_ID
  9. ) zz ,LOG_USER_FIRST_LOGIN_INFO F
  10. where
  11. zz.GAME_ID=F.GAME_ID and
  12. zz.USER_ID=F.USER_ID  
  13. AND F.LOG_ID >= 21777088
  14. 14  AND F.LOG_ID < 21817732 ;

  15. 35399 rows selected.

  16. Execution Plan----------------------------------------------------------Plan hash value: 1723331755
  17. -----------------------------------------------------------------------------------------------------------------------| Id  | Operation                       | Name                              | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |-----------------------------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT               |                              | 40522 |  2057K|       | 59813        (1)| 00:11:58 ||   1 |  HASH UNIQUE                       |                              | 40522 |  2057K|       | 59813        (1)| 00:11:58 ||   2 |   HASH GROUP BY                |                              | 40522 |  2057K|  2568K| 59813        (1)| 00:11:58 ||*  3 |    HASH JOIN                       |                              | 40522 |  2057K|       | 59289        (1)| 00:11:52 ||   4 |     TABLE ACCESS BY INDEX ROWID| LOG_ROLE_FIRST_LOGIN              | 43122 |   968K|       | 31131        (1)| 00:06:14 ||*  5 |      INDEX RANGE SCAN               | LOG_ROLE_FIRST_LOGIN_PK      | 43122 |       |       |   150        (0)| 00:00:02 ||   6 |     TABLE ACCESS BY INDEX ROWID| LOG_USER_FIRST_LOGIN_INFO    | 40503 |  1147K|       | 28156        (1)| 00:05:38 ||*  7 |      INDEX RANGE SCAN               | LOG_USER_FIRST_LOGIN_INFO_PK | 40503 |       |       |   143        (0)| 00:00:02 |-----------------------------------------------------------------------------------------------------------------------
  18. Predicate Information (identified by operation id):---------------------------------------------------
  19.    3 - access("R"."GAME_ID"="F"."GAME_ID" AND "R"."USER_ID"="F"."USER_ID")   5 - access("R"."LOG_ID">=18299887 AND "R"."LOG_ID"<18343137)   7 - access("F"."LOG_ID">=21777088 AND "F"."LOG_ID"<21817732)

  20. Statistics----------------------------------------------------------          0  recursive calls          0  db block gets      58646  consistent gets          0  physical reads          0  redo size    1049678  bytes sent via SQL*Net to client      26469  bytes received via SQL*Net from client       2361  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)      35399  rows processed
复制代码

囧,编辑好几次,都好乱。。

谢谢刘大。。。

[ 本帖最后由 saup007 于 2012-4-24 11:03 编辑 ]

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-11-15 12:21 , Processed in 0.063614 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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