暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

Oracle SQL 性能分析原理与实战演练

1957

SQL性能分析简介

SQL Performance Analyzer 简称 SPA

SQL 性能分析通过自动化识别和评估每个业务 SQL 语句变更前后的性能差异所产生的总体影响,并提供一份 SQL 整体性能评估报告,该报告显示了由于语句更改所带来的影响。对于会使性能变差的 SQL 语句,SPA 提供了执行计划详细信息及调整建议,以帮助我们提前纠正任何可能的负面结果,从而使变更对数据库 SQL 的负面影响降到最低。

图片.png

我们可以通过 SQL 性能分析工具分析各种类型的数据库更改对 SQL 性能产生的影响,这里主要包括以下几大类。

  • 1)数据库升级。
  • 2)PDB级别整合或用户层面整合。
  • 3)操作系统或硬件的配置变更。
  • 4)数据库层参数调整。
  • 5)统计信息更新。
  • 6)SQL 优化验证。

图片.png

SQL 性能分析的主要工作流程具体如下。

1)目标环境搭建。
2)根据业务周期捕获生产端需要分析的 SQL,并将其存储在 SQL 调优集(SQL Tunning Set,STS)中。
3)将生产捕获到的 SQL 调优集打包传输到测试环境并导入。
4)在测试环境上创建 SQL 性能分析任务。
5)执行 SQL 调优集中的 SQL 语句,生成变更前的 SQL 执行信息。
6)执行系统变更(升级、迁移等)。
7)重新执行 SQL 调优集中的 SQ L语句,生成变更后的 SQL 执行信息。
8)比较和分析变更前后对 SQL 性能的影响,并生成整体的 SQL 性能评估报告。
9)调优性能下降的 SQL 语句。
10)重复执行步骤 6 到 8,直到达到预期的 SQL 性能目标。

图片.png

图片.png

图片.png

图片.png

捕获 SQL 工作负载对生产系统的性能影响可以忽略不计,并且不应影响吞吐量。包含更多 SQL 语句的 SQL 工作负载将更好地代表应用程序或数据库的状态。这将使 SQL 性能分析器能够更准确地预测系统更改对 SQL 工作负载的潜在影响。因此,您应该捕获尽可能多的 SQL 语句。理想情况下,您应该捕获由应用程序调用或在数据库上运行的所有 SQL 语句。

您可以将捕获的 SQL 语句存储在 SQL 调优集中,并将其用作 SQL 性能分析器的输入源。SQL 调优集是一个数据库对象,包括一个或多个 SQL 语句,以及它们的执行统计信息和执行上下文。SQL 语句可以从不同的源加载到 SQL 调优集中,包括游标缓存、自动工作负载存储库 (AWR)、SQL 跟踪文件和现有的 SQL 调优集。使用 SQL 调优集捕获 SQL 工作负载使您能够:

  •  将 SQL 文本和任何必要的辅助信息存储在单个持久数据库对象中
  •  在 SQL 调优集中填充、更新、删除和选择捕获的 SQL 语句
  •  从各种数据源加载和合并内容,例如自动工作负载存储库 (AWR) 或游标缓存
  •  从捕获 SQL 工作负载的系统导出 SQL 调优集并将其导入另一个系统
  •  重用 SQL 工作负载作为其他顾问的输入源,例如 SQL Tuning Advisor 和 SQL Access Advisor

SPA 的价值

• 在最终用户受到影响之前可以识别 SQL 性能的衰减
• SPA 可以对发生任何变化的 SQL 执行计划所引起的影响进行帮助

  • 数据库升级
  • 优化统计信息更新
  • 新建立的索引,物化视图,分区等

• 可以对成百上千的 SQL 声明自动进行跟踪-手工是不可能完成的
• 可以低系统影响下捕获 SQL 工作量负载
• 与修正衰减的 SQL 调优向导和 SQL 计划基线进行集成

SPA 实战演练

在要升级的原生产环境创建 SPA 专用用户。

1、创建 SPA 用户

