达梦数据库性能优化

news2024/10/27 23:18:07

1、SQL执行计划

拿到一条SQL的时候,首先要下达梦手册中提出的有效SQL规范,及是否命中了特殊OR子句的不规范,是否用了复杂的正则表达式,避免重复很高的索引,UINON ALL 是否可以替换UNION操作等,某些场景INSTR函数导致的NEST LOOP效率等,再就是看下它的预估执行计划。预估执行计划,可以采用达梦客户端点击如下图解小按钮生成,也可以按快捷键F9生成,也可以在SQL前加EXPLAIN生成预估计划。

1.1查看预估的执行计划

通过客户端工具按F9生成:
在这里插入图片描述
通过EXPLAIN命令生成:

EXPLAIN select * from emp e where e.EMPLOYEE_ID=3003;
1   #NSET2: [1, 856, 285] 
2     #PRJT2: [1, 856, 285]; exp_num(12), is_atom(FALSE) 
3       #BLKUP2: [1, 1, 285]; INDEX33555529(E)
4         #SLCT2: [1, 1, 285]; E.EMPLOYEE_ID = 3003
5           #CSCN2: [1, 856, 285]; INDEX33555529(EMP as E); btr_scan(1)

1.2执行计划操作符

操作符的篇章较多,详情参考《DM8系统管理员手册.pdf》中【附录 4 执行计划操作符】章节。常见操作符如:聚集索引扫描(CSCN2),全表扫描(CSCN),索引扫描(SSEK),二次回表(BLKUP),除重(DISTINCT) ,二级索引定位(SSEK2)等等;多表关联如:(HASH链接)HASH JOIN,嵌套循环连接(NEST LOOP JOIN),还有MERGE 链接(MERGE JOIN );大表和大表关联HASH JOIN更优,而如果小表和大表关联,通常是NEST LOOP JOIN会更优,实际情况都是和数据量有关,优化器大部分能选择到合适的操作符,少数情况需要人为干涉。

1.3执行计划含义

以上述执行计划为例:

1   #NSET2: [1, 856, 285] 
2     #PRJT2: [1, 856, 285]; exp_num(12), is_atom(FALSE) 
3       #BLKUP2: [1, 1, 285]; INDEX33555529(E)
4         #SLCT2: [1, 1, 285]; E.EMPLOYEE_ID = 3003
5           #CSCN2: [1, 856, 285]; INDEX33555529(EMP as E); btr_scan(1)

#NSET2 表示收集结果集的操作符
#PRJT2:投影运算,选择表达式的计算
#BLKUP2:索引名(表名),定位查找
#SLCT2: 查询条件过滤操作符
#CSCN2: [1, 856, 285]
说明:三元组合,3个数字分别表示【估算代价,结果条数,行数据的长度】;
CSCN2: [1, 856, 285]这句含义是:这是一个全表扫描操作,涉及的整体代价估算为1,结果集为856,每行数据长度为285。

1.4执行计划顺序

执行计划可以理解是一个数型状,看懂执行计划顺序,会让我们更好的分析SQL性能问题,SQL的执行顺序,并不是简单的从下而上,解析规律大致如下:
1.缩进越深的越先执行;
2.同样缩进的上面的先执行,下面的后执行;
3.上下的优先级高于内外;
在这里插入图片描述
越缩进越先执行,即最终缩进分叉了3,4,同样的缩进,从上由下优先级更高,所以这里的3先执行,3下面又有越深的越先执执行,又有1,2 。

1.5查看历史执行计划

v c a c h e p l n 保存了历史的 S Q L 缓存计划,平常我们在跟踪问题的时候,也可以分析它的历史缓存计划是否是最优,把历史计划生成出来 , 此功能对标 O r a c l e 的 V cachepln保存了历史的SQL缓存计划,平常我们在跟踪问题的时候,也可以分析它的历史缓存计划是否是最优,把历史计划生成出来,此功能对标Oracle的V cachepln保存了历史的SQL缓存计划,平常我们在跟踪问题的时候,也可以分析它的历史缓存计划是否是最优,把历史计划生成出来,此功能对标OracleVSQL_PLAN_STATISTICS_ALL只是获取方式有所差异。

SQL> SELECT * FROM LEI.EMP WHERE EMPLOYEE_ID=1001;

