[20251219]测试sql语句子光标的执行性能2(21c).txt

[20251219]测试sql语句子光标的执行性能2(21c).txt

--//昨天下午测试在21c下sql语句子光标的执行性能,当时得出的规律如下:
--//建立128个子光标,oracle软软解析探查采用那个子光标的执行计划,是以ChildNumber=99作为分界点开始向ChildNumber=0探查,然
--//后再从ChildNumber=100->ChildNumber=127.

--//这样的探查方式,选择ChildNumber=99的语句执行最快,而选择ChildNumber=127的执行最慢。而以前11g的测试是选择
--//ChildNumber=127的执行最快,ChildNumber=0的最慢

--//当时已经很晚了,回家路上想oracle做出这样有它自己的考虑,毕竟超过100个子光标的情况很少见,如果大于100说明该语句遇到
--//bug或者什么问题,而且许多情况下一些子光标会不再使用,这样新产生的子光标多数情况下也不会大于100.

--//另外仔细看了以前的测试笔记,也遇到中间的某个子光标查询变快的情况,发现该子光标刷出共享池,实际情况仅仅刷出子光标的堆
--//0以及堆6,再次执行建立子光标堆0以及堆6.

--//换一句话讲,前面看到的"规律"仅仅是全部子光标都在的情况下才正确。其探查按照转储library_cache中CursorDiagnosticsNodes
--//显示顺序相关.

--//还是先验证我前面看到的情况是否正确。

1.环境:
SCOTT@book01p> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SYS@book> @ hidez _cursor_obsolete_threshold
SYS@book> @ pr
==============================
NUM                           : 3719
N_HEX                         :   E87
CON_ID                        : 0
NAME                          : _cursor_obsolete_threshold
DESCRIPTION                   : Number of cursors per parent before obsoletion.
DEFAULT_VALUE                 : TRUE
SESSION_VALUE                 : 8192
SYSTEM_VALUE                  : 8192
ISSES_MODIFIABLE              : TRUE
ISSYS_MODIFIABLE              : FALSE

2.建立测试脚本:
create table job_times (sid number, time_ela number,method varchar2(20));

create table t as select rownum id ,cast('test' as varchar2(10)) name from dual ;
alter table t modify ( id  not null );
create unique index i_t_id on t(id);
--//分析表略。

--//产生128个子光标.
$ cat m13.txt
--//alter session set session_cached_cursors=0;
set verify off
variable vmethod varchar2(20);
exec :vmethod := '&&2';
alter session set optimizer_index_cost_adj = &&3;
declare
v_id number;
v_d date;
l_count PLS_INTEGER;
begin
    for i in 1 .. &&1 loop
        SELECT COUNT(NAME) INTO v_id FROM T WHERE ID=1;
    end loop;
end ;
/
quit
--//说明:参数1表示循环次数,参数2表示method(在这里暂时没用),参数3表示设置optimizer_index_cost_adj。

$ shuf -i 1-128 > shuf.txt
--//建立随机显示1-128的数字列表。

$ awk 'NR ==1 || NR == 100 || NR==128   {print $0}' shuf.txt
83
30
43

$ cat shuf.txt | xargs -IQ sqlplus -s -l scott/book@book01p @m13.txt 6 xx Q > /dev/null
--//每个情况执行6次,保证其在共享池中.sql_id='5zfc9hksnyp90',注意sql语句全部大写,因为PL/SQL内部做了转化为大写。

SYS@book> @ s2h 5zfc9hksnyp90
SQL_ID         HASH_VALUE HASH_HEX  KGL_BUCKET KGL_BUCKET_HEX
------------- ----------- --------- ---------- --------------
5zfc9hksnyp90  2974766368 b14f5520       87328 15520

SYS@book> oradebug setmypid
Statement processed.
SYS@book> oradebug dump library_cache 8
Statement processed.

$ sed -n "124,128p" shuf.txt
1
105
119
68
43

