ITPub博客

首页 > 数据库 > Oracle > [20240328]为什么找不到执行计划.txt

[20240328]为什么找不到执行计划.txt

原创 Oracle 作者:lfree 时间:2024-04-06 21:02:06 0 删除 编辑

[20240328]为什么找不到执行计划.txt

--//最近一直在优化生产系统监控sql语句,遇到一个无法解析的情况,记录下来.

1.环境:
SYS@192.168.100.235:1521/orcl> @ pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 19.0.0.0.0
BANNER                        : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY                 : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.问题提出:
SYS@192.168.100.235:1521/orcl> @ sqlhh 89u3urxj9zs1x .15
time unit : millisecond
BEGIN_INTERVAL_TIME    INST_ID SQL_ID        PLAN_HASH_VALUE EXECUTIONS ELA_MS_PER_EXEC CPU_MS_PER_EXEC ROWS_PER_EXEC LIOS_PER_EXEC BLKRD_PER_EXEC IOW_MS_PER_EXEC  AVG_IOW_MS CLW_MS_PER_EXEC APW_MS_PER_EXEC CCW_MS_PER_EXEC
------------------- ---------- ------------- --------------- ---------- --------------- --------------- ------------- ------------- -------------- --------------- ----------- --------------- --------------- ---------------
2024-03-25 07:00:34          1 89u3urxj9zs1x      2280867756          7              31              31          10.0             0              0               0         0.0               0               0               0
2024-03-25 07:00:34          1 89u3urxj9zs1x      4173261031          6            4069            4058          10.0        150592              0               0         0.0               0               0               0
2024-03-25 08:00:38          1 89u3urxj9zs1x      2280867756          7              34              34          10.0             0              0               0         0.0               0               0               0
2024-03-25 08:00:38          1 89u3urxj9zs1x      4173261031          8            4755            4743          10.0        212289              0               0         0.0               0               0               0
2024-03-25 09:00:40          1 89u3urxj9zs1x      2280867756          8              33              32          10.0             0              0               0         0.0               0               0               0
2024-03-25 09:00:40          1 89u3urxj9zs1x      4173261031         10            5036            5032          10.0        236710              0               0         0.0               0               0               0
6 rows selected.
--//出现2个执行计划,从输出看可以发现其中1个执行很快,但是我看sql语句时出现疑惑,该语句不会执行很快,理论讲
--//PLAN_HASH_VALUE=2280867756不应该出现在dba_hist_sqlstat视图里面(LIOS_PER_EXEC=0)

SYS@192.168.100.235:1521/orcl> @ sql_id 89u3urxj9zs1x
--SQL_ID = 89u3urxj9zs1x
SELECT 'DISK_READ' ROWINFO
     , disk_read.*
  FROM (
        SELECT DISK_READS
             , EXECUTIONS
             , ROUND(disk_reads / decode(executions, 0, 1, executions), 2) READS_PER_EXEC
             , round(CPU_TIME/1000000, 2) CPU_TIME
             , PARSING_SCHEMA_NAME
             , LAST_ACTIVE_TIME
             , SQL_ID
             , SQL_FULLTEXT
          FROM v$sqlarea
         WHERE executions > 0
 order by disk_reads desc) disk_read
 WHERE rownum     < 11;
--//这条语句不可能执行很快的.

3.分析:
--//看看0点的执行情况.

SYS@192.168.100.235:1521/orcl> @ ashtop to_char(sample_time,'hh24mi'),client_id,SQL_PLAN_HASH_VALUE sql_id='89u3urxj9zs1x' trunc(sysdate) trunc(sysdate)+1/24
    Total                                                                                                                                                     Distinct Distinct    Distinct
  Seconds     AAS %This   TO_C CLIENT_ID       SQL_PLAN_HASH_VALUE FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ---- --------------- ------------------- ------------------- ------------------- ---------- -------- -----------
        5      .0   17% | 0007 192.168.101.227          4173261031 2024-03-29 00:07:26 2024-03-29 00:07:30          1        5           1
        5      .0   17% | 0057 192.168.101.217          4173261031 2024-03-29 00:57:39 2024-03-29 00:57:43          1        5           1
        4      .0   13% | 0017 192.168.101.227          4173261031 2024-03-29 00:17:29 2024-03-29 00:17:32          1        4           1
        4      .0   13% | 0027 192.168.101.227          4173261031 2024-03-29 00:27:30 2024-03-29 00:27:33          1        4           1
        4      .0   13% | 0037 192.168.101.227          4173261031 2024-03-29 00:37:31 2024-03-29 00:37:34          1        4           1
        4      .0   13% | 0047 192.168.101.227          4173261031 2024-03-29 00:47:34 2024-03-29 00:47:37          1        4           1
        4      .0   13% | 0058 192.168.101.217          4173261031 2024-03-29 00:58:22 2024-03-29 00:58:25          1        4           1