行号     EMPLOYEE_ID EMPLOYEE_NAME IDENTITY_CARD      EMAIL                PHONE_NUM   HIRE_DATE  JOB_ID SALARY      COMMISSION_PCT MANAGER_ID  DEPARTMENT_ID
---------- ----------- ------------- ------------------ -------------------- ----------- ---------- ------ ----------- -------------- ----------- -------------
1          1001        马学铭     340102196202303000 maxueming@dameng.com 15312348552 2008-05-30 11     30000       0              1001        101

已用时间: 1.447(毫秒). 执行号:3522.
SQL> SELECT * FROM v$cachepln WHERE SQLSTR LIKE '%LEI.EMP%';

行号     CACHE_ITEM           TYPE$ HASH_VALUE  SCHID       USER_ID     OBJ_ID      RS_CAN_CACHED N_RS_CACHED N_TABLE     TABLEID
---------- -------------------- ----- ----------- ----------- ----------- ----------- ------------- ----------- ----------- -------
           SQLSTR                                                                                                                                                  SQLCACHE             DDLSCRIPT RET_CMD    
           ------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- --------- -----------
           STMT_TYPE   N_LIT_PARA  N_CLNT_PARA N_COLS      SEL_UPDATABLE MEM_SIZE             RS_CAN_CACHED_IN_RULE BINDED INDEPENDENT
           ----------- ----------- ----------- ----------- ------------- -------------------- --------------------- ------ -----------
1          140260405528992      SQL   -244970637  150994945   50331649    0           N             0           0           
           SELECT * FROM v$cachepln WHERE SQLSTR LIKE '%LEI.EMP%';                                                                                                 140260401615656      NULL      160
           7           0           0           23          N             121680               N                     N      Y


行号     CACHE_ITEM           TYPE$ HASH_VALUE  SCHID       USER_ID     OBJ_ID      RS_CAN_CACHED N_RS_CACHED N_TABLE     TABLEID
---------- -------------------- ----- ----------- ----------- ----------- ----------- ------------- ----------- ----------- -------
           SQLSTR                                                                                                                                                  SQLCACHE             DDLSCRIPT RET_CMD    
           ------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- --------- -----------
           STMT_TYPE   N_LIT_PARA  N_CLNT_PARA N_COLS      SEL_UPDATABLE MEM_SIZE             RS_CAN_CACHED_IN_RULE BINDED INDEPENDENT
           ----------- ----------- ----------- ----------- ------------- -------------------- --------------------- ------ -----------
2          140260405406944      SQL   769619605   150994945   50331649    0           N             0           1           1046
           SELECT * FROM LEI.EMP WHERE EMPLOYEE_ID=1001;                                                                                                           140260404968064      NULL      160
           7           0           0           11          Y             121680               Y                     N      Y


行号     CACHE_ITEM           TYPE$ HASH_VALUE  SCHID       USER_ID     OBJ_ID      RS_CAN_CACHED N_RS_CACHED N_TABLE     TABLEID
---------- -------------------- ----- ----------- ----------- ----------- ----------- ------------- ----------- ----------- -------
           SQLSTR                                                                                                                                                  SQLCACHE             DDLSCRIPT RET_CMD    
           ------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- --------- -----------
           STMT_TYPE   N_LIT_PARA  N_CLNT_PARA N_COLS      SEL_UPDATABLE MEM_SIZE             RS_CAN_CACHED_IN_RULE BINDED INDEPENDENT
           ----------- ----------- ----------- ----------- ------------- -------------------- --------------------- ------ -----------
3          140260383469760      SQL   -814522165  150994945   50331649    0           N             0           0           
           /***Manager***/select IDENT_SEED('LEI.EMP'),IDENT_INCR('LEI.EMP'),IDENT_CURRENT('LEI.EMP'),NAME from SYSCOLUMNS where ID = 1046 and INFO2 & 0x01 = 0x01 140260383527312      NULL      160
           7           0           0           4           N             56444                N                     N      Y