--//查看转储:
    NamespaceDump:
      Parent Cursor:  sql_id=5zfc9hksnyp90 parent=0x6eb59290 maxchild=128 plk=n ppn=n prsfcnt=0 obscnt=0
        CursorDiagnosticsNodes:
          ChildNode:  ChildNumber=126 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 68                   43
          ChildNode:  ChildNumber=125 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 119                  68
          ChildNode:  ChildNumber=124 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 105                  119
          ChildNode:  ChildNumber=123 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 1                    105
          ChildNode:  ChildNumber=122 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 124                  1
          ChildNode:  ChildNumber=121 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 36                   124
          ChildNode:  ChildNumber=120 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 40                   36
          ChildNode:  ChildNumber=119 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 22                   40
          ChildNode:  ChildNumber=118 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 116                  22
          ChildNode:  ChildNumber=117 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 55                   116
          ChildNode:  ChildNumber=116 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 31                   55
          ChildNode:  ChildNumber=115 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 54                   31
          ChildNode:  ChildNumber=114 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 113                  54
          ChildNode:  ChildNumber=113 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 84                   113
          ChildNode:  ChildNumber=112 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 74                   84
          ChildNode:  ChildNumber=111 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 53                   74
          ChildNode:  ChildNumber=110 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 12                   53
          ChildNode:  ChildNumber=109 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 27                   12
          ChildNode:  ChildNumber=108 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 63                   27
          ChildNode:  ChildNumber=107 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 47                   63
          ChildNode:  ChildNumber=106 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 13                   47
          ChildNode:  ChildNumber=105 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 35                   13
          ChildNode:  ChildNumber=104 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 98                   35
          ChildNode:  ChildNumber=103 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 44                   98
          ChildNode:  ChildNumber=102 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 78                   44
          ChildNode:  ChildNumber=101 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 71                   78
          ChildNode:  ChildNumber=100 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 29                   71
          ChildNode:  ChildNumber=99 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 30                   29
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          ChildNode:  ChildNumber=98 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 16                   30
          ChildNode:  ChildNumber=97 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 61                   16
          ChildNode:  ChildNumber=96 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 5                    61
          ChildNode:  ChildNumber=95 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 25                   5
          ChildNode:  ChildNumber=94 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 59                   25
          ChildNode:  ChildNumber=93 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 93                   59
          ChildNode:  ChildNumber=92 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 114                  93
          ChildNode:  ChildNumber=91 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 79                   114
          ChildNode:  ChildNumber=90 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 117                  79
          ChildNode:  ChildNumber=89 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 89                   117
          ChildNode:  ChildNumber=88 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 111                  89
          ChildNode:  ChildNumber=87 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 77                   111
          ChildNode:  ChildNumber=86 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 45                   77
          ChildNode:  ChildNumber=85 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 107                  45
          ChildNode:  ChildNumber=84 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 21                   107
          ChildNode:  ChildNumber=83 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 120                  21
          ChildNode:  ChildNumber=82 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 28                   120
          ChildNode:  ChildNumber=81 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 86                   28
          ChildNode:  ChildNumber=80 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 17                   86
          ChildNode:  ChildNumber=79 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 67                   17
          ChildNode:  ChildNumber=78 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 127                  67
          ChildNode:  ChildNumber=77 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 101                  127
          ChildNode:  ChildNumber=76 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 33                   101
          ChildNode:  ChildNumber=75 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 58                   33
          ChildNode:  ChildNumber=74 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 4                    58
          ChildNode:  ChildNumber=73 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 87                   4
          ChildNode:  ChildNumber=72 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 110                  87
          ChildNode:  ChildNumber=71 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 112                  110
          ChildNode:  ChildNumber=70 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 73                   112
          ChildNode:  ChildNumber=69 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 82                   73
          ChildNode:  ChildNumber=68 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 19                   82
          ChildNode:  ChildNumber=67 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 69                   19
          ChildNode:  ChildNumber=66 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 23                   69
          ChildNode:  ChildNumber=65 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 109                  23
          ChildNode:  ChildNumber=64 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 91                   109
          ChildNode:  ChildNumber=63 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 92                   91
          ChildNode:  ChildNumber=62 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 48                   92
          ChildNode:  ChildNumber=61 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 3                    48
          ChildNode:  ChildNumber=60 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 122                  3
          ChildNode:  ChildNumber=59 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 51                   122
          ChildNode:  ChildNumber=58 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 90                   51
          ChildNode:  ChildNumber=57 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 10                   90
          ChildNode:  ChildNumber=56 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 7                    10
          ChildNode:  ChildNumber=55 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 95                   7
          ChildNode:  ChildNumber=54 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 38                   95
          ChildNode:  ChildNumber=53 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 9                    38
          ChildNode:  ChildNumber=52 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 52                   9
          ChildNode:  ChildNumber=51 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 97                   52
          ChildNode:  ChildNumber=50 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 24                   97
          ChildNode:  ChildNumber=49 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 99                   24
          ChildNode:  ChildNumber=48 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 75                   99
          ChildNode:  ChildNumber=47 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 50                   75
          ChildNode:  ChildNumber=46 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 57                   50
          ChildNode:  ChildNumber=45 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 128                  57
          ChildNode:  ChildNumber=44 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 108                  128
          ChildNode:  ChildNumber=43 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 118                  108
          ChildNode:  ChildNumber=42 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 72                   118
          ChildNode:  ChildNumber=41 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 32                   72
          ChildNode:  ChildNumber=40 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 85                   32
          ChildNode:  ChildNumber=39 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 37                   85
          ChildNode:  ChildNumber=38 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 88                   37
          ChildNode:  ChildNumber=37 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 115                  88
          ChildNode:  ChildNumber=36 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 41                   115
          ChildNode:  ChildNumber=35 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 6                    41
          ChildNode:  ChildNumber=34 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 123                  6
          ChildNode:  ChildNumber=33 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 62                   123
          ChildNode:  ChildNumber=32 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 106                  62
          ChildNode:  ChildNumber=31 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 80                   106
          ChildNode:  ChildNumber=30 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 65                   80
          ChildNode:  ChildNumber=29 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 46                   65
          ChildNode:  ChildNumber=28 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 11                   46
          ChildNode:  ChildNumber=27 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 125                  11
          ChildNode:  ChildNumber=26 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 8                    125
          ChildNode:  ChildNumber=25 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 18                   8
          ChildNode:  ChildNumber=24 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 42                   18
          ChildNode:  ChildNumber=23 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 39                   42
          ChildNode:  ChildNumber=22 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 94                   39
          ChildNode:  ChildNumber=21 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 15                   94
          ChildNode:  ChildNumber=20 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 81                   15
          ChildNode:  ChildNumber=19 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 96                   81
          ChildNode:  ChildNumber=18 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 64                   96
          ChildNode:  ChildNumber=17 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 49                   64
          ChildNode:  ChildNumber=16 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 70                   49
          ChildNode:  ChildNumber=15 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 103                  70
          ChildNode:  ChildNumber=14 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 2                    103
          ChildNode:  ChildNumber=13 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 14                   2
          ChildNode:  ChildNumber=12 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 76                   14
          ChildNode:  ChildNumber=11 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 100                  76
          ChildNode:  ChildNumber=10 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 34                   100
          ChildNode:  ChildNumber=9 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 121                  34
          ChildNode:  ChildNumber=8 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 56                   121
          ChildNode:  ChildNumber=7 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 126                  56
          ChildNode:  ChildNumber=6 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 66                   126
          ChildNode:  ChildNumber=5 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 104                  66
          ChildNode:  ChildNumber=4 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 26                   104
          ChildNode:  ChildNumber=3 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 102                  26
          ChildNode:  ChildNumber=2 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 60                   102
          ChildNode:  ChildNumber=1 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 20                   60
          ChildNode:  ChildNumber=0 ID=3 reason=Optimizer mismatch(12) size=2x508 optimizer_index_cost_adj= 83                   20

