收集SQL信息包,实现功能如下,可以获取关于问题SQL更详细的信息,便于更精准的分析SQL性能问题。
CREATE OR REPLACE PACKAGE DM_SQL_RPT
AS
--获取所有
PROCEDURE GET_ALL_INFO(EXEC_ID IN BIGINT);
--获取SQL涉及表信息
PROCEDURE GET_TAB_INFO(EXEC_ID IN BIGINT);
--获取表涉及索引
PROCEDURE GET_IDX_INFO(EXEC_ID IN BIGINT);
--获取SQL涉及表的统计信息
PROCEDURE GET_STAT_INFO(EXEC_ID IN BIGINT);
--获取SQL执行计划
PROCEDURE GET_SQL_PLAN(EXEC_ID IN BIGINT);
--获取et信息
PROCEDURE GET_SQLET_INFO(EXEC_ID IN BIGINT);
--获取SQL缓存的执行计划
PROCEDURE GET_SQLPLN_CACHE(EXEC_ID IN BIGINT);
END DM_SQL_RPT;
完整工具:
DM_SQL_RPT.sql
使用示例:
--disql登录,创建包后,开启 MONITOR_SQL_EXEC
SQL> SF_SET_SESSION_PARA_VALUE ('MONITOR_SQL_EXEC', 1);
DMSQL 过程已成功完成
已用时间: 2.339(毫秒). 执行号:100400.
--开启 set serveroutput on
SQL> set serveroutput on
--执行问题SQL
SQL> select count(*)
from (
select t1.object_id,t1.object_name,t1.object_type,t1.last_ddl_time
from t1,t2,t_part t3
where t1.object_id = t2.object_id
AND T1.OBJECT_ID = T3.ID
and t2.status='VALID');
行号 COUNT(*)
---------- --------------------
1 0
已用时间: 00:00:12.929. 执行号:100402.
--获得 SQL执行ID,调用存储过程"获取所有"
SQL> call DM_SQL_RPT.GET_ALL_INFO(100402);
--以下为输出信息
#################################################################################
##### TABLE INFO : HR.T2
---------------------------------------------------------------------------------
| OWNER| TABLE_NAME| NUM_ROWS| LAST_ANALYZED| PARTITIONED| TEMPORARY|
---------------------------------------------------------------------------------
| HR| T2| 20| 2024-11-17 21:04:31| NO| N|
---------------------------------------------------------------------------------
##### COLUMN INFO : HR.T2
---------------------------------------------------------------------------------
| COLUMN_ID| COLUMN_NAME| COLUMN_TYPE| NULLABLE| DEFAULT_VAL|
---------------------------------------------------------------------------------
| 1| OWNER| VARCHAR2(128,0)| Y| NULL|
| 2| OBJECT_NAME| VARCHAR2(128,0)| Y| NULL|
| 3| SUBOBJECT_NAME| VARCHAR2(128,0)| Y| NULL|
| 4| OBJECT_ID| NUMBER(0,0)| Y| NULL|
| 5| DATA_OBJECT_ID| NUMBER(0,0)| Y| NULL|
| 6| OBJECT_TYPE| VARCHAR2(18,0)| Y| NULL|
| 7| CREATED| TIMESTAMP(8,6)| Y| NULL|
| 8| LAST_DDL_TIME| TIMESTAMP(8,6)| Y| NULL|
| 9| TIMESTAMP| TIMESTAMP(8,6)| Y| NULL|
| 10| STATUS| VARCHAR2(7,0)| Y| NULL|
| 11| TEMPORARY| VARCHAR2(1,0)| Y| NULL|
| 12| GENERATED| VARCHAR2(1,0)| Y| NULL|
| 13| SECONDARY| VARCHAR2(1,0)| Y| NULL|
| 14| NAMESPACE| VARCHAR2(1,0)| Y| NULL|
| 15| EDITION_NAME| VARCHAR2(1,0)| Y| NULL|
#################################################################################
##### TABLE INFO : HR.T1
---------------------------------------------------------------------------------
| OWNER| TABLE_NAME| NUM_ROWS| LAST_ANALYZED| PARTITIONED| TEMPORARY|
---------------------------------------------------------------------------------
| HR| T1| 1000000| 2024-11-17 21:04:28| NO| N|
---------------------------------------------------------------------------------
##### COLUMN INFO : HR.T1
---------------------------------------------------------------------------------
| COLUMN_ID| COLUMN_NAME| COLUMN_TYPE| NULLABLE| DEFAULT_VAL|
---------------------------------------------------------------------------------
| 1| OWNER| VARCHAR2(128,0)| Y| NULL|
| 2| OBJECT_NAME| VARCHAR2(128,0)| Y| NULL|
| 3| SUBOBJECT_NAME| VARCHAR2(128,0)| Y| NULL|
| 4| OBJECT_ID| NUMBER(0,0)| Y| NULL|
| 5| DATA_OBJECT_ID| NUMBER(0,0)| Y| NULL|
| 6| OBJECT_TYPE| VARCHAR2(18,0)| Y| NULL|
| 7| CREATED| TIMESTAMP(8,6)| Y| NULL|
| 8| LAST_DDL_TIME| TIMESTAMP(8,6)| Y| NULL|
| 9| TIMESTAMP| TIMESTAMP(8,6)| Y| NULL|
| 10| STATUS| VARCHAR2(7,0)| Y| NULL|
| 11| TEMPORARY| VARCHAR2(1,0)| Y| NULL|
| 12| GENERATED| VARCHAR2(1,0)| Y| NULL|
| 13| SECONDARY| VARCHAR2(1,0)| Y| NULL|
| 14| NAMESPACE| VARCHAR2(1,0)| Y| NULL|
| 15| EDITION_NAME| VARCHAR2(1,0)| Y| NULL|
#################################################################################
##### TABLE INFO : HR.T_PART
---------------------------------------------------------------------------------
| OWNER| TABLE_NAME| NUM_ROWS| LAST_ANALYZED| PARTITIONED| TEMPORARY|
---------------------------------------------------------------------------------
| HR| T_PART| 9378516| 2024-11-17 21:04:32| YES| N|
---------------------------------------------------------------------------------
##### TABLE PART INFO : HR.T_PART
------------------------------------------------------------------------------------------------
|PART_POSI| PART_NAME| COLUMN_NAME|SUBPART_CNT| HIGH_VALUE| NUM_ROWS| LAST_ANALYZED|
------------------------------------------------------------------------------------------------
| 1| P1| CREATE_TIME| 0|DATE'2023-01| 0| 2024-11-17 21:04:46|
| 2|SYS_P27440_27| CREATE_TIME| 0|DATE'2023-08| 460875| 2024-11-17 21:04:52|
| 3|SYS_P27440_27| CREATE_TIME| 0|DATE'2023-09| 621191| 2024-11-17 21:04:48|
| 4|SYS_P27440_27| CREATE_TIME| 0|DATE'2023-10| 602119| 2024-11-17 21:04:46|
| 5|SYS_P27440_27| CREATE_TIME| 0|DATE'2023-11| 621000| 2024-11-17 21:04:50|
| 6|SYS_P27440_27| CREATE_TIME| 0|DATE'2023-12| 601147| 2024-11-17 21:04:46|
| 7|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-01| 620612| 2024-11-17 21:04:46|
| 8|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-02| 620328| 2024-11-17 21:04:51|
| 9|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-03| 581878| 2024-11-17 21:04:49|
| 10|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-04| 620846| 2024-11-17 21:04:49|
| 11|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-05| 599942| 2024-11-17 21:04:50|
| 12|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-06| 622363| 2024-11-17 21:04:48|
| 13|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-07| 601327| 2024-11-17 21:04:47|
| 14|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-08| 621217| 2024-11-17 21:04:51|
| 15|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-09| 622130| 2024-11-17 21:04:48|
| 16|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-10| 601122| 2024-11-17 21:04:47|
| 17|SYS_P27440_27| CREATE_TIME| 0|DATE'2024-12| 360419| 2024-11-17 21:04:47|
------------------------------------------------------------------------------------------------
##### COLUMN INFO : HR.T_PART
---------------------------------------------------------------------------------
| COLUMN_ID| COLUMN_NAME| COLUMN_TYPE| NULLABLE| DEFAULT_VAL|
---------------------------------------------------------------------------------
| 1| ID| VARCHAR2(20,0)| Y| NULL|
| 2| NAME| VARCHAR(50,0)| Y| NULL|
| 3| AGE| INT(4,0)| Y| NULL|
| 4| CREATE_TIME| DATE(3,0)| Y| NULL|
| 5| DEPTNO| VARCHAR2(20,0)| Y| NULL|
---------------------------------------------------------------------------------
####################################################################################################
##### INDEX INFO : HR.T2
CREATE OR REPLACE INDEX "IDX_T2_01" ON "HR"."T2"("DATA_OBJECT_ID" ASC) STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634355| IDX_T2_01| DATA_OBJECT_ID| 1| ASC| BT| SEC| 0|
----------------------------------------------------------------------------------------------------
####################################################################################################
##### INDEX INFO : HR.T1
CREATE OR REPLACE INDEX "IDX_T1_01" ON "HR"."T1"("OWNER" ASC,"OBJECT_ID" ASC) STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634386| IDX_T1_01| OWNER| 1| ASC| BT| SEC| 0|
| 33634386| IDX_T1_01| OBJECT_ID| 2| ASC| BT| SEC| 0|
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE INDEX "IDX_T1_02" ON "HR"."T1"("DATA_OBJECT_ID" ASC,"STATUS" ASC) STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634356| IDX_T1_02| DATA_OBJECT_ID| 1| ASC| BT| SEC| 0|
| 33634356| IDX_T1_02| STATUS| 2| ASC| BT| SEC| 0|
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE INDEX "IDX_T1_ID" ON "HR"."T1"("OBJECT_ID" ASC,"OWNER" ASC) STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634389| IDX_T1_ID| OBJECT_ID| 1| ASC| BT| SEC| 0|
| 33634389| IDX_T1_ID| OWNER| 2| ASC| BT| SEC| 0|
----------------------------------------------------------------------------------------------------
####################################################################################################
##### INDEX INFO : HR.T_PART
CREATE OR REPLACE INDEX "IDX_TP_ID" ON "HR"."T_PART"("ID" ASC) GLOBAL STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634266| IDX_TP_ID| ID| 1| ASC| BT| 9| 0|
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE INDEX "IDX_TP_ID_LOCAL" ON "HR"."T_PART"("ID" ASC,"NAME" ASC) STORAGE(ON "TBS_HR", CLUSTERBTR) ;
----------------------------------------------------------------------------------------------------
| ID| INDEX_NAME| COLUMN_NAME| COLUMN_POSITION| DESCEND| TYPE| XTYPE| FLAG|
----------------------------------------------------------------------------------------------------
| 33634288| IDX_TP_ID_LOCAL| ID| 1| ASC| BT| SEC| 0|
| 33634288| IDX_TP_ID_LOCAL| NAME| 2| ASC| BT| SEC| 0|
----------------------------------------------------------------------------------------------------
######################################################################################################################
##### TABLE STATS INFO : HR.T2
----------------------------------------------------------------------------------------------------------------------
| COL_NAME| COL_ID| COL_TYPE| T_TOTAL| N_SMAPLE| N_DISTINCT| N_NULL| N_BUCKETS| LAST_GATHERED|
----------------------------------------------------------------------------------------------------------------------
| OWNER| 1| VARCHAR2| 20| 20| 7| 0| 7| 2024-11-14 12:52:12|
| OBJECT_NAME| 2| VARCHAR2| 20| 20| 19| 0| 19| 2024-11-14 12:52:12|
| SUBOBJECT_NAME| 3| VARCHAR2| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| OBJECT_ID| 4| NUMBER| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| DATA_OBJECT_ID| 5| NUMBER| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| OBJECT_TYPE| 6| VARCHAR2| 20| 20| 8| 0| 8| 2024-11-14 12:52:12|
| CREATED| 7| TIMESTAMP| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| LAST_DDL_TIME| 8| TIMESTAMP| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| TIMESTAMP| 9| TIMESTAMP| 20| 20| 20| 0| 20| 2024-11-14 12:52:12|
| STATUS| 10| VARCHAR2| 20| 20| 3| 0| 3| 2024-11-14 12:52:12|
| TEMPORARY| 11| VARCHAR2| 20| 20| 2| 1| 2| 2024-11-14 12:52:12|
| GENERATED| 12| VARCHAR2| 20| 20| 15| 0| 15| 2024-11-14 12:52:12|
| SECONDARY| 13| VARCHAR2| 20| 20| 18| 0| 18| 2024-11-14 12:52:12|
| NAMESPACE| 14| VARCHAR2| 20| 20| 18| 0| 18| 2024-11-14 12:52:12|
| EDITION_NAME| 15| VARCHAR2| 20| 20| 18| 0| 18| 2024-11-14 12:52:12|
----------------------------------------------------------------------------------------------------------------------
######################################################################################################################
##### TABLE STATS INFO : HR.T1
----------------------------------------------------------------------------------------------------------------------
| COL_NAME| COL_ID| COL_TYPE| T_TOTAL| N_SMAPLE| N_DISTINCT| N_NULL| N_BUCKETS| LAST_GATHERED|
----------------------------------------------------------------------------------------------------------------------
| OWNER| 1| VARCHAR2| 1000000| 1000000| 8| 0| 8| 2024-11-12 15:34:03|
| OBJECT_NAME| 2| VARCHAR2| 1000000| 1000000| 904860| 0| 300| 2024-11-12 15:34:08|
| SUBOBJECT_NAME| 3| VARCHAR2| 1000000| 1000000| 999460| 0| 300| 2024-11-12 15:34:12|
| OBJECT_ID| 4| NUMBER| 1000000| 1000000| 995061| 0| 300| 2024-11-12 15:34:12|
| DATA_OBJECT_ID| 5| NUMBER| 1000000| 1000000| 995061| 0| 300| 2024-11-12 15:34:15|
| OBJECT_TYPE| 6| VARCHAR2| 1000000| 1000000| 10| 0| 10| 2024-11-12 15:34:16|
| CREATED| 7| TIMESTAMP| 1000000| 1000000| 976879| 0| 300| 2024-11-12 15:34:19|
| LAST_DDL_TIME| 8| TIMESTAMP| 1000000| 1000000| 976940| 0| 300| 2024-11-12 15:34:22|
| TIMESTAMP| 9| TIMESTAMP| 1000000| 1000000| 980979| 0| 300| 2024-11-12 15:34:26|
| STATUS| 10| VARCHAR2| 1000000| 1000000| 3| 49931| 3| 2024-11-12 15:34:26|
| TEMPORARY| 11| VARCHAR2| 1000000| 1000000| 2| 49702| 2| 2024-11-12 15:34:26|
| GENERATED| 12| VARCHAR2| 1000000| 1000000| 62| 0| 62| 2024-11-12 15:34:26|
| SECONDARY| 13| VARCHAR2| 1000000| 1000000| 62| 0| 62| 2024-11-12 15:34:27|
| NAMESPACE| 14| VARCHAR2| 1000000| 1000000| 62| 0| 62| 2024-11-12 15:34:27|
| EDITION_NAME| 15| VARCHAR2| 1000000| 1000000| 62| 0| 62| 2024-11-12 15:34:27|
----------------------------------------------------------------------------------------------------------------------
######################################################################################################################
##### TABLE STATS INFO : HR.T_PART STATISTICS IS NULL.
##########################################################################################################################################
##### SQL PLAN INFO :
------------------------------------------------------------------------------------------------------------------------------------------
| DEP|SQL_PLAN |
------------------------------------------------------------------------------------------------------------------------------------------
| 0|#NSET2: [1729,1,265]; CPU_COST:0; IO_COST:1729 |
| 1| #PRJT2: [1729,1,265]; CPU_COST:0; IO_COST:1729 |
| 2| #AAGR2: [1729,1,265]; CPU_COST:0; IO_COST:1729 |
| 3| #HASH2 INNER JOIN: [1729,464236,265]; CPU_COST:0; IO_COST:1729 |
| 4| #NEST LOOP INDEX JOIN2: [1,5,217]; CPU_COST:0; IO_COST:1 |
| 5| #SLCT2: [1,5,78]; T2.STATUS = ''VALID''; CPU_COST:0; IO_COST:1 |
| 6| #CSCN2: [1,20,78]; INDEX33634353(T2); CPU_COST:0; IO_COST:1 |
| 5| #SSEK2: [1,1,30]; SCAN_TYPE(ASC); IDX_T1_ID(T1); SCAN_RANGE[(T2.OBJECT_ID,min),(T2.OBJECT_ID,max)); CPU_COST:0; IO_COST:1|
| 4| #PARALLEL: [1076,9378516,48]; SCAN_TYPE(FULL); CPU_COST:1076; IO_COST:0 |
| 5| #SSCN: [1076,9378516,48]; IDX_TP_ID(T_PART AS T3); CPU_COST:1076; IO_COST:0 |
------------------------------------------------------------------------------------------------------------------------------------------
####################################################################################################
##### SQL ET INFO :
----------------------------------------------------------------------------------------------------
| OP| TIME(MS)|PERCENT| RANK| SEQ|N_ENTER| MEM(KB)| DISK(KB)| HASH_CELLS| HASH_CONFLICT|
----------------------------------------------------------------------------------------------------
| PRJT2| 0| 0%| 11| 2| 4| 0| 0| 0| 0|
| AAGR2| 0| 0%| 10| 3| 3| 0| 0| 0| 0|
| IJI2| 0.01| 0%| 8| 5| 18| 0| 0| 0| 0|
| SLCT2| 0.01| 0%| 9| 6| 4| 0| 0| 0| 0|
| DLCK| 0.02| 0%| 7| 0| 2| 0| 0| 0| 0|
| NSET2| 0.05| 0%| 6| 1| 3| 0| 0| 0| 0|
| CSCN2| 0.48| 0%| 5| 7| 2| 0| 0| 0| 0|
| SSEK2| 7.57| 0.06%| 4| 8| 10| 0| 0| 0| 0|
| PLL| 25.5| 0.2%| 3| 9| 62526| 0| 0| 0| 0|
| HI3| 1282.91| 10%| 2| 4| 31270| 15022| 0| 5| 0|
| SSCN| 11514.45| 89.74%| 1| 10| 31263| 0| 0| 0| 0|
----------------------------------------------------------------------------------------------------
DMSQL 过程已成功完成
已用时间: 650.678(毫秒). 执行号:100403.
SQL>
其中,获取SQL缓存的执行计划会在trace目录下生成名为"DM_SQL_PLN_<日期>.trc"的文件。
PS:此工具并非官方推荐工具,欢迎下载测试,使用过程中如有问题或有好的想法和建议,欢迎评论区交流。
文章
阅读量
获赞