行号     CACHE_ITEM           TYPE$ HASH_VALUE  SCHID       USER_ID     OBJ_ID      RS_CAN_CACHED N_RS_CACHED N_TABLE     TABLEID
---------- -------------------- ----- ----------- ----------- ----------- ----------- ------------- ----------- ----------- -------
           SQLSTR                                                                                                                                                  SQLCACHE             DDLSCRIPT RET_CMD    
           ------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------- --------- -----------
           STMT_TYPE   N_LIT_PARA  N_CLNT_PARA N_COLS      SEL_UPDATABLE MEM_SIZE             RS_CAN_CACHED_IN_RULE BINDED INDEPENDENT
           ----------- ----------- ----------- ----------- ------------- -------------------- --------------------- ------ -----------
4          140260378646512      SQL   -155128631  150994945   50331649    0           N             0           0           
           /***Manager***/select IDENT_SEED('LEI.EMP'),IDENT_INCR('LEI.EMP'),IDENT_CURRENT('LEI.EMP'),NAME from SYSCOLUMNS where ID = 1044 and INFO2 & 0x01 = 0x01 140260376122256      NULL      160
           7           0           0           4           N             56444                N                     N      Y


已用时间: 1.090(毫秒). 执行号:3523.
SQL> alter session set events 'immediate trace name plndump level 140260405406944, dump_file ''/home/dmdba/140260405406944.log''';
操作已执行
已用时间: 3.958(毫秒). 执行号:3524.

在这里插入图片描述

SQL> host cat /home/dmdba/140260405406944.log
DM Database Server x64 V8

*** 2024-09-29 15:00:56.587000000*** start dump the infos of pln[140260405406944].
        npln cache infos:
        scp cache
            type: 0
            over flow: 0
            disable: 0
            fixed number: 1
            ts value: 9892
        type: 0
        hash val: 769619605
        schid: 150994945
        user id: 50331649
        obj id: 0
        --rs cache
        rs can cache: 0
        rs cache size: 0
        talbes' size: 1
PLN_CREATE_TIME: 2024-09-29 14:59:30.000

SQL_STR:
SELECT * FROM LEI.EMP WHERE EMPLOYEE_ID=1001;

PLN_CMD:
        0       savepoint 
        6       dop_try_begin   0
        10      dop_try_begin   1
        14      sql 0 0
        24      nop
        26      jmp     67
        32      nop
        34      push    0
        40      swap
        42      sloc    1
        46      err_set 0
        50      rollback
        56      jmp     67
        62      nop
        64      throw dir       1
        67      exception end
        69      savepoint 
        75      cop "b 0"
        80      hlt 104
        82      hlt 44201

sqlnode[0]::::
1   #NSET2: [22, 16383, 285] 
2     #PRJT2: [22, 16383, 285]; exp_num(12), is_atom(FALSE) 
3       #BLKUP2: [22, 16383, 285]; IDX_EMP_EMPLOYEEID(EMP)
4         #SSEK2: [22, 16383, 285]; scan_type(ASC), IDX_EMP_EMPLOYEEID(EMP), is_global(0), scan_range[1001,1001]

end dump the infos of pln[140260405406944].

2、性能优化“三板斧”

达梦数据库优化“三板斧”,在实践中发现可以排除大部分的性能问题,达梦数据库优化“三板斧”主要三个方面(统计信息收集,合理的索引建立,DM.ini参数的优化),在使用三板斧过程中,首先要预检查下SQL,以及SQL编写的初级错误问题,例如:OR语句,困难正则表达式,未加过滤条件,笛卡尔,隐式转换,简单先过一遍。
在实际过程中,大部分SQL优化可以通过收集统计信息,索引新增,索引调整,达梦DM.INI参数调整等得到优化处理,而进阶一些的比较难分析的,就涉及到了增加HINT,SQL改写,在处理过程中,都需要根据具体SQL来判断,常见的有关联临时表查询,层次查询等容易需要Hint辅助,文章中给出浅显的例子来说明,实际优化过程中,还是需要不断的去实践,根据不同的SQL,分析执行计划,积累更加丰富的经验。

2.1统计信息

2.1.1查看统计信息收集情况

SQL> SELECT NUM_ROWS,LAST_ANALYZED,TEMPORARY FROM USER_TABLES WHERE TABLE_NAME='EMP';

行号     NUM_ROWS LAST_ANALYZED TEMPORARY
---------- -------- ------------- ---------
1          NULL     NULL          N

已用时间: 4.976(毫秒). 执行号:2701.