set line  240 
col profile for a20 
set pages 999 
col username for a25 
col ACCOUNT_STATUS for a18 
select USERNAME,ACCOUNT_STATUS,CREATED,PROFILE,PASSWORD_VERSIONS,DEFAULT_TABLESPACE from dba_users where account_status='OPEN' order by CREATED asc;

CREATE USER SPAUSER IDENTIFIED BY Oracle;
GRANT CONNECT,RESOURCE,DBA TO SPAUSER;
GRANT ADVISOR TO SPAUSER;
GRANT SELECT ANY DICTIONARY TO SPAUSER;
GRANT ADMINISTER SQL TUNING SET TO SPAUSER;

2、创建 SQL 调优集

conn spauser/Oracle

begin
  DBMS_SQLTUNE.CREATE_SQLSET(SQLSET_NAME  => 'SPA_STS',
                             SQLSET_OWNER => 'SPAUSER');
end;
/

确认SQL调优集信息,命令如下:

select owner, name, STATEMENT_COUNT from dba_sqlset;

·SQLSET_NAME:自定义SQL调优集的名称。
·SQLSET_OWNER:指定进行SQL性能分析的用户。

COLUMN NAME FORMAT a20
COLUMN COUNT FORMAT 99999
COLUMN DESCRIPTION FORMAT a11
SELECT NAME, STATEMENT_COUNT AS "SQLCNT", DESCRIPTION
FROM   USER_SQLSET;

3、获取业务周期 AWR 快照点

select min(snap_id) min_id, max(snap_id) max_id
  from dba_hist_snapshot
 where end_interval_time between
       to_date('2023-01-19 09', 'yyyy-mm-dd hh24') and
       to_date('2023-01-19 21', 'yyyy-mm-dd hh24')
 order by 1;

   MIN_ID     MAX_ID
---------- ----------
     54803	54826

4、SQL 调优集加载数据

通过 AWR 报告中的 SQL 语句导入 SQL 调优集进行整体的 SQL 性能测试,命令如下:

set timing on
declare
  bid     NUMBER := '&begin_snap';
  eid     NUMBER := '&end_snap';
  stsname VARCHAR2(30) := 'SPA_STS';
  stsowner VARCHAR2(30) := 'SPAUSER';
  sts_cur dbms_sqltune.sqlset_cursor;
begin
  open sts_cur for
    select value(P)
      from table(dbms_sqltune.select_workload_repository(bid,
                                                         eid,
                                                         null,                                                         null,
                                                         null,
                                                         null,
                                                         null,
                                                         1,
                                                         null,
                                                         'ALL')) P;
  dbms_sqltune.load_sqlset(sqlset_name     => stsname,
                           populate_cursor => sts_cur,
                           load_option     => 'MERGE',
                           sqlset_owner     => stsowner);
end;
/

Enter value for begin_snap: 54803
Enter value for end_snap: 54826

Elapsed: 00:02:06.79

5、查询 SQL 调优集

set line 567 pages 9999 long 9999
COLUMN SQL_TEXT FORMAT a120 
COLUMN SCH FORMAT a15
COLUMN ELAPSED FORMAT 999999999
SELECT SQL_ID, PARSING_SCHEMA_NAME AS "SCH", SQL_TEXT, 
       ELAPSED_TIME AS "ELAPSED", BUFFER_GETS
FROM   TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 'SPA_JIEKEXU' ) );

SELECT count(*)
FROM   TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 'SPA_JIEKEXU' ) );

  COUNT(*)
----------
       380
范围 描述
parsing_schema_name 解析 SQL 的模式
elapsed_time 此 SQL 语句所用总秒数的总和
buffer_gets 此 SQL 语句的缓冲区获取总数(数据库访问块的次数)
SELECT SQL_ID, ELAPSED_TIME, FETCHES, EXECUTIONS
FROM   TABLE(DBMS_SQLTUNE.SELECT_SQLSET('SPA_STS'));
删除 SQL 调优集

可删除以前的或者测试的 SQL 调优集,本过程不需要这一步。

