oracle-调优-如何分析分析sql历史执行信息

简介:

查看sql的文本

set line 300
col sql_text for a200
select * from dba_hist_sqltext where sql_id='dxxxh350mfyvj';
      DBID SQL_ID        SQL_TEXT                                                                                                                                                                                                 COMMAND_TYPE
---------- ------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------
 280856689 dxxxh350mfyvj SELECT 'X' FROM tableA WHERE (RCARD, MOCODE) IN (SELECT RCARD, MOCODE FROM (SELECT /*+index(PK_tableA)*/ RCARD, MOCODE FROM tableA WHERE RCARD = :B2 AND ORGID = :B1 ORDER BY MDATE            3
                          DESC, MTIME DESC) WHERE ROWNUM = 1) AND ORGID = :B1 FOR UPDATE                                                                                                                                                      
                                                                                                                                                                                                                                                                                                            
已选择 1 行。

查看sql的历史执行计划有几个

select distinct SQL_ID,PLAN_HASH_VALUE,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')  TIMESTAMP
from dba_hist_sql_plan 
where SQL_ID='dxxxh350mfyvj' order by TIMESTAMP;

SQL_ID        PLAN_HASH_VALUE TIMESTAMP        
------------- --------------- -----------------
dxxxh350mfyvj      3728660352 20220218 22:10:58
已选择 1 行。

select distinct SQL_ID,PLAN_HASH_VALUE,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')  TIMESTAMP
from v$sql_plan
where SQL_ID='2usurkuv91kq5' order by TIMESTAMP;

根据sql_id和plan_hash,查看sql的执行计划

set line 300
col options for a25
col operation for a30
col object_name for a30
select plan_hash_value,id,operation,options,object_name,depth,cost,to_char(TIMESTAMP,'yyyymmdd hh24:mi:ss')
    from DBA_HIST_SQL_PLAN  
    where sql_id ='dxxxh350mfyvj' 
    and plan_hash_value in (3728660352)
    order by plan_hash_value,ID,TIMESTAMP;

PLAN_HASH_VALUE         ID OPERATION                      OPTIONS                   OBJECT_NAME                         DEPTH       COST TO_CHAR(TIMESTAMP,'YYYYMMDDHH24:MI:SS')
--------------- ---------- ------------------------------ ------------------------- ------------------------------ ---------- ---------- ---------------------------------------
     3728660352          0 SELECT STATEMENT                                                                                 0          8 20220218 22:10:58                      
     3728660352          1 FOR UPDATE                                                                                       1            20220218 22:10:58                      
     3728660352          2 BUFFER                         SORT                                                              2            20220218 22:10:58                      
     3728660352          3 NESTED LOOPS                                                                                     3          8 20220218 22:10:58                      
     3728660352          4 VIEW                                                     VW_NSO_1                                4          6 20220218 22:10:58                      
     3728660352          5 SORT                           UNIQUE                                                            5            20220218 22:10:58                      
     3728660352          6 COUNT                          STOPKEY                                                           6            20220218 22:10:58                      
     3728660352          7 VIEW                                                                                             7          6 20220218 22:10:58                      
     3728660352          8 SORT                           ORDER BY STOPKEY                                                  8          6 20220218 22:10:58                      
     3728660352          9 PARTITION HASH                 SINGLE                                                            9          5 20220218 22:10:58                      
     3728660352         10 TABLE ACCESS                   BY GLOBAL INDEX ROWID     tableA                          10          5 20220218 22:10:58                      
     3728660352         11 INDEX                          RANGE SCAN                PK_tableA_NEW                   11          4 20220218 22:10:58                      
     3728660352         12 PARTITION HASH                 ITERATOR                                                          4          2 20220218 22:10:58                      
     3728660352         13 INDEX                          UNIQUE SCAN               PK_tableA_NEW                    5          2 20220218 22:10:58                      

已选择 14 行。

查看sql执行历史的统计信息(平均执行时间,cpu,io,get等)

COL inst FOR 9
SET LINESIZE 340
SET PAGESIZE 10000
COL plan_value FOR 9999999999
COL module FOR a35
COL get_per FOR 99999999
COL read_per FOR 99999999
COL rows_per FOR 99999999
COL elas_per FOR 9999999999
COL cpu_per FOR 99999999
COL IO_per FOR 99999999
COL clu_per FOR 99999999
COL app_per FOR 99999999
COL concur_per FOR 99999999