NUM_ROWS:如果是空代表未收集统计信息
LAST_ANALYZED:代表收集的时间,如果没有收集这个字段也是空
TEMPORARY:N表示不是临时表,Y表示是临时表,通常如果TEMPORARY=Y 是不用收集的。

2.1.2统计信息收集

2.1.2.1图形界面收集统计信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2.2命令行收集统计信息
SQL> BEGIN
2   DBMS_STATS.GATHER_TABLE_STATS('LEI','EMP',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
3   END;
4   /
DMSQL 过程已成功完成
已用时间: 78.618(毫秒). 执行号:2702.

第一个参数:USER是所属用户,如果你要指定其它用户,单独填写,默认USER是当前用户下的表;
第二个参数:所要收集的表;
第三个参数:一般不是分区表名填写NULL即可,默认也是 NULL,区分大小写;
第四个参数:采样百分比,收集的百分比,范围为 0.000001~100,默认系统自定;
第五个参数:TRUE,保留参数,是否使用随机块代替随机行,默认填写TRUE即可。
第六个参数:控制列的统计信息集合和直方图的创建的格式默认填写FOR ALL COLUMNS SIZE AUTO即可,表示所有列收集。

2.1.3检查确认统计信息收集情况

SQL> SELECT NUM_ROWS,LAST_ANALYZED,TEMPORARY FROM USER_TABLES WHERE TABLE_NAME='EMP';

行号     NUM_ROWS LAST_ANALYZED TEMPORARY
---------- -------- ------------- ---------
1          856      2024-09-29    N

已用时间: 4.955(毫秒). 执行号:2703.

2.2创建索引

合理的索引建立(过多的索引会导致插入的性能下降,需要根据实际业务情况合理的建立索引)有助于性能的提升。

SQL> select count(*) from emp;

行号     COUNT(*)            
---------- --------------------
1          14024704

已用时间: 0.242(毫秒). 执行号:3201.
SQL> desc emp;

行号     NAME           TYPE$       NULLABLE
---------- -------------- ----------- --------
1          EMPLOYEE_ID    INTEGER     Y
2          EMPLOYEE_NAME  VARCHAR(20) Y
3          IDENTITY_CARD  VARCHAR(18) Y
4          EMAIL          VARCHAR(50) N
5          PHONE_NUM      VARCHAR(20) Y
6          HIRE_DATE      DATE        N
7          JOB_ID         VARCHAR(10) N
8          SALARY         INTEGER     Y
9          COMMISSION_PCT INTEGER     Y
10         MANAGER_ID     INTEGER     Y
11         DEPARTMENT_ID  INTEGER     Y

11 rows got

已用时间: 1.111(毫秒). 执行号:3202.
SQL> select * from emp where EMPLOYEE_ID=1001;

行号     EMPLOYEE_ID EMPLOYEE_NAME IDENTITY_CARD      EMAIL                PHONE_NUM   HIRE_DATE  JOB_ID SALARY      COMMISSION_PCT MANAGER_ID  DEPARTMENT_ID
---------- ----------- ------------- ------------------ -------------------- ----------- ---------- ------ ----------- -------------- ----------- -------------
1          1001        马学铭     340102196202303000 maxueming@dameng.com 15312348552 2008-05-30 11     30000       0              1001        101

已用时间: 00:00:01.938. 执行号:3203.

EMP表记录数1400W+,employee_id列数据唯一,查询employ_id=1001耗时1.9秒。

SQL> show parameter monitor

行号     PARA_NAME              PARA_VALUE
---------- ---------------------- ----------
1          MONITOR_MODIFICATIONS  0
2          MONITOR_INDEX_FLAG     0
3          ENABLE_MONITOR         1
4          MONITOR_SQL_EXEC       0
5          ENABLE_MONITOR_DMSQL   1
6          ENABLE_MONITOR_BP      1
7          DSC_ENABLE_MONITOR     1
8          MONITOR_SQL_PARSE      0
9          ENABLE_MONITOR_PLNHIST 0
SQL> alter session set 'MONITOR_SQL_EXEC'=1;
DMSQL 过程已成功完成
已用时间: 0.460(毫秒). 执行号:3205.
SQL> set autotrace on;
SQL> select * from emp where EMPLOYEE_ID=1001;

0    | CSCN2 | EMP | INDEX33555529 | 1

已用时间:1.938(秒). 执行号:0.

查看执行计划为全表扫描。

SQL> create index idx_emp_employeeid on emp(employee_id);
操作已执行
已用时间: 00:00:08.155. 执行号:3207.
SQL> DBMS_STATS.GATHER_INDEX_STATS('LEI','IDX_EMP_EMPLOYEEID');
DMSQL 过程已成功完成
已用时间: 486.269(毫秒). 执行号:3208.
SQL> select * from emp where EMPLOYEE_ID=1001;

0    | ASC | EMP | IDX_EMP_EMPLOYEEID

已用时间: 0.597(毫秒). 执行号:0.

创建索引并收集统计信息后,执行计划走索引,耗时0.6ms。
这是一个非常简单的单表过滤SQL语句,主要用例子来说明,不加索引和加索引的查询速度对比,在数据量越大的时候,差别就越大。侧面也可以看到统计信息,全表扫描和二级索引扫描的结果集相差比较大。

2.3DM.INI参数优化

1.相关文件路径设置参数(控制文件,备份文件,系统文件,临时文件等);
2.实例名
3.内存池以及缓存池
4.线程相关参数
5.查询INI优化类参数(这块跟我们产品特性有比较大关系);
6.检查点参数
7.IO优化参数
8.数据库设置类参数
9.兼容类参数(比如兼容Oracle等)
10.REDO相关参数
11.事务相关参数
12.监控参数
13…
达梦数据库参数配置需要考虑如下因素进行:
1.受机器硬件配置影响(CPU,内存根据需要设置);
2.受需要适配的产品影响(以产品和项目实际使用规模等情况为导向来设置,比如大型ERP产品,基础表比较多,字典缓冲区就要调整到合理值,避免设置过小,频繁被淘汰刷新,又例如看整个产品你的SQL分类,HASH类的SQL过多,则需要HJ_BUF_GLOBAL_SIZE ,HJ_BLK_SIZE合理设置,层次查询过多,则需要设置合理的CNNTB_OPT_FLAG;
3.受目标环境影响(生产环境,测试环境);
4.受适配源端数据库影响等。
达梦数据库dm.ini参数文件相关参数参照《DM8系统管理员手册》中【2.1.1.1 dm.ini】章节。

3、ET工具使用

ET是达梦数据库自带的SQL 性能分析工具,能统计执行计划中,每个操作符的时间花费(将代价显示为具体的时间),从而定位到有性能问题的操作,指导我们去优化。ET是默认关闭的,因此在使用ET之前,需要先开启。

3.1开启ET

SQL> SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);
DMSQL 过程已成功完成
已用时间: 7.018(毫秒). 执行号:3517.
SQL> SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',1);
DMSQL 过程已成功完成
已用时间: 5.094(毫秒). 执行号:3518.

3.2查看ET状态

SQL> select * from v$parameter t where NAME = 'MONITOR_SQL_EXEC';

行号     ID          NAME             TYPE    VALUE SYS_VALUE FILE_VALUE DESCRIPTION                           DEFAULT_VALUE ISDEFAULT  
---------- ----------- ---------------- ------- ----- --------- ---------- ------------------------------------- ------------- -----------
1          577         MONITOR_SQL_EXEC SESSION 1     1         1          Whether to enable monitor sql execute 0             0

已用时间: 4.777(毫秒). 执行号:3519.
SQL> select * from v$parameter t where NAME = 'ENABLE_MONITOR';

行号     ID          NAME           TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION               DEFAULT_VALUE ISDEFAULT  
---------- ----------- -------------- ---- ----- --------- ---------- ------------------------- ------------- -----------
1          574         ENABLE_MONITOR SYS  1     1         1          Whether to enable monitor 1             1

已用时间: 3.262(毫秒). 执行号:3520.

–ENABLE_MONITOR,动态参数(系统级)
–MONITOR_SQL_EXEC,动态参数(会话级)
注意:ET会对数据库性能有影响,使用完后记得关闭以保证数据库性能不受影响。

3.3ET查看

在这里插入图片描述
在这里插入图片描述

3.4关闭ET

SQL> SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',0);
DMSQL 过程已成功完成
已用时间: 7.262(毫秒). 执行号:3513.
SQL> SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',0);
DMSQL 过程已成功完成

4、 DBMS_SQLTUNE.REPORT_SQL_MONITOR使用

4.1DBMS_SQLTUNE包介绍

DBMS_SQLTUNE系统包兼容Oracle的DBMS_SQLTUNE包的部分功能,提供一系列对实时SQL监控的方法。DBMS_SQLTUNE 包可以实时监控 SQL 执行过程中的信息,包括:执行时间、执行代价、执行用户、统计信息、生成调优建议等功能。

4.2DBMS_SQLTUNE包使用

4.2.1调用系统过程创建系统包

SQL> SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_SQLTUNE');
DMSQL 过程已成功完成
已用时间: 51.092(毫秒). 执行号:2302

4.2.2开启SQL监控参数

SQL> SP_SET_PARA_VALUE (1,'ENABLE_MONITOR',1);
DMSQL 过程已成功完成
已用时间: 6.267(毫秒). 执行号:2303.
SQL> SP_SET_PARA_VALUE (1,'MONITOR_SQL_EXEC',1);
DMSQL 过程已成功完成
已用时间: 6.298(毫秒). 执行号:2304.
SQL> select para_name,para_value from v$dm_ini where para_name in('ENABLE_MONITOR','MONITOR_SQL_EXEC');

行号     PARA_NAME        PARA_VALUE
---------- ---------------- ----------
1          ENABLE_MONITOR   1
2          MONITOR_SQL_EXEC 1

已用时间: 3.154(毫秒). 执行号:2305.

4.3调优测试

4.3.1准备测试数据

SQL> CREATE TABLE T (ID INT,NAME VARCHAR(20));
操作已执行
已用时间: 1.800(毫秒). 执行号:2326.
SQL> INSERT INTO T SELECT LEVEL,'TEST' ||LEVEL FROM DUAL CONNECT BY LEVEL <=10000;
影响行数 10000

已用时间: 2.573(毫秒). 执行号:2327.
SQL> COMMIT;
操作已执行
已用时间: 0.931(毫秒). 执行号:2328.
SQL> select count(*) from t;

行号     COUNT(*)            
---------- --------------------
1          10000

已用时间: 0.597(毫秒). 执行号:2329.

4.3.2执行SQL查询

SQL> select id,name from t;

...

行号     ID          NAME    
---------- ----------- --------
9989       9989        TEST9989
9990       9990        TEST9990
9991       9991        TEST9991
9992       9992        TEST9992
9993       9993        TEST9993
9994       9994        TEST9994
9995       9995        TEST9995
9996       9996        TEST9996
9997       9997        TEST9997
9998       9998        TEST9998
9999       9999        TEST9999

行号     ID          NAME     
---------- ----------- ---------
10000      10000       TEST10000

10000 rows got

已用时间: 0.623(毫秒). 执行号:2771.

4.3.3查询SQL监控报告

SQL> set long 10000
SQL> SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=>3101) FROM DUAL;

