oracle-查看sql执行统计信息

简介:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set linesize 260 pagesize 10000
set long 10000
col module for a40;
col sql_id for a20;
col LAST_ACTIVE_TIME for a20
col last_load_time for a20 
col PLAN_TABLE_OUTPUT for a200
col instance_number format 9
col sql_text for a200
variable sql_id varchar2(64);
exec :sql_id:='&sql_id';
variable cursor_number number;

prompt **********************************************************
prompt                        SQL TEXT
prompt **********************************************************
select sql_text
from (
  select  distinct sql_text,piece
  from v$sqltext
  where sql_id = :sql_id
  order by piece)
/

prompt **********************************************************
prompt                        SQL PARENT CURSOR STAT
prompt **********************************************************
set linesize 500 pagesize 10000
col fetches for 999999999
col executions for 999999999
col loads for 9999
col invalidations for 9999
col version_count for 9999
col shared_pool_MB for 9999
col module for a30
col SQL_PROFILE for a30
col SQL_PLAN_BASELINE for a30
col prog_line for a20
col first_load_time for a20;
col last_load_time for a20;
col last_active_time for a20;
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select fetches,
       executions,
       loads,
       invalidations,
       version_count,
       trunc(SHARABLE_MEM/1024/1024) shared_pool_MB,
       parse_calls,
       disk_reads,
       buffer_gets,
       ROWS_PROCESSED,
       elapsed_time/1000 elas_ms,
       cpu_time/1000 cpu_ms,
       first_load_time,
       last_load_time,
       last_active_time,
       module,
       decode(executions, 0, disk_reads, disk_reads / executions) reads_per,
       decode(executions, 0, buffer_gets, buffer_gets / executions) cr_per,
       decode(executions, 0, ROWS_PROCESSED, ROWS_PROCESSED / executions) row_per,
       decode(executions,
              0,
              elapsed_time / 1000000,
              elapsed_time / (executions * 1000)) elas_ms_per,
       decode(executions,
              0,
              cpu_time / 1000000,
              cpu_time / (executions * 1000)) cpu_ms_per,
       decode(executions,
              0,
              APPLICATION_WAIT_TIME / 1000000,
              APPLICATION_WAIT_TIME / (executions * 1000)) app_ms_per,
       decode(executions,
              0,
              CONCURRENCY_WAIT_TIME / 1000000,
              CONCURRENCY_WAIT_TIME / (executions * 1000)) concur_ms_per,
       decode(executions,
              0,
              CLUSTER_WAIT_TIME / 1000000,
              CLUSTER_WAIT_TIME / (executions * 1000)) clu_ms_per,
       decode(executions,
              0,
              USER_IO_WAIT_TIME / 1000000,
              USER_IO_WAIT_TIME / (executions * 1000)) IO_ms_per,
       SQL_PROFILE,
       SQL_PLAN_BASELINE,
       PROGRAM_ID||'-'||PROGRAM_LINE# prog_line
  from v$sqlarea
 where sql_id=:sql_id;

prompt **********************************************************
prompt                        SQL CHILD CURSOR STAT
prompt **********************************************************

SELECT
    sql_id,
    child_number,
    executions,
    loads,
    invalidations,
    plan_hash_value,
    last_active_time,
    first_load_time,
    last_load_time,
    decode(executions,0,buffer_gets,buffer_gets/executions) per_exec_buffer,
    decode(executions,0,elapsed_time/1000,elapsed_time/executions/1000) per_exec_ela_ms
    from v$sql
WHERE
    sql_id =:sql_id
ORDER BY
    last_active_time;

prompt **********************************************************
prompt                        SQL CURSOR LAST PLAN
prompt **********************************************************

declare
begin
select child_number into :cursor_number from 
(select child_number from v$sql where sql_id=:sql_id order by last_active_time desc)
where rownum=1;
end;
/

select * from table(dbms_xplan.display_cursor(:sql_id,:cursor_number,'ADVANCED'));

prompt **********************************************************
prompt                        SQL CURSOR AWR
prompt **********************************************************


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,
               module,
               plan_hash_value,
               EXECUTIONS_DELTA exec,
               decode(EXECUTIONS_DELTA,
                      0,
                      buffer_gets_deltA,
                      round(BUFFER_GETS_DELTA / EXECUTIONS_DELTA)) per_get,
               decode(EXECUTIONS_DELTA,
                      0,
                      ROWS_PROCESSED_DELTA,
                      round(ROWS_PROCESSED_DELTA / EXECUTIONS_DELTA, 3)) per_rows,
               decode(EXECUTIONS_DELTA,
                      0,
                      ELAPSED_TIME_DELTA,
                      round(ELAPSED_TIME_DELTA / EXECUTIONS_DELTA / 1000,
                            2)) time_ms,
               decode(EXECUTIONS_DELTA,
                      0,
                      DISK_READS_DELTA,
                      round(DISK_READS_DELTA / EXECUTIONS_DELTA, 2)) per_read
          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 = :sql_id 
         order by 1 desc)
 where rownum < 50;

prompt **********************************************************
prompt                        SQL CURSOR ASH 
prompt **********************************************************

select * from (
SELECT
    SQL_PLAN_HASH_VALUE,
    sql_plan_line_id, 
    nvl(event,'ON CPU'),
    COUNT(*)
FROM
    v$active_session_history
WHERE
    sql_id = :sql_id 
    AND sample_time > SYSDATE-30/1440
GROUP BY
    SQL_PLAN_HASH_VALUE,sql_plan_line_id,nvl(event,'ON CPU')
ORDER BY
    count(*) DESC)
where rownum<=20;

prompt **********************************************************
prompt                        SQL CURSOR MONITOR
prompt **********************************************************

SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  SQL_ID       => :sql_id,
  TYPE         => 'TEXT',
  REPORT_LEVEL => 'ALL') AS REPORT
FROM dual;












目录
相关文章
|
2月前
|
SQL Oracle 关系型数据库
|
1月前
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
30 0
|
2月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
138 3
|
2月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
84 0
|
3月前
|
SQL Oracle 关系型数据库
一些非常有用的Oracle SQL
一些非常有用的Oracle SQL
38 4
|
2月前
|
Oracle 关系型数据库
oracle收集统计信息,游标失效时间
Dbms_stats Invalidates Cursors in Auto_invalidate mode
30 0
|
SQL Oracle 关系型数据库
ORACLE如何清除OEM下的历史警告信息
ORACLE10G如何清除OEM下的历史警告信息   问题描述:OEM的HOME页面可以显示ORACLE的报警信息,但报警事件清除后该信息不会自动清除。
972 0
|
1月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
1月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2天前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例

推荐镜像

更多