BEGIN
  DBMS_SQLSET.DROP_SQLSET( sqlset_name => 'SPA_STS' );
END;
/

6、传输 SQL 调整集的过程

DBMS_SQLTUNE 过程 等效的 DBMS_SQLSET 过程 描述
CREATE_STGTAB_SQLSET CREATE_STGTAB 创建一个临时表来保存导出的 SQL 调优集
PACK_STGTAB_SQLSET PACK_STGTAB 使用 SQL 调整集填充临时表
UNPACK_STGTAB_SQLSET UNPACK_STGTAB 将暂存表中的 SQL 调优集复制到数据库中

图片.png

图片.png

步骤如下:

  1. 在生产数据库中,使用 DBMS_SQLTUNE.PACK_STGTAB_SQLSET 或者 DBMS_SQLSET.PACK_STGTAB 将 STS 打包到一个 staging 表中。
  2. 使用 Oracle Data Pump 将 STS 从临时表导出到 .dmp 文件。
  3. 使用传输工具将 .dmp 文件从生产主机传输到测试主机,例如 scp.
  4. 在测试数据库中,使用 Oracle 数据泵将 STS 从文件导入到临时表。
  5. 使用 DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET 或者DBMS_SQLSET.UNPACK_STGTAB 将 STS 从临时表中解压缩。

本小节假定以下内容:

 具有回归 SQL 的 STS 驻留在当前版本中创建的生产数据库中。
 您在Oracle Database 11g第 2 版 (11.2) 中创建的远程测试数据库上运行 SQL 性能分析器试验。
 您希望将 STS 从生产数据库复制到测试数据库并调整 SQL 性能分析器试验的回归。
 您想使用 Oracle Database Pump 在数据库主机之间传输 SQL 调优集。
 您使用DBMS_SQLTUNE而不是 DBMS_SQLSET.

https://docs.oracle.com/en/database/oracle/oracle-database/21/tgsql/managing-sql-tuning-sets.html#GUID-CD6EBF22-6A8B-4404-A155-A90FA16754C6

使用该 CREATE_STGTAB_SQLSET 过程创建一个临时表,以保留导出的 SQL 调整集(注意大小写)。如果你的数据库是通过 ADG、RMAN 升级上来的,那么不需要将调优集导出导入,其他方式则需要下面步骤导出导入到目标库。

BEGIN
  DBMS_SQLTUNE.CREATE_STGTAB_SQLSET ( 
    table_name  => 'T_11G_STAGING_TABLE'
,   schema_name => 'SPAUSER'
,   db_version  => DBMS_SQLTUNE.STS_STGTAB_11_2_VERSION 
);
END;
/

使用该PACK_STGTAB_SQLSET过程用 SQL 调整集填充登台表(注意大小写)。

BEGIN
  DBMS_SQLTUNE.PACK_STGTAB_SQLSET (      
    sqlset_name         => 'SPA_STS'
,   sqlset_owner        => 'SPAUSER'
,   staging_table_name  => 'T_11G_STAGING_TABLE'
,   staging_schema_owner => 'SPAUSER'
,   db_version          => DBMS_SQLTUNE.STS_STGTAB_11_2_VERSION 
);
END;
/
Elapsed: 00:00:56.41


select owner,table_name,num_rows,last_analyzed 
from dba_tables where table_name like '%11G%';

图片.png

源库导出表

col DIRECTORY_PATH for a90
select * from dba_directories;

expdp SPAUSER/Oracle_19C DIRECTORY=BAKDUMP_DIR DUMPFILE=T_11G_STS.dmp TABLES=T_11G_STAGING_TABLE

$ expdp SPAUSER/Oracle DIRECTORY=BAKDUMP_DIR DUMPFILE=T_11G_STS.dmp TABLES=T_11G_STAGING_TABLE