在这里插入图片描述
由于T表为创建索引,执行计划走了全表扫描。

4.3.4创建调优任务

SQL> DBMS_SQLTUNE.CREATE_TUNING_TASK('SELECT id,name FROM t',TASK_NAME=>'TEST_SQLTUNE');
DMSQL 过程已成功完成
已用时间: 2.678(毫秒). 执行号:3105.

4.3.5执行调优任务

SQL> DBMS_SQLTUNE.EXECUTE_TUNING_TASK('T_SQLTUNE');
DMSQL 过程已成功完成
已用时间: 2.003(毫秒). 执行号:3107.

4.3.6生成调优报告

SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SQLTUNE');

在这里插入图片描述

4.3.7执行调优建议

SQL> CREATE INDEX IDX$$TASK2_EXEC1_1 ON "SYSDBA"."T"("ID");
操作已执行
已用时间: 14.435(毫秒). 执行号:3109.

4.3.8再次生成调优报告

SQL> CALL DBMS_STATS.GATHER_TABLE_STATS('SYSDBA', 'T');
DMSQL 过程已成功完成
已用时间: 25.252(毫秒). 执行号:3119.
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SQLTUNE');

行号     DBMS_SQLTUNE.REPORT_TUNING_TASK('T_SQLTUNE')                                                                                         
---------- -------------------------------------------------------------------------------------------------------------------------------------
1          GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
TUNING TASK NAME    : T_SQLTUNE
TUNING TASK OWNER   : SYSDBA
WORKLOAD TYPE       : SINGLE SQL STATEMENT
EXECUTION COUNT     : 1
CURRENT EXECUTION   : SYSEXECNAME_1
EXECUTION TYPE      : TUNE SQL
SCOPE               : COMPREHENSIVE
TIME LIMIT(SECONDS) : 1800
COMPLETION STATUS   : COMPLETED
STARTED AT          : 2024-10-13 13:02:00
COMPLETED AT        : 2024-10-13 13:02:00
SQL TEXT            : SELECT id,name FROM t