7 rows selected.
--//噢,有两台机器同时做这类监控,再次重申我的观点,这类监控就是没用的东西.而且执行计划PLAN_HASH_VALUE=4173261031.
--//这就有点奇怪了.ashtop脚本查询来源是v$active_session_history视图.而前面的sqlhh查询来源 dba_hist_sqlstat视图.
--//理论dba_hist_sqlstat记录信息来源v$active_session_history,怎么会在dba_hist_sqlstat视图里出现其它PLAN_HASH_VALUE值呢.

SYS@192.168.100.235:1521/orcl> @ ashtop to_char(sample_time,'hh24mi'),client_id,SQL_PLAN_HASH_VALUE "sql_id='89u3urxj9zs1x' and client_id='192.168.101.217'" trunc(sysdate) trunc(sysdate)+1/24
    Total                                                                                                                                                     Distinct Distinct    Distinct
  Seconds     AAS %This   TO_C CLIENT_ID       SQL_PLAN_HASH_VALUE FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ---- --------------- ------------------- ------------------- ------------------- ---------- -------- -----------
        5      .0   56% | 0057 192.168.101.217          4173261031 2024-03-29 00:57:39 2024-03-29 00:57:43          1        5           1
        4      .0   44% | 0058 192.168.101.217          4173261031 2024-03-29 00:58:22 2024-03-29 00:58:25          1        4           1

SYS@192.168.100.235:1521/orcl> @ ashtop to_char(sample_time,'hh24mi'),client_id,SQL_PLAN_HASH_VALUE "sql_id='89u3urxj9zs1x' and client_id='192.168.101.227'" trunc(sysdate) trunc(sysdate)+1/24
    Total                                                                                                                                                     Distinct Distinct    Distinct
  Seconds     AAS %This   TO_C CLIENT_ID       SQL_PLAN_HASH_VALUE FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ---- --------------- ------------------- ------------------- ------------------- ---------- -------- -----------
        5      .0   24% | 0007 192.168.101.227          4173261031 2024-03-29 00:07:26 2024-03-29 00:07:30          1        5           1
        4      .0   19% | 0017 192.168.101.227          4173261031 2024-03-29 00:17:29 2024-03-29 00:17:32          1        4           1
        4      .0   19% | 0027 192.168.101.227          4173261031 2024-03-29 00:27:30 2024-03-29 00:27:33          1        4           1
        4      .0   19% | 0037 192.168.101.227          4173261031 2024-03-29 00:37:31 2024-03-29 00:37:34          1        4           1
        4      .0   19% | 0047 192.168.101.227          4173261031 2024-03-29 00:47:34 2024-03-29 00:47:37          1        4           1
--//注:我看了一下两台IP的机器名都是localhost.localdomain,管理混乱,连机器起一个名字都没有做好.
--//我怀疑这两个IP是同一台主机.从时间间隔看"感觉"应该是10分钟做一次这样的查询.