SELECT *
  FROM (  SELECT TO_CHAR (begin_interval_time, 'yyyy-mm-dd hh24:mi:ss')
                    begin_time,
                    TO_CHAR (end_interval_time, 'yyyy-mm-dd hh24:mi:ss')
                    end_time,
                 a.instance_number inst,
                 a.module,
                 plan_hash_value plan_value,
                 a.sql_id,
                 EXECUTIONS_DELTA exec,
                 ROUND (a.ELAPSED_TIME_DELTA / 1000, 2) total_elastime_ms,
                 ROUND (A.CPU_TIME_DELTA / 1000, 2) total_cputime_ms,
                 ROUND (a.IOWAIT_DELTA / 1000, 2) total_iotime_ms,
                 A.BUFFER_GETS_DELTA total_buffer_get,
                 a.DISK_READS_DELTA total_disk_read,
                 DECODE (EXECUTIONS_DELTA,
                         0, buffer_gets_deltA,
                         ROUND (BUFFER_GETS_DELTA / EXECUTIONS_DELTA))
                    get_per,
                 DECODE (EXECUTIONS_DELTA,
                         0, DISK_READS_DELTA,
                         ROUND (DISK_READS_DELTA / EXECUTIONS_DELTA))
                    read_per,
                 DECODE (EXECUTIONS_DELTA,
                         0, ROWS_PROCESSED_DELTA,
                         ROUND (ROWS_PROCESSED_DELTA / EXECUTIONS_DELTA))
                    rows_per,
                 DECODE (
                    EXECUTIONS_DELTA,
                    0, ELAPSED_TIME_DELTA,
                    ROUND (ELAPSED_TIME_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    elas_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, CPU_TIME_DELTA,
                         ROUND (CPU_TIME_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    cpu_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, IOWAIT_DELTA,
                         ROUND (IOWAIT_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    IO_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, CLWAIT_DELTA,
                         ROUND (CLWAIT_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    clu_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, APWAIT_DELTA,
                         ROUND (APWAIT_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    app_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, CCWAIT_DELTA,
                         ROUND (CCWAIT_DELTA / EXECUTIONS_DELTA / 1000, 2))
                    concur_per_ms,
                 DECODE (EXECUTIONS_DELTA,
                         0, LOADS_DELTA,
                         ROUND (LOADS_DELTA / EXECUTIONS_DELTA, 2))
                    per_loads
            FROM dba_hist_sqlstat a, DBA_HIST_SNAPSHOT b
           WHERE     a.snap_id = b.snap_id
                 AND a.instance_number = b.instance_number
                 AND a.sql_id = 'dxxxh350mfyvj'
        ORDER BY 1 DESC)
 WHERE ROWNUM < 100;

BEGIN_TIME          END_TIME            INST MODULE                               PLAN_VALUE SQL_ID              EXEC TOTAL_ELASTIME_MS TOTAL_CPUTIME_MS TOTAL_IOTIME_MS TOTAL_BUFFER_GET TOTAL_DISK_READ   GET_PER  READ_PER  ROWS_PER ELAS_PER_MS CPU_PER_MS  IO_PER_MS CLU_PER_MS APP_PER_MS CONCUR_PER_MS  PER_LOADS
------------------- ------------------- ---- ----------------------------------- ----------- ------------- ---------- ----------------- ---------------- --------------- ---------------- --------------- --------- --------- --------- ----------- ---------- ---------- ---------- ---------- ------------- ----------
2022-04-16 15:30:42 2022-04-16 16:02:56    1 vivoTestStand20211107154927.exe      3728660352 dxxxh350mfyvj     154010        81884356.4         12639.58          619.62          1720577             280        11         0         1      531.68        .08          0          0        .13        456.95          0
2022-04-14 14:00:33 2022-04-14 14:30:41    1                                               0 dxxxh350mfyvj                     21918.64          9919.31                                                                                                                                                                
2022-04-14 13:30:24 2022-04-14 14:00:33    1                                               0 dxxxh350mfyvj                     19395.85          8990.93                                                                                                                                                                
2022-04-14 13:00:15 2022-04-14 13:30:24    1                                               0 dxxxh350mfyvj                        15279          7269.61                                                                                                                                                                
2022-04-14 12:30:08 2022-04-14 13:00:15    1                                               0 dxxxh350mfyvj                     12710.42          6711.23                                                                                                                                                                
2022-04-14 12:00:01 2022-04-14 12:30:08    1                                               0 dxxxh350mfyvj                     14246.66          7469.19                                                                                                                                                                
2022-04-14 11:30:54 2022-04-14 12:00:01    1                                               0 dxxxh350mfyvj                     17609.83          8973.17                                                                                                                                                                
2022-04-14 11:00:46 2022-04-14 11:30:54    1                                               0 dxxxh350mfyvj                     19390.37          9988.51                                                                                                                                                                
2022-04-14 10:30:38 2022-04-14 11:00:46    1                                               0 dxxxh350mfyvj                     20320.79         10569.63                                                                                                                                                                
2022-04-14 10:00:30 2022-04-14 10:30:38    1                                               0 dxxxh350mfyvj                      21101.4         10743.94                                                                                                                                                                

查询该sql的历史执行情况

col snap_id for 99999999                                                                                   
col date_time for a30                                                                                      
col plan_hash for 9999999999                                                                               
col executions for 99999999                                                                                
col avg_etime_s heading 'etime/exec' for 9999999.99                                                        
col avg_lio heading 'buffer/exec' for 99999999999                                                          
col avg_pio heading 'diskread/exec' for 99999999999                                                        
col avg_cputime_s heading 'cputim/exec' for 9999999.99                                                     
col avg_row heading 'rows/exec' for 9999999                                                                
select * from(                                                                                             
select distinct                                                                                            
s.snap_id,                                                                                                 
to_char(s.begin_interval_time,'mm/dd/yy_hh24mi') || to_char(s.end_interval_time,'_hh24mi') date_time,      
sql.plan_hash_value plan_hash,                                                                             
sql.executions_delta executions,                                                                           
(sql.elapsed_time_delta/1000000)/decode(sql.executions_delta,null,1,0,1,sql.executions_delta) avg_etime_s, 
sql.buffer_gets_delta/decode(sql.executions_delta,null,1,0,1,sql.executions_delta) avg_lio,                
sql.disk_reads_delta/decode(sql.executions_delta,null,1,0,1,sql.executions_delta) avg_pio,                 
(sql.cpu_time_delta/1000000)/decode(sql.executions_delta,null,1,0,1,sql.executions_delta) avg_cputime_s,   
sql.rows_processed_total/decode(sql.executions_delta,null,1,0,1,sql.executions_delta) avg_row              
from dba_hist_sqlstat sql, dba_hist_snapshot s                                                             
where sql.instance_number =(select instance_number from v$instance)                                        
and sql.dbid =(select dbid from v$database)                                                                
and s.snap_id = sql.snap_id                                                                                
and sql_id = trim('&sql_id') order by s.snap_id desc)                                                      
where rownum <= 100; 

查看sql执行统计信息


SELECT INST_ID,
       sql_text,
       address,
       HASH_VALUE,
       sql_id,
       CHILD_NUMBER,
       CPU_TIME,
       ELAPSED_TIME,
       FIRST_LOAD_TIME,
       LAST_LOAD_TIME,
       last_active_time,
       SHARABLE_MEM,
       SORTS,
       EXECUTIONS,
       DISK_READS,
       BUFFER_GETS,
       CONCURRENCY_WAIT_TIME,
       CLUSTER_WAIT_TIME,
       USER_IO_WAIT_TIME,
       sql_fulltext
  FROM gv$sql
 WHERE sql_id = 'abanhaqjghq3h';

查看某个sql的内存中的执行计划

set linesize 200
select * from table(DBMS_XPLAN.DISPLAY_CURSOR('abanhaqjghq3h',1));  

11g,flush某个sql的执行计划

--exec sys.dbms_shared_pool.purge('ADDRESS,HASH_VALUE','c');
exec sys.dbms_shared_pool.purge('C000000F75648040,2734184560','c');
exec sys.dbms_shared_pool.purge('C000000F73273450,426993161','c');
exec sys.dbms_shared_pool.purge('C000000A73C19CF8,2734184560','c');
exec sys.dbms_shared_pool.purge('C000000F75648040,2734184560','c');
目录
相关文章
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
9月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
640 8
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
654 6
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
SQL Oracle 关系型数据库
ORACLE如何清除OEM下的历史警告信息
ORACLE10G如何清除OEM下的历史警告信息   问题描述:OEM的HOME页面可以显示ORACLE的报警信息,但报警事件清除后该信息不会自动清除。
1105 0
|
9月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
802 93

热门文章

最新文章

推荐镜像

更多