执行完成后,该SQL已经达到优化效果。

4.3.9关闭调优任务

SQL> DBMS_SQLTUNE.DROP_TUNING_TASK('T_SQLTUNE');
DMSQL 过程已成功完成
已用时间: 2.334(毫秒). 执行号:3122.

DBMS_SQLTUNE包当表从未收集过统计信息情况,自动给出收集统计信息语句,当表无任务索引情况,自动生成索引的创建语句,根据实际情况选择索引创建。

更多内容请参考:https://eco.dameng.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FunASR离线文件转写服务开发指南-debian-10.13

FunASR离线文件转写服务开发指南-debian-10.13 服务器环境 debian10.13 64位 第一步 配置静态网卡 auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4/etc/init.d/networking restart第…

C++面试速通宝典——25

473. HTTP如何减少重定向请求 重定向请求&#xff1a; ‌‌‌‌  服务器上的一个资源可能由于迁移、维护等原因从url1移至url2后&#xff0c;而客户端不知情&#xff0c;他还是继续请求url1&#xff0c;这时服务器不能粗暴地返回错误&#xff0c;而是通过302响应码和Locati…

甲方安全和乙方安全的区别

信息安全工作&#xff0c;总会被人分成甲方和乙方&#xff0c;甲乙方原本只是商务层面需方和供方的代称&#xff0c;在安全领域&#xff0c;成了做公司内部安全和为客户提供安全的区别。 通常意义上&#xff0c;什么是甲方安全人员呢&#xff1f;就是在非安全业务的公司从事信…