$ sed -n "1,5p" shuf.txt
83
20
60
102
26

--//测试ChildNumber=99,0,128的执行情况。分别对应optimizer_index_cost_adj= 30,43,83.
--//测试前修改m13.txt

$ cat  m13.txt
alter session set session_cached_cursors=0;
set verify off
variable vmethod varchar2(20);
exec :vmethod := '&&2';
alter session set optimizer_index_cost_adj = &&3;
declare
v_id number;
v_d date;
l_count PLS_INTEGER;
begin
    for i in 1 .. &&1 loop
        SELECT COUNT(NAME) INTO v_id FROM T WHERE ID=1;
    end loop;
end ;
/
quit

$ awk 'NR ==1 || NR== 99 || NR == 100 || NR == 101 || NR==128 {print $0}' shuf.txt | xargs -IQ  bash -c "time sqlplus -s -l scott/book@book01p @m13.txt 2e5 xx Q > /dev/null 2>&1" 2>&1 | grep real
real    0m13.053s --//1
real    0m7.185s  --//99
real    0m7.182s  --//100
real    0m12.700s --//101
real    0m15.124s --//128
--//符合前面我的判断。

3.看看并发执行:
$ awk 'NR ==1 || NR== 99 || NR == 100 || NR == 101 || NR==128 {print NR, $0}' shuf.txt
1 83
99 16
100 30
101 29
128 43

--//测试childnum=99.
$ zzdate ; seq 50 | xargs -IQ -P 50 sqlplus -s -l scott/book@book01p @m13.txt 2e4 xx 30 > /dev/null   ; zzdate
trunc(sysdate)+10/24+14/1440+15/86400 -1766110455.583240506
trunc(sysdate)+10/24+14/1440+23/86400 1766110463.366355420
--//Sum = 7.783114914

