热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

查看SQL语句信息(脚本sqlstat.sql)

--查看SQL语句信息(脚本sqlstat.sql)SYS@PROD1>@sqlstats.sql0hwwkmuancxmm15SYS@PROD1>SETECHOO
--查看SQL语句信息(脚本sqlstat.sql)

SYS@PROD1> @sqlstats.sql 0hwwkmuancxmm 15
SYS@PROD1> SET ECHO OFF

				    PROD1 / 2017-03-08

------------------------------------------------------------------------------------------
Interval (seconds)									15
Period						 2017-03-08 20:15:46 - 2017-03-08 20:16:01
------------------------------------------------------------------------------------------
Identification
------------------------------------------------------------------------------------------
SQL Id									     0hwwkmuancxmm
Execution Plan Hash Value							 903671040
------------------------------------------------------------------------------------------
Shared Cursors Statistics
------------------------------------------------------------------------------------------
Total Parses										 0
Loads / Hard Parses									 0
Invalidations										 0
Cursor Size / Shared (bytes)								 0
------------------------------------------------------------------------------------------
Activity by Time
------------------------------------------------------------------------------------------
Elapsed Time (seconds)								     0.000
CPU Time (seconds)								     0.000
Wait Time (seconds)								     0.000
------------------------------------------------------------------------------------------
Activity by Waits
------------------------------------------------------------------------------------------
Application Waits (%)
Concurrency Waits (%)
Cluster Waits (%)
User I/O Waits (%)
Remaining Waits (%)
CPU (%)
------------------------------------------------------------------------------------------
Elapsed Time Breakdown
------------------------------------------------------------------------------------------
SQL Time (seconds)								     0.000
PL/SQL Time (seconds)								     0.000
Java Time (seconds)								     0.000
------------------------------------------------------------------------------------------
Execution Statistics				 Total	   Per Execution	   Per Row
------------------------------------------------------------------------------------------
Elapsed Time (milliseconds)			     0
CPU Time (milliseconds) 			     0
Executions					     0
Buffer Gets					     0
Disk Reads					     0
Direct Writes					     0
Rows						     0
Fetches 					     0
Average Fetch Size
------------------------------------------------------------------------------------------
Other Statistics
------------------------------------------------------------------------------------------
Executions that Fetched All Rows (%)
Serializable Aborts									 0
------------------------------------------------------------------------------------------

@sqlstats.sql

SET ECHO OFF
REM ***************************************************************************
REM ******************* Troubleshooting Oracle Performance ********************
REM ************************* http://top.antognini.ch *************************
REM ***************************************************************************
REM
REM File name...: sqlstats.sql
REM Author......: Christian Antognini
REM Date........: February 2014
REM Description.: This script shows the performance statistics associated to a 
REM               cursor. It can show:
REM               - The statistics since the cursor was loaded
REM               - The statistics about the last n seconds
REM               When the second parameter is set to a value greater than 0, 
REM               the latter are shown. Otherwise, the former are shown.
REM Notes.......: The data is based on the v$sqlstats dynamic performance view
REM Parameters..: &1: SQL id of the cursor
REM               &2: length of the interval in seconds
REM
REM You can send feedbacks or questions about this script to top@antognini.ch.
REM
REM Changes:
REM DD.MM.YYYY Description
REM ---------------------------------------------------------------------------
REM 30.06.2014 Added header to the output
REM 26.05.2016 Fixed a "division by zero" bug
REM ***************************************************************************

SET TERMOUT OFF SERVEROUT ON LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 90 VERIFY OFF FEEDBACK OFF HEADING OFF

COLUMN "Text" FORMAT A90 WRAP
COLUMN global_name NEW_VALUE global_name
COLUMN day NEW_VALUE day

VARIABLE sql_id VARCHAR2(13)
VARIABLE interval NUMBER

BEGIN
  :sql_id := '&1';
  :interval := to_number('&2');
  IF :interval <0
  THEN
    :interval := 0;
  END IF;
EXCEPTION
  WHEN value_error THEN
    :interval := 0;
END;
/

UNDEFINE 1
UNDEFINE 2

SELECT global_name, decode(:interval, 0, to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),
                                         to_char(sysdate,'YYYY-MM-DD')) AS day
FROM global_name;

TTITLE CENTER '&global_name / &day' SKIP 1

SET TERMOUT ON

SELECT NULL FROM dual;

DECLARE
  c_line CONSTANT INTEGER := 90;
  c_col1 CONSTANT INTEGER := 36;
  c_col2 CONSTANT INTEGER := 54;

  t1 DATE;
  t2 DATE;
  s1 v$sqlstats%ROWTYPE;
  s2 v$sqlstats%ROWTYPE;
  w1 NUMBER;
  w2 NUMBER;
  r NUMBER;
  e NUMBER;

  PROCEDURE o(p_name IN VARCHAR2, p_value IN VARCHAR2) AS
  BEGIN
    IF p_value IS NULL
    THEN
      dbms_output.put_line(p_name);
    ELSE
      dbms_output.put_line(rpad(p_name, c_col1) || lpad(p_value, c_col2));
    END IF;
  END;

  PROCEDURE o(p_name IN VARCHAR2, p_value1 IN VARCHAR2, p_value2 IN VARCHAR2, p_value3 IN VARCHAR2) AS
  BEGIN
    dbms_output.put_line(rpad(p_name, c_col1) || lpad(p_value1, c_col2/3) || lpad(p_value2, c_col2/3) || lpad(p_value3, c_col2/3));
  END;

  PROCEDURE o(p_text IN VARCHAR2) AS
  BEGIN
    o(p_text, cast(NULL AS VARCHAR2));
  END;

  PROCEDURE o(p_linesize IN INTEGER DEFAULT c_line) AS
  BEGIN
    dbms_output.put_line(rpad('-', p_linesize, '-'));
  END;

  PROCEDURE o(p_name IN VARCHAR2, p_value IN NUMBER, p_integer IN BOOLEAN DEFAULT TRUE) AS
  BEGIN
    IF p_integer
    THEN
      o(p_name, to_char(round(p_value, 0), '9,999,999,999,999'));
    ELSE
      o(p_name, to_char(round(p_value, 3), '9,999,999,990.999'));
    END IF;
  END;

  PROCEDURE o(p_name IN VARCHAR2, p_value IN NUMBER, p_executions IN NUMBER, p_rows IN NUMBER, p_integer IN BOOLEAN DEFAULT TRUE) AS
  BEGIN
    IF p_integer
    THEN
      o(p_name, 
        to_char(round(p_value, 0), '9,999,999,999,999'), 
        to_char(round(p_value/nullif(p_executions, 0), 0), '9,999,999,999,999'), 
        to_char(round(p_value/nullif(p_rows, 0), 3), '9,999,999,990.999'));
    ELSE
      o(p_name, 
        to_char(round(p_value, 3), '9,999,999,990.999'), 
        to_char(round(p_value/nullif(p_executions, 0), 3), '9,999,999,990.999'), 
        to_char(round(p_value/nullif(p_rows, 0), 3), '9,999,999,990.999'));
    END IF;
  END;

BEGIN
  t1 := sysdate;
  
  IF :interval > 0
  THEN
    SELECT * INTO s1
    FROM v$sqlstats
    WHERE sql_id = :sql_id;
  
    dbms_lock.sleep(:interval);
  END IF;

  t2 := sysdate;
  
  SELECT * INTO s2
  FROM v$sqlstats
  WHERE sql_id = :sql_id;

  IF :interval > 0
  THEN    
    o();
    o('Interval (seconds)', :interval);
    o('Period', to_char(t1, 'YYYY-MM-DD HH24:MI:SS') || ' - ' || to_char(t2, 'YYYY-MM-DD HH24:MI:SS'));
  END IF;
  o();
  o('Identification');
  o();
  $IF dbms_db_version.version >= 12
  $THEN
    o('Container Id', s2.con_id);
  $END
  o('SQL Id', s2.sql_id);
  o('Execution Plan Hash Value', to_char(s2.plan_hash_value));

  o();
  o('Shared Cursors Statistics');
  o();
  o('Total Parses', s2.parse_calls - nvl(s1.parse_calls,0));
  o('Loads / Hard Parses', s2.loads - nvl(s1.loads,0));
  o('Invalidations', s2.invalidations - nvl(s1.invalidations,0));
  o('Cursor Size / Shared (bytes)', s2.sharable_mem - nvl(s1.sharable_mem,0));

  o();
  o('Activity by Time');
  o();
  o('Elapsed Time (seconds)', (s2.elapsed_time - nvl(s1.elapsed_time,0)) / 1E6, FALSE);
  o('CPU Time (seconds)', (s2.cpu_time - nvl(s1.cpu_time,0)) / 1E6, FALSE);
  w1 := s1.elapsed_time - s1.cpu_time;
  w2 := s2.elapsed_time - s2.cpu_time;
  o('Wait Time (seconds)', (w2 - nvl(w1,0)) / 1E6, FALSE);

  o();
  o('Activity by Waits');
  o();
  o('Application Waits (%)', (s2.application_wait_time - nvl(s1.application_wait_time, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time,0), 0) * 100, FALSE);   
  o('Concurrency Waits (%)', (s2.concurrency_wait_time - nvl(s1.concurrency_wait_time, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time,0), 0) * 100, FALSE);   
  o('Cluster Waits (%)', (s2.cluster_wait_time - nvl(s1.cluster_wait_time, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time, 0), 0) * 100, FALSE);
  o('User I/O Waits (%)', (s2.user_io_wait_time - nvl(s1.user_io_wait_time, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time, 0), 0) * 100, FALSE);
  w1 := s1.elapsed_time - s1.cpu_time - s1.application_wait_time - s1.concurrency_wait_time - s1.cluster_wait_time - s1.user_io_wait_time;
  w2 := s2.elapsed_time - s2.cpu_time - s2.application_wait_time - s2.concurrency_wait_time - s2.cluster_wait_time - s2.user_io_wait_time;
  o('Remaining Waits (%)', (w2 - nvl(w1, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time, 0), 0) * 100, FALSE);   
  o('CPU (%)', (s2.cpu_time - nvl(s1.cpu_time, 0)) / nullif(s2.elapsed_time - nvl(s1.elapsed_time, 0), 0) * 100, FALSE);

  o();
  o('Elapsed Time Breakdown');
  o();
  w1 := s1.elapsed_time - s1.plsql_exec_time - s1.java_exec_time;
  w2 := s2.elapsed_time - s2.plsql_exec_time - s2.java_exec_time;
  o('SQL Time (seconds)', (w2 - nvl(w1, 0)) / 1E6, FALSE);  
  o('PL/SQL Time (seconds)', (s2.plsql_exec_time - nvl(s1.plsql_exec_time, 0)) / 1E6, FALSE);
  o('Java Time (seconds)', (s2.java_exec_time - nvl(s1.java_exec_time, 0)) / 1E6, FALSE);

  o();
  o('Execution Statistics', '             Total     Per Execution           Per Row');
  o();
  e := s2.executions - nvl(s1.executions, 0);
  r := s2.rows_processed - nvl(s1.rows_processed, 0);
  o('Elapsed Time (milliseconds)', (s2.elapsed_time - nvl(s1.elapsed_time, 0)) / 1E3, e, r);
  o('CPU Time (milliseconds)', (s2.cpu_time - nvl(s1.cpu_time, 0)) / 1E3, e, r);
  o('Executions', s2.executions - nvl(s1.executions, 0), e, r);
  o('Buffer Gets', s2.buffer_gets - nvl(s1.buffer_gets, 0), e, r);
  o('Disk Reads', s2.disk_reads - nvl(s1.disk_reads, 0), e, r);
  o('Direct Writes', s2.direct_writes - nvl(s1.direct_writes, 0), e, r);
  o('Rows', s2.rows_processed - nvl(s1.rows_processed, 0), e, r);
  o('Fetches', s2.fetches - nvl(s1.fetches, 0), e, r);
  o('Average Fetch Size', nullif(r, 0) / nullif(s2.fetches - nvl(s1.fetches, 0), 0), NULL, NULL);

  o();
  o('Other Statistics');
  o();
  o('Executions that Fetched All Rows (%)', floor((s2.end_of_fetch_count - nvl(s1.end_of_fetch_count, 0)) / nullif(s2.executions - nvl(s1.executions, 0), 0) * 100));
  o('Serializable Aborts', s2.serializable_aborts - nvl(s1.serializable_aborts, 0));
  o();
END;
/

TTITLE OFF

CLEAR COLUMNS


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
author-avatar
浪漫的没天份
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有