ROS2 通信三大件之动作 -- Action

通信最后一个&#xff0c;也是不太容易理解的方式action&#xff0c;复杂且重要 1、创建action数据结构 创建工作空间和模块就不多说了 在模块 src/action_moudle/action/Counter.action 下创建文件 Counter.action int32 target # Goal: 目标 --- int32 current_value…

[Python学习日记-45] Python 中模块的介绍与导入

[Python学习日记-45] Python 中模块的介绍与导入 简介 模块的概念与好处 模块的分类 模块导入和调用 自定义模块 模块的查找路径 简介 在前面的学习当中偶尔我们会看到 import ... 一个什么东西的&#xff0c;或者 from ... import ...&#xff0c;那时候并没有进行介绍&…

react+ts+vite 别名一直爆红问题

已经配置如下代码安装了types/node import path from "path"; // https://vitejs.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {"/api": {target: "http://localhost:3000",changeOrigin: true,rewrite: (pa…

如何选择安全的谷歌浏览器插件

在数字时代&#xff0c;浏览器插件为我们提供了极大的便利&#xff0c;增强了我们的浏览体验。然而&#xff0c;随着便利性的增加&#xff0c;安全性问题也日益凸显。选择安全的谷歌浏览器插件是保障个人信息安全的重要步骤。以下是详细的教程&#xff0c;帮助你选择和使用安全…

81 NAT-静态NAT

一 NAT 出口方向实验 1 配置接口的IP地址 2 配置nat 静态映射 3 测试 无法ping 通 202.38.1.100 4 接口上开启静态Nat映射规则 [FW-Router-BJ-GigabitEthernet0/1]nat static enable 6 5 查看配置 [FW-Router-BJ]display nat static 6 测试 7 查看NAT 会话状态 8 静态…

Qt自定义一个圆角对话框

如何得到一个圆角对话框&#xff1f; 步骤&#xff1a; 1、继承自QDiaglog 2、去掉系统自带的边框 3、设置背景透明,不设置4个角会有多余的部分出现颜色 4、对话框内部添加1个QWidget&#xff0c;给这个widget设置圆角&#xff0c;并添加到布局中让他充满对话框 5、后续对…

Redis协议详解及其异步应用