SYS@192.168.100.235:1521/orcl> @ ashtop to_char(sample_time,'hh24:mi'),client_id,SQL_PLAN_HASH_VALUE "sql_id='89u3urxj9zs1x' " trunc(sysdate)+1/24 trunc(sysdate)+2/24
    Total                                                                                                     Distinct Distinct    Distinct
  Seconds     AAS %This   TO_CH CLIENT_ID       SQL_PLAN_HASH_VALUE FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ----- --------------- ------------------- ------------------- ------------------- ---------- -------- -----------
        4      .0   11% | 01:08 192.168.101.227          4173261031 2024-03-29 01:08:16 2024-03-29 01:08:19          1        4           1
        5      .0   14% | 01:18 192.168.101.227          4173261031 2024-03-29 01:18:16 2024-03-29 01:18:20          1        5           1
        4      .0   11% | 01:28 192.168.101.217          4173261031 2024-03-29 01:28:24 2024-03-29 01:28:27          1        4           1
        4      .0   11% | 01:29 192.168.101.217          4173261031 2024-03-29 01:29:07 2024-03-29 01:29:10          1        4           1
        3      .0    8% | 01:38 192.168.101.217          4173261031 2024-03-29 01:38:27 2024-03-29 01:38:29          1        3           1
        5      .0   14% | 01:39 192.168.101.217          4173261031 2024-03-29 01:39:08 2024-03-29 01:39:12          1        5           1
        4      .0   11% | 01:48 192.168.101.217          4173261031 2024-03-29 01:48:29 2024-03-29 01:48:32          1        4           1
        4      .0   11% | 01:49 192.168.101.217          4173261031 2024-03-29 01:49:10 2024-03-29 01:49:13          1        4           1
        4      .0   11% | 01:58 192.168.101.227          4173261031 2024-03-29 01:58:32 2024-03-29 01:58:35          1        4           1
9 rows selected.
--//注:重新按照时间排列,不知道为什么中间的时间出现执行2次的情况,但是执行计划的PLAN_HASH_VALUE=4173261031.
--//不理解为什么执行次数会出现这样的情况.

SYS@192.168.100.235:1521/orcl> @ sqlhh 89u3urxj9zs1x 1
time unit : millisecond
BEGIN_INTERVAL_TIME    INST_ID SQL_ID        PLAN_HASH_VALUE EXECUTIONS ELA_MS_PER_EXEC CPU_MS_PER_EXEC ROWS_PER_EXEC LIOS_PER_EXEC BLKRD_PER_EXEC IOW_MS_PER_EXEC  AVG_IOW_MS CLW_MS_PER_EXEC APW_MS_PER_EXEC CCW_MS_PER_EXEC
------------------- ---------- ------------- --------------- ---------- --------------- --------------- ------------- ------------- -------------- --------------- ----------- --------------- --------------- ---------------
...
2024-03-29 00:00:43          1 89u3urxj9zs1x      2280867756          8              38              37          10.0             0              0               0         0.0               0               0               0
2024-03-29 00:00:43          1 89u3urxj9zs1x      4173261031          7            4374            4367          10.0        195833              0               0         0.0               0               0               0
2024-03-29 01:00:46          1 89u3urxj9zs1x      2280867756          7              38              37          10.0             0              0               0         0.0               0               0               0
2024-03-29 01:00:46          1 89u3urxj9zs1x      4173261031          9            4174            4156          10.0        185793              0               0         0.0               0               0               0
2024-03-29 02:00:48          1 89u3urxj9zs1x      2280867756          7              39              37          10.0             0              0               0         0.0               0               0               0
2024-03-29 02:00:48          1 89u3urxj9zs1x      4173261031          9            4463            4455          10.0        195599              0               0         0.0               0               0               0
....
2024-03-29 07:00:01          1 89u3urxj9zs1x      4173261031          8            4051            4026           8.8        179319              0               0         0.0               0               0               0
46 rows selected.
--//0-1点记录8+7=15次,1-2点记录7+9=16次.是否可以理解执行快的v$active_session_history没有记录.

SYS@192.168.100.235:1521/orcl> @ dpcawr 89u3urxj9zs1x '' 2280867756
no rows selected

--//在awr里面根本没有相关记录,PLAN_HASH_VALUE=2280867756.