SYS@book> @ ashtop sql_id,event,p1raw 1=1 trunc(sysdate)+10/24+14/1440+15/86400 trunc(sysdate)+10/24+14/1440+23/86400
    Total                                                                                                                  Distinct Distinct    Distinct
  Seconds     AAS %This   SQL_ID        EVENT                  P1RAW             FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ------------- ---------------------- ----------------- ------------------- ------------------- ---------- -------- -----------
       50     6.3   27% |               library cache: mutex X 00000000B14F5520  2025-12-19 10:14:18 2025-12-19 10:14:22          1        5           5
       47     5.9   26% | 5zfc9hksnyp90                                          2025-12-19 10:14:16 2025-12-19 10:14:22         30        7          35
       31     3.9   17% | 5zfc9hksnyp90 library cache: mutex X 00000000B14F5520  2025-12-19 10:14:17 2025-12-19 10:14:22          1        6           6
       19     2.4   10% | 5h6jmnvr4zd4g                                          2025-12-19 10:14:17 2025-12-19 10:14:22         18        6          18
       16     2.0    9% |                                                        2025-12-19 10:14:17 2025-12-19 10:14:22          1        5           5
       11     1.4    6% | 5h6jmnvr4zd4g library cache: mutex X 00000000B14F5520  2025-12-19 10:14:18 2025-12-19 10:14:22         10        5          10
        5      .6    3% | 5zfc9hksnyp90 cursor: mutex S        0000000000000000  2025-12-19 10:14:19 2025-12-19 10:14:19          1        1           1
        2      .3    1% |               cursor: pin S          00000000B14F5520  2025-12-19 10:14:21 2025-12-19 10:14:21          1        1           1
        1      .1    1% | 5zfc9hksnyp90 cursor: mutex S        00000000B14F5520  2025-12-19 10:14:18 2025-12-19 10:14:18          1        1           1
        1      .1    1% |               log file sync          0000000000001261  2025-12-19 10:14:18 2025-12-19 10:14:18          1        1           1
10 rows selected.

SYS@book> @mutexprofz hash,loc,maddr "hash=2974766368 and ts>=trunc(sysdate)+10/24+14/1440+15/86400 and ts<=trunc(sysdate)+10/24+14/1440+23/86400"
-- MutexProf by Tanel Poder (http://www.tanelpoder.com)
-- Showing profile of top 50 sleeps...
-- column info : id idn hash hash_value=>hash_value ts=>sleep_timestamp
--               req=>requesting_session blk=>blocking_session val=>mutex_value maddr=>mutex_addr

SUM_SLEEPS      GETS_DIFF MUTEX_TYPE            HASH GET_LOCATION                      mutex_addr           SQL_ID        OBJECT_NAME
---------- -------------- --------------- ---------- --------------------------------- -------------------- ------------- --------------------------------------------------------------------------------
        55         542876 Cursor Pin      2974766368 kkslce [KKSCHLPIN2]               000000006CB29930     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        50         662427 hash table      2974766368 kkshGetNextChild [KKSHBKLOC1]     000000006EB59680     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        39         604491 Cursor Parent   2974766368 kkscsPruneChild [KKSPRTLOC27]     000000006EB59350     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        30         880309 Library Cache   2974766368 kgllkdl1  85                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        16         813287 Library Cache   2974766368 kgllkc1   57                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        13         715493 Library Cache   2974766368 kgllkc1   57                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        11         979127 Library Cache   2974766368 kgllkdl1  85                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        10         409311 Cursor Pin      2974766368 kksLockDelete [KKSCHLPIN6]        000000006CB29930     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
8 rows selected.

--//测试childnum=128.
$ zzdate ; seq 50 | xargs -IQ -P 50 sqlplus -s -l scott/book@book01p @m13.txt 1e4 xx 43 > /dev/null   ; zzdate
trunc(sysdate)+10/24+19/1440+59/86400 -1766110799.803279657
trunc(sysdate)+10/24+20/1440+31/86400 1766110831.148415907
--//Sum = 31.34513625

SYS@book> @ ashtop sql_id,event,p1raw 1=1 trunc(sysdate)+10/24+19/1440+59/86400 trunc(sysdate)+10/24+20/1440+31/86400
    Total                                                                                                                   Distinct Distinct    Distinct
  Seconds     AAS %This   SQL_ID        EVENT                   P1RAW             FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ------------- ----------------------- ----------------- ------------------- ------------------- ---------- -------- -----------
     1111    34.7   83% | 5zfc9hksnyp90 cursor: mutex S         00000000B14F5520  2025-12-19 10:20:01 2025-12-19 10:20:30          1       30          30
      140     4.4   10% | 5zfc9hksnyp90                                           2025-12-19 10:20:01 2025-12-19 10:20:30         17       29          45
       49     1.5    4% | 5zfc9hksnyp90 library cache: mutex X  00000000B14F5520  2025-12-19 10:20:01 2025-12-19 10:20:30          1       13          13
       15      .5    1% |                                                         2025-12-19 10:20:02 2025-12-19 10:20:26          1       10          10
        8      .3    1% |               library cache: mutex X  00000000B14F5520  2025-12-19 10:20:02 2025-12-19 10:20:29          1        7           7
        7      .2    1% | 5h6jmnvr4zd4g                                           2025-12-19 10:20:01 2025-12-19 10:20:28          6        6           6
        5      .2    0% | 5zfc9hksnyp90 cursor: pin S           00000000B14F5520  2025-12-19 10:20:05 2025-12-19 10:20:05          1        1           1
        4      .1    0% | 5h6jmnvr4zd4g library cache: mutex X  00000000B14F5520  2025-12-19 10:20:04 2025-12-19 10:20:23          3        4           3
        1      .0    0% | 8btyg0wy808ch                                           2025-12-19 10:20:01 2025-12-19 10:20:01          1        1           1
        1      .0    0% | 9mb61uqwwqkpj                                           2025-12-19 10:20:00 2025-12-19 10:20:00          1        1           1
        1      .0    0% | f0h5rpzmhju11                                           2025-12-19 10:20:00 2025-12-19 10:20:00          1        1           1
        1      .0    0% |               LGWR all worker groups  0000000000000000  2025-12-19 10:20:09 2025-12-19 10:20:09          1        1           1
        1      .0    0% |               library cache lock      0000000070D82F70  2025-12-19 10:20:00 2025-12-19 10:20:00          1        1           1
        1      .0    0% |               log file parallel write 0000000000000001  2025-12-19 10:20:09 2025-12-19 10:20:09          1        1           1
        1      .0    0% |               log file sync           00000000000014C5  2025-12-19 10:20:02 2025-12-19 10:20:02          1        1           1
15 rows selected.
--//可以看出密集执行,选择childnum=128,cursor: mutex S占主要等待事件。

SYS@book> @mutexprofz hash,loc,maddr "hash=2974766368 and ts>=trunc(sysdate)+10/24+19/1440+59/86400 and ts<=trunc(sysdate)+10/24+20/1440+31/86400"
-- MutexProf by Tanel Poder (http://www.tanelpoder.com)
-- Showing profile of top 50 sleeps...
-- column info : id idn hash hash_value=>hash_value ts=>sleep_timestamp
--               req=>requesting_session blk=>blocking_session val=>mutex_value maddr=>mutex_addr

SUM_SLEEPS      GETS_DIFF MUTEX_TYPE            HASH GET_LOCATION                      mutex_addr           SQL_ID        OBJECT_NAME
---------- -------------- --------------- ---------- --------------------------------- -------------------- ------------- --------------------------------------------------------------------------------
        53       28165046 hash table      2974766368 kkshGetNextChild [KKSHBKLOC1]     000000006EB59680     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        41       27957407 Cursor Parent   2974766368 kkscsPruneChild [KKSPRTLOC27]     000000006EB59350     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        39         525505 Library Cache   2974766368 kgllkc1   57                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
        24         476231 Cursor Pin      2974766368 kkslce [KKSCHLPIN2]               00000000682FFE40     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
         9         148658 Library Cache   2974766368 kgllkdl1  85                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
         6         203260 Cursor Pin      2974766368 kksLockDelete [KKSCHLPIN6]        00000000682FFE40     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
         5          62376 Library Cache   2974766368 kgllkc1   57                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
         1                Library Cache   2974766368 kgllkdl1  85                      000000006EB5A248     5zfc9hksnyp90 SELECT COUNT(NAME) FROM T WHERE ID=1
8 rows selected.
--//看GET_LOCATION基本可以猜测花费在kkshGetNextChild,kkscsPruneChild 。

SYS@book> @ ev_namepr "cursor: mutex S"
==============================
EVENT#                        : 365
EVENT_ID                      : 1575214430
NAME                          : cursor: mutex S
PARAMETER1                    : idn
PARAMETER2                    : value
PARAMETER3                    : where
WAIT_CLASS_ID                 : 3875070507
WAIT_CLASS#                   : 4
WAIT_CLASS                    : Concurrency
DISPLAY_NAME                  : cursor: mutex S
CON_ID                        : 0
PL/SQL procedure successfully completed.


posted @ 2025-12-21 20:32  lfree  阅读(0)  评论(0)    收藏  举报