Export: Release 11.2.0.4.0 - Production on Wed Feb 1 11:26:29 2023

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SPAUSER"."SYS_EXPORT_TABLE_01":  SPAUSER/******** DIRECTORY=BAKDUMP_DIR DUMPFILE=T_11G_STS.dmp TABLES=T_11G_STAGING_TABLE 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 877.3 MB
Processing object type TABLE_EXPORT/TABLE/PROCACT_INSTANCE
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "SPAUSER"."T_11G_STAGING_TABLE"             837.8 MB  166082 rows
Master table "SPAUSER"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SPAUSER.SYS_EXPORT_TABLE_01 is:
  /ora_bak/dump_dir/T_11G_STS.dmp
Job "SPAUSER"."SYS_EXPORT_TABLE_01" successfully completed at Wed Feb 1 11:27:10 2023 elapsed 0 00:00:39

执行 Oracle 11g 到 Oracle 19c 的升级迁移变更操作

19c 目标库导入表

impdp SPAUSER/Oracle DIRECTORY=PUBLIC_DUMP DUMPFILE=sts.dmp TABLES=MY_11G_STAGING_TABLE
impdp SPAUSER/Oracle_19C DIRECTORY=PUBLIC_DUMP DUMPFILE=sts.dmp TABLES=MY_11G_STAGING_TABL

Import: Release 19.0.0.0.0 - Production on Fri Sep 30 20:42:03 2022
Version 19.12.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
ORA-39060: table(s) dropped because of conflict with master table
Master table "SPAUSER"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SPAUSER"."SYS_IMPORT_TABLE_01":  SPAUSER/******** DIRECTORY=PUBLIC_DUMP DUMPFILE=sts.dmp TABLES=MY_11G_STAGING_TABL 
Processing object type TABLE_EXPORT/TABLE/PROCACT_INSTANCE
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SPAUSER"."MY_11G_STAGING_TABL"             44.59 MB   71220 rows
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Job "SPAUSER"."SYS_IMPORT_TABLE_01" successfully completed at Fri Sep 30 20:43:19 2022 elapsed 0 00:01:13

impdp  \'/ as sysdba\' DIRECTORY=PUBLIC_DUMP DUMPFILE=sts.dmp TABLES=MY_11G_STAGING_TABLE

在测试数据库上,执行将 UNPACK_STGTAB_SQLSETSQL 调整集从登台表复制到数据库中的过程

BEGIN
  DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET (
    sqlset_name        => '%'
,   replace            => true
,   staging_table_name => 'MY_11G_STAGING_TABLE');
END;
/

7、获取并分析 SQL 对比信息

1)新建 SQL 性能分析任务。

指定 SQLSET_OWNER 和 SQL 调优集的参数值,创建 SQL 性能分析任务TASK_NAME,为后续对比升级前后的 SQL 性能做准备,命令如下:

VARIABLE t_name VARCHAR2(100);
EXEC :t_name := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sqlset_name => 'SPA_STS',task_name => 'SPA_JIEKEXU', SQLSET_OWNER => 'SPAUSER');

·sqlset_name:指定之前创建的 SQL 调优集的名称。
·task_name:自定义 SQL 性能分析任务的名称。
·SQLSET_OWNER:指定 SPA 用户

2)获取升级前 SQL 的执行信息。

指定分析任务 TASK_NAME,获取升级前 SQL 的执行信息。
调用 EXECUTE_ANALYSIS_TASK 使用以下参数的过程:
 将该 task_name 参数设置为您要执行的 SQL 性能分析器任务的名称。

 execution_type 通过以下方式之一设置参数:

  1. 设置为 EXPLAIN PLAN 为 SQL 调优集中的所有 SQL 语句生成执行计划而不执行它们。
  2. 设置为 TEST EXECUTE(推荐)以执行 SQL 调优集中的所有语句并生成它们的执行计划和统计信息。指定时 TEST EXECUTE,过程生成执行计划和执行统计信息。执行统计信息使 SQL 性能分析器能够识别已改进或退化的 SQL 语句。除了生成执行计划之外,收集执行统计信息可以提高性能分析的准确性,但需要更长的时间。
  3. 设置为 CONVERT SQLSET 引用 SQL 试验的执行统计信息和计划的 SQL 调整集。还应指定执行参数的值 SQLSET_NAME 和 SQLSET_OWNER。

 使用参数指定名称以标识执行 execution_name。如果未指定,则 SQL 性能分析器会自动生成任务执行的名称。

 使用参数指定执行 execution_params 参数。对于指定的执行,execution_params 参数被指定为 ( name , value ) 对。例如

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(TASK_NAME      => 'SPA_JIEKEXU',
                                   EXECUTION_NAME => 'EXEC_BEFORE_UPGRADE11',
                                   EXECUTION_TYPE => 'CONVERT SQLSET');