SYS@192.168.100.235:1521/orcl> @ dpcawr 89u3urxj9zs1x adaptive 4173261031
PLAN_TABLE_OUTPUT
--------------------
SQL_ID 89u3urxj9zs1x
--------------------
select 'DISK_READ' ROWINFO,  disk_read.* from (select
DISK_READS,EXECUTIONS, ROUND(disk_reads / decode(executions, 0, 1,
executions),2) READS_PER_EXEC,round(CPU_TIME/1000000,2)
CPU_TIME,PARSING_SCHEMA_NAME,LAST_ACTIVE_TIME,SQL_ID,SQL_FULLTEXT from
v$sqlarea where executions > 0  order by disk_reads desc) disk_read
where rownum < 11
Plan hash value: 4173261031
----------------------------------------------------------------------------------------------------
| Id  | Operation               | Name                    | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |                         |        |       |     1 (100)|          |
|   1 |  COUNT STOPKEY          |                         |        |       |            |          |
|   2 |   VIEW                  |                         |      1 | 16519 |     1 (100)| 00:00:01 |
|   3 |    SORT ORDER BY STOPKEY|                         |      1 | 16532 |     1 (100)| 00:00:01 |
|   4 |     FIXED TABLE FULL    | X$KGLCURSOR_CHILD_SQLID |      1 | 16532 |     0   (0)|          |
----------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   2 - SEL$71D7A081 / DISK_READ@SEL$1
   3 - SEL$71D7A081
   4 - SEL$71D7A081 / X$KGLCURSOR_CHILD_SQLID@SEL$5
Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level

--//仅仅存在PLAN_HASH_VALUE=4173261031的执行计划.
--//为什么出现这样的情况我无法解析.
--//顺便说一下这个版本的PLAN_HASH_VALUE计算与其它机器不同.
--//参考链接: https://blog.itpub.net/267265/viewspace-2922082/ =>[20221104]执行计划一样Plan hash value不同.txt

SYS@127.0.0.1:9015/ywdb> @ sqlhh 89u3urxj9zs1x .2
time unit : millisecond
BEGIN_INTERVAL_TIME    INST_ID SQL_ID        PLAN_HASH_VALUE EXECUTIONS ELA_MS_PER_EXEC CPU_MS_PER_EXEC ROWS_PER_EXEC LIOS_PER_EXEC BLKRD_PER_EXEC IOW_MS_PER_EXEC  AVG_IOW_MS CLW_MS_PER_EXEC APW_MS_PER_EXEC CCW_MS_PER_EXEC
------------------- ---------- ------------- --------------- ---------- --------------- --------------- ------------- ------------- -------------- --------------- ----------- --------------- --------------- ---------------
2024-03-29 05:00:05          2 89u3urxj9zs1x      2280867756          6            1500            1440          10.0             0              0               0         0.0               0               0               0
2024-03-29 06:00:16          2 89u3urxj9zs1x      2280867756          6            1345            1308          10.0             0              0               0         0.0               0               0               0
2024-03-29 07:00:33          2 89u3urxj9zs1x      2280867756          6            1314            1235          10.0             0              0               0         0.0               0               0               0
2024-03-29 08:00:47          2 89u3urxj9zs1x      2280867756          6            1285            1269          10.0             0              0               0         0.0               0               0               0
--//其它机器看到PLAN_HASH_VALUE=2280867756.顺便说一个这样的监控基本没用,看看6次执行在实例2.看到实例2的执行情况,
--//根本没有考虑rac环境,这样的监控有什么用,拿来分析问题不是漏掉了实例1的情况吗?
--//扫描是v$sqlarea,这样的产品拿来买不是欺骗用户吗?

SYS@127.0.0.1:9014/ywdb> @ ashtop to_char(sample_time,'hh24:mi'),client_id sql_id='89u3urxj9zs1x' trunc(sysdate) trunc(sysdate)+1/24
    Total                                                                                Distinct Distinct    Distinct
  Seconds     AAS %This   TO_CH CLIENT_ID      FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ----- -------------- ------------------- ------------------- ---------- -------- -----------
        2      .0   22% | 00:09 192.168.90.217 2024-03-29 00:09:14 2024-03-29 00:09:15          1        2           1
        2      .0   22% | 00:19 192.168.90.217 2024-03-29 00:19:20 2024-03-29 00:19:21          1        2           1
        2      .0   22% | 00:39 192.168.90.217 2024-03-29 00:39:15 2024-03-29 00:39:16          1        2           1
        1      .0   11% | 00:29 192.168.90.217 2024-03-29 00:29:15 2024-03-29 00:29:15          1        1           1
        1      .0   11% | 00:49 192.168.90.217 2024-03-29 00:49:16 2024-03-29 00:49:16          1        1           1
        1      .0   11% | 00:59 192.168.90.217 2024-03-29 00:59:18 2024-03-29 00:59:18          1        1           1
6 rows selected.
--//其它机器执行都是6次,也许上面的主机是一台虚拟机器192.168.100.235,还是许多现象无法解析.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3011593/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969659