目录 一、Redis Pipeline&#xff08;管道&#xff09;概述优点使用场景工作原理Pipeline 的基本操作步骤C 示例&#xff08;使用 [hiredis](https://github.com/redis/hiredis) 库&#xff09; 二、Redis 事务概述事务的前提事务特征&#xff08;ACID 分析&#xff09;WATCH 命…

【HarmonyOS】HMRouter使用详解(二)路由跳转

路由跳转 HMRouter中使用HMRouterMgr的静态方法push()和replace()来实现路由跳转。使用pop()方法来实现页面返回 push &#xff1a;目标页面不会替换当前页&#xff0c;而是插入页面栈。可以使用pop实现页面的返回操作。replace&#xff1a;目标页面会替换当前页&#xff0c;并…

西门子828d的plc一些信息记录

1、虽然是200的plc但是引入了DB的形式替代原来的V存储区。 2、用户自定义DB块范围&#xff0c;DB9000-DB9063,共64个DB块。 可用地址范围如上图 机床MCP483面板地址表&#xff0c;其它类型的面板地址自己在828d简明调试手册里查看。 如何上载828d的plc程序&#xff1a; 1.通…

web-105linux权限提升

rsync未授权本地覆盖 Rsync 是 linux 下一款数据备份工具&#xff0c;默认开启 873 端口 https://vulhub.org/#/environments/rsync/common/ 借助 Linux 默认计划任务调用/etc/cron.hourly&#xff0c;利用 rsync 连接覆盖 前提条件就是需要知道rsync的密码或者存在未授权 -提…

【成品设计】基于Arduino平台的物联网智能灯

《基于Arduino平台的物联网智能灯》 整体功能&#xff1a; 这个任务中要求实现一个物联网智能灯。实际测试环境中要求设备能够自己创建一个热点&#xff0c;连接这个热点后能自动弹出控制界面&#xff08;强制门户&#xff09;。 功能点 基础功能 (60分) 要求作品至少有2个灯…

发布-订阅模式(Publisher-Subscriber)

实际上&#xff0c;发布-订阅模式只是观察者模式的一个别称。 但是经过时间的沉淀&#xff0c;似乎他已经强大了起来&#xff0c;已经独立于观察者模式&#xff0c;成为另外一种不同的设计模式。在现在的发布订阅模式中&#xff0c;称为发布者的消息发送者不会将消息直接发送给…

Linux下基本指令

Linux下基本指令 登录系统输入ssh root&#xff0c;在后面输入ip公用地址&#xff0c;按下enter键&#xff0c;会弹出一个密码框&#xff0c;输入密码即可登录成功。 Xshell下Altenter全屏&#xff0c;再重复操作是取消全屏。 clear清理屏幕。 01. ls 指令&#xff08;用来…

[红队apt]文件捆绑攻击流程

免责声明:本文用于了解攻击者攻击手法&#xff0c;切勿用于不法用途 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理黑客通过文件捆绑进行攻击的流程思路 文件捆绑原理 废话只多说这一句。 1.exe和2.exe被你捆绑为3.exe。 那么你点击了3.exe就等于点…

信息安全工程师(45)入侵检测系统组成与分类

前言 入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备或软件&#xff0c;能够监控和分析网络或系统活动&#xff0c;以检测和响应潜在的入侵行为。 一、入侵检测系统的组成 根据互联网工程任务组&#xff08;IETF&#xff09;的定义&#xff0c;一个典型的入侵检测…

文科类考研答题规范与卷面整洁度提升:高效备考的秘诀

随着考研竞争的日益激烈&#xff0c;考生们为了在众多竞争者中脱颖而出&#xff0c;纷纷寻求提升自己的备考策略&#xff0c;答题规范和卷面整洁度在文科类考研中显得尤为重要&#xff0c;本文将从答题规范和卷面整洁度两个方面&#xff0c;为广大文科类考研学子提供一些建议&a…

LeetCode刷题日记之回溯算法(一)

目录 前言组合组合总和III电话号码的字母组合总结 前言 今天开始学习回溯算法啦&#xff0c;虽然直接递归学习的时候有涉及到回溯但是没有系统性的学习&#xff0c;希望博主记录的内容能够对大家有所帮助 &#xff0c;一起加油吧朋友们&#xff01;&#x1f4aa;&#x1f4aa;…