end;
/
3)获取升级后 SQL 的执行信息。

升级变更完成后,指定分析任务 TASK_NAME,获取升级后 SQL 的执行信息,命令如下:

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(TASK_NAME      => 'SPA_JIEKEXU',
                                   EXECUTION_NAME => 'EXEC_AFTER_UPGRADE19',
                                   EXECUTION_TYPE => 'TEST EXECUTE');
end;
/

注意这一步耗时较长,建议放后台执行,本次耗时 Elapsed: 00:57:00.00,需要将以上捕获的 SQL 跑一遍,过程中可看到单核 CPU 100%。可用以下 SQL 查看预估时长及进度。

col TARGET for a30
Set line 456
Col opname for a15
Select INST_ID, SID,SERIAL#,OPNAME,TARGET,TARGET_DESC,SOFAR,TOTALWORK,UNITS,START_TIME,LAST_UPDATE_TIME,ELAPSED_SECONDS,SQL_ID
  from gv$session_longops
 Where SOFAR<>TOTALWORK
 --and sid=5464;
 
--查看等待事件 
SQL> select event,sql_id,sid,serial#,seconds_in_wait from gv$session where type<>'BACKGROUND' and status='ACTIVE' group by event,sql_id,sid,serial#,seconds_in_wait
order by seconds_in_wait desc;

EVENT								 SQL_ID 	            SID    SERIAL# SECONDS_IN_WAIT
----------------------------------------------------------------       ------------- ---------- ---------- ---------------
db file scattered read					 7rv1cbyv6prnc	     1555      49092		 210
SQL*Net message to client					 g05prwps9nva4	     1662      53340		   0

--查杀此会话
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi:ss';
col "KILL_SESS" for a66
select 'alter system kill session '''|| sid|| ','||serial# ||',@'||INST_ID || ''' immediate;' as KILL_SESS,program,machine,PREV_EXEC_START,LOGON_TIME from gv$session where sid=5464;

图片.png

8、执行 SQL 性能分析对比

1)升级前后 SQL 性能的对比。

得到升级前后 SQL 执行的信息之后,就可以对比升级它们的执行性能了,下面从不同的维度(SQL 执行的时间、SQL 执行的 CPU 时间、SQL 执行的物理读、逻辑读等)进行对比分析。

对比升级前后 SQL 执行的时间,命令如下:

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name        => 'SPA_JIEKEXU',
                                   execution_type   => 'COMPARE PERFORMANCE',
                                   execution_name   => 'Compare_elapsed_time',
                                   execution_params => dbms_advisor.arglist
                                       ('execution_name1',
                                       'EXEC_BEFORE_UPGRADE11',
                                       'execution_name2',
                                       'EXEC_AFTER_UPGRADE19',
                                       'comparison_metric',
                                       'elapsed_time'));
end;
/

对比升级前后 SQL 执行的 CPU 时间,命令如下:

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name        => 'SPA_JIEKEXU',
                                   execution_type   => 'COMPARE PERFORMANCE',
                                   execution_name   => 'Compare_CPU_time',
                                   execution_params => dbms_advisor.arglist
                                       ('execution_name1',
                                       'EXEC_BEFORE_UPGRADE11',
                                       'execution_name2',
                                       'EXEC_AFTER_UPGRADE19',
                                       'comparison_metric',
                                       'CPU_TIME'));
end;
/

对比升级前后 SQL 执行的逻辑读,命令如下:

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name        => 'SPA_JIEKEXU',
                                   execution_type   => 'COMPARE PERFORMANCE',
                                   execution_name   => 'Compare_BUFFER_GETS',
                                   execution_params => dbms_advisor.arglist
                                       ('execution_name1',
                                       'EXEC_BEFORE_UPGRADE11',
                                       'execution_name2',
                                       'EXEC_AFTER_UPGRADE19',
                                       'comparison_metric',
                                       'BUFFER_GETS'));
end;
/

对比升级前后 SQL 执行的物理读,命令如下:

begin
  DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name        => 'SPA_JIEKEXU',
                                   execution_type   => 'COMPARE PERFORMANCE',
                                   execution_name   => 'Compare_disk_reads',
                                   execution_params => dbms_advisor.arglist
                                       ('execution_name1',
                                       'EXEC_BEFORE_UPGRADE11',
                                       'execution_name2',
                                       'EXEC_AFTER_UPGRADE19',
                                       'comparison_metric',
                                       'DISK_READS'));
end;
/
2)生成 SQL 性能分析报告,结果如图所示。

图片.png

3)获取全部结果,命令如下:
ALTER SESSION SET EVENTS '31156 trace name context forever, level 0x400';
SET LONG 9999999 longchunksize 100000 linesize 200 head off feedback off echo off
spool 11g_19c_change_0218.html
SELECT DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_JIEKEXU',
                                       'HTML',
                                       'TYPICAL',
                                       'ALL',
                                       NULL,
                                       100,
                                       NULL,
                                       NULL,
                                       NULL)
  FROM DUAL;
spool off

对比 SQL 的执行时间,生成对比报告,命令如下:

set trimspool on
set trim on
set pages 0
set long 999999999
set linesize 1000
spool spa_report_elapsed_time_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU', 'HTML', 'ALL','ALL', 
    top_sql=>300,execution_name=>'Compare_elapsed_time') FROM dual;
spool off;

对比 SQL 执行的 CPU 时间,生成对比报告,命令如下:

spool spa_report_CPU_time_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU', 'HTML', 'ALL','ALL', 
    top_sql=>300,execution_name=>'Compare_CPU_time') FROM dual;
spool off;

对比 SQL 执行的逻辑读时间,生成对比报告,命令如下:

spool spa_report_buffer_time_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU','HTML','ALL','ALL',
    top_sql=>300,execution_name=>'Compare_BUFFER_GETS') FROM dual;
spool off;

对比 SQL 执行的物理读时间,生成对比报告,命令如下:

spool spa_report_buffer_time_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU','HTML','ALL','ALL',
    top_sql=>300,execution_name=>'Compare_DISK_READS') FROM dual;
spool off;

获取错误信息,命令如下:

spool spa_report_errors_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU', 'HTML', 'errors','summary') 
    FROM dual;
spool off;

获取不支持的对象,命令如下:

spool spa_report_unsupport_0218.html
SELECT dbms_sqlpa.report_analysis_task('SPA_JIEKEXU', 'HTML', 'unsupported','all') 
    FROM dual;
spool off;

9、SQL性能分析报告总结

图片.png

图片.png

从本次升级前后 SQ L性能的对比报告来看,一共对比了 344 条 SQL 语句,执行计划改变的共计 148 条,性能改善的共计 10 条,性能下降的共计 7 条,性能不变的共计 287 条,带有报错信息的共计 0 条,不支持的共计 40 条。

根据性能报告,我们可以有针对性地对性能下降的 SQL 语句进行优化,根据上图点击红色部分 SQL_ID 点击进入便可查看相关 SQL 详情,进行优化,这里就不一一细说了,最近一个月的时间内都在搞核心库升级的事情,周末刚刚升级完,还有一堆事情需要处理,咱们就有机会再聊吧。

图片.png

官方文档参考链接

https://docs.oracle.com/en/database/oracle/oracle-database/21/ratug/index.html 

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!
————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
图片.png

最后修改时间:2023-02-24 10:32:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论