[20240313]使用tpt ashtop.sql指令碼的困惑.txt
--//使用tpt ashtop.sql指令碼遇到的問題,做一些分析以及說明:
1.環境:
SYS@127.0.0.1:9014/ywdb> @ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2.問題:
SYS@127.0.0.1:9014/ywdb> @ ashtop sql_id sql_id='2cqbg080kv9uh' &day
Total Distinct Distinct
Seconds AAS %This SQL_ID FIRST_SEEN LAST_SEEN Execs Seen Tstamps
--------- ------- ------- ------------- ------------------- ------------------- ---------- --------
5 .0 100% | 2cqbg080kv9uh 2024-03-12 14:24:04 2024-03-13 10:54:39 1 5
--//Distinct Execs Seen =1,Distinct Tstamps=5,按照我以前的理解,Distinct Execs Seen相當於執行次數,Distinct Tstamps相當於
--//總的執行時間(注:兩條相同sql語句同時執行,sample_time總會有一點點不同,相同的機率應該很低),除非很密集的執行也許可能出現
--//sample_time相同的情況.
--//我看過這條sql語句應該很快完成,根本不可能1次執行需要5秒.
--//感覺那裡不對。
3.分析:
--//檢視ashtop.sql指令碼:
...
, COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
, COUNT(DISTINCT sample_time) dist_timestamps
...
SELECT sql_id, sql_exec_start || ':' || sql_exec_id, sample_time
FROM gV$ACTIVE_SESSION_HISTORY
WHERE sql_id = '2cqbg080kv9uh'
AND sample_time BETWEEN SYSDATE - 1 AND SYSDATE;
SQL_ID SQL_EXEC_START||':'||SQL_EXEC_ID SAMPLE_TIME
------------- -------------------------------- -----------------------
2cqbg080kv9uh : 2024-03-12 21:38:48.048
2cqbg080kv9uh : 2024-03-13 10:54:39.810
2cqbg080kv9uh : 2024-03-13 08:15:53.122
2cqbg080kv9uh : 2024-03-12 18:41:53.370
2cqbg080kv9uh : 2024-03-12 14:24:04.705
--//噢!! 原來gV$ACTIVE_SESSION_HISTORY檢視有一些情況並沒有抓取到SQL_EXEC_START,SQL_EXEC_ID的值,這樣看到dist_sqlexec_seen=1.
--//不清楚怎麼時候會出現這樣的情況。
4.總結:
--//Distinct Execs Seen,Distinct Tstamps 只能作為參考.
--//感覺tpt ashtop.sql指令碼應該修改為:
COL dist_sqlexec_seen1 HEAD "Distinct|Execs Seen1" FOR 999999
...
, COUNT(DISTINCT decode(sql_exec_start||':'||sql_exec_id,':',to_char(sample_time,'yyyymmdd hh24:mi:ss.ff3'),sql_exec_start||':'||sql_exec_id)) dist_sqlexec_seen1
--//或者再增加一個欄位也許更加合理一些.
SYS@127.0.0.1:9014/ywdb> @ ashtop sql_id sql_id='g7ytdh9mxt1s0' &day
Total Distinct Distinct Distinct
Seconds AAS %This SQL_ID FIRST_SEEN LAST_SEEN Execs Seen Tstamps Execs Seen1
--------- ------- ------- ------------- ------------------- ------------------- ---------- -------- -----------
991 .0 100% | g7ytdh9mxt1s0 2024-03-17 11:52:15 2024-03-18 11:51:11 636 987 991
SYS@127.0.0.1:9014/ywdb> @ sql_id g7ytdh9mxt1s0
--SQL_ID = g7ytdh9mxt1s0
select count ( :"SYS_B_0" ) from BSOFT_TEST_CONNECT ;
--//這條語句執行頻率非常高, 執行很快,dist_timestamps=987,如果前面dist_sqlexec_seen表示執行次數,明顯不妥.
--//dist_sqlexec_seen1=991,說明有4次(991-987)的sample_time存在重複的.
[20240313]使用tpt ashtop.sql指令碼的困惑.txt
相關文章
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- [20220510]完善tpt expandz.sql指令碼.txtSQL指令碼
- [20211130]完善tpt t.sql指令碼.txtSQL指令碼
- [20230510]測試使用tpt ddl指令碼是否產生日誌.txt指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20231101]使用tpt seg2.sql指令碼問題.txtSQL指令碼
- [20211129]完善tpt tablist.sql指令碼.txtSQL指令碼
- [20211129]完善tpt killi.sql指令碼.txtSQL指令碼
- [20220323]完善tpt get_trace.sql指令碼.txtSQL指令碼
- [20220217]完善tpt gts.sql指令碼.txtSQL指令碼
- [20211223]tpt ash ash_index_helperx指令碼.txtIndex指令碼
- [20211126]完善tpt pr.sql指令碼.txtSQL指令碼
- [20220317]補充完善TPT 顯示欄位列的指令碼.txt指令碼
- [20230302]建立完善tpt o2.sql指令碼.txtSQL指令碼
- [20220422]完善tpt ash ash_index_helperx指令碼2.txtIndex指令碼
- [20220111]完善tpt ashash_index_helper指令碼.txtIndex指令碼
- [20220129]完善tpt ash ash_index_helperx指令碼.txtIndex指令碼
- [20221126]tpt pr.sql指令碼執行問題.txtSQL指令碼
- [20220519]完善tpt dash_wait_chains2.sql指令碼.txtAISQL指令碼
- 寫程式碼的困惑
- [20170628]完善ooerr指令碼.txt指令碼
- outline操作指令碼_老版本.txt指令碼
- [20220428]優化的困惑12.txt優化
- [20210203]max優化的困惑.txt優化
- gdb的指令碼使用 -- gdbinit指令碼
- [20200117]ashtop指令碼使用簡介.txt指令碼
- [20210330]bash使用source or ..呼叫shell指令碼注意txt指令碼
- [20211118]mutexprof指令碼使用簡介.txtMutex指令碼
- [20200401]優化的困惑5.txt優化
- [20200408]優化的困惑6.txt優化
- [20220507]優化的困惑13.txt優化
- [20240313]toad gather_plan_statistics執行計劃相關問題.txt
- [20241110]使用xto10.sql指令碼遇到的問題.txtSQL指令碼
- [20210506]完善tix指令碼.txt指令碼
- [20200808]優化的困惑10.txt優化
- wrk(2)- Lua 指令碼的使用指令碼
- 使用rman備份的指令碼指令碼
- 使用dbstart指令碼的設定指令碼