SQL调优指南笔记21:Monitoring Database Operations
Posted dingdingfish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL调优指南笔记21:Monitoring Database Operations相关的知识,希望对你有一定的参考价值。
本文为SQL Tuning Guide 第21章“Monitoring Database Operations”的笔记。
本章介绍如何监控 SQL 和 PL/SQL。
重要基础概念
- SQL tuning set (STS)
A database object that includes one or more SQL statements along with their execution statistics and execution context.
21.1 About Monitoring Database Operations
当 STATISTICS_LEVEL 初始化参数设置为 TYPICAL(默认值)或 ALL 时,SQL 监控功能默认启用。
Oracle Database Concepts 对数据库操作的简要概念概述
21.1.1 About Database Operations
数据库操作是一组数据库任务。 典型任务可能是批处理作业或提取、转换和加载 (ETL) 处理作业。
数据库操作要么是简单的,要么是复合的。
简单的数据库操作
一个简单的数据库操作是一个单独的 SQL 语句或 PL/SQL 子程序。 启用 SQL Monitor 功能后,当以下任一条件为真时,数据库会自动监视简单的数据库操作:
- SQL 语句或 PL/SQL 子程序在单次执行中至少消耗了 5 秒的 CPU 或 I/O 时间。
- SQL 语句并行执行。
- SQL 语句指定 */*+ MONITOR / 提示。
- 事件 sql_monitor 指定要监视的语句的 SQL ID 列表。 例如,以下语句强制对 SQL ID 5hc07qvt8v737 和 9ht3ba3arrzt3 进行实例级监控:
ALTER SYSTEM SET EVENTS 'sql_monitor [sql: 5hc07qvt8v737|sql: 9ht3ba3arrzt3] force=true'
在 SQL 执行计划的每一步,数据库都会根据运行时间、CPU 时间、读写次数和 I/O 等待时间等性能指标跟踪统计信息。 这些指标在称为 SQL 监视器活动报告的图形和交互式报告中可用。
复合数据库操作
复合数据库操作由用户定义。 它包括在数据库会话中执行的所有 SQL 语句或 PL/SQL 子程序,起点和终点使用过程 DBMS_SQL_MONITOR.BEGIN_OPERATION 和 DBMS_SQL_MONITOR.END_OPERATION 定义。 复合数据库操作由其名称和执行 ID 唯一标识,并且可以执行多次。
注意:一个数据库会话一次最多可以参与一个数据库操作。
当以下任一条件为真时,Oracle 数据库会自动监视复合操作:
- 该操作至少消耗了 5 秒的 CPU 或 I/O 时间。
- 通过在 DBMS_SQL_MONITOR.BEGIN_OPERATION 中将 FORCED_TRACKING 设置为 Y 来强制跟踪操作。
注:"Getting the Most Out of SQL Monitor"对SQL Monitor的简要概述
21.1.2 Purpose of Monitoring Database Operations
对于简单的操作,实时 SQL 监控有助于确定语句将时间花在哪里。
您还可以查看最近完成的语句的时间和资源使用明细。 通过这种方式,您可以更好地确定特定操作为何代价高昂。 实时 SQL 监控的用例包括:
- 频繁执行的 SQL 语句的执行速度比正常情况慢。 您必须确定此问题的根本原因。
- 数据库会话性能下降。
- 并行 SQL 语句耗时较长。 您想要确定服务器进程如何划分工作。
在 OLTP 和数据仓库环境中,一个作业通常对相关的 SQL 语句进行逻辑分组。 该作业可以跨越多个并发会话。 数据库操作通过使您能够将一组语句或过程视为一个命名的、唯一标识的和可重新执行的单元来扩展实时 SQL 监控。 监控操作的用例包括:
- 包含许多 SQL 语句的定期批处理作业必须在特定小时数内完成,但花费的时间比预期的要长。
- 数据库升级后,一个重要的批处理作业的执行时间增加了。 要解决这个问题,必须从升级前后的批处理作业中收集足够的相关统计数据,比较两组数据,然后识别变化。
- 打包 SQL 调优集 (STS) 花费的时间比预期的要长得多。 要诊断问题,您需要知道随着时间的推移正在执行什么。 因为这个问题不容易重现,所以您需要在进程运行时对其进行监控。
也可以看看:
为什么使用 SQL Monitor 用于演示 SQL Monitor 的一些用途的视频
21.1.3 How Database Monitoring Works
实时 SQL 监控是一种内置的数据库基础架构,可帮助您识别长时间运行的并行 SQL 语句的性能问题。
下图概述了实时 SQL 监控的体系结构。
图 21-1 数据库操作监控架构
如上图所示,DBMS_SQL_MONITOR 包定义了数据库操作。 启动监控后,数据库将有关数据库操作的元数据存储在 AWR 中,以及 AWR 和 ASH 中的数据。 当每个受监视的语句执行时,数据库会近乎实时地刷新监视统计信息,通常每秒刷新一次。 数据库将操作数据(语句和元数据)存储在 SGA 中。 操作完成后,数据库将 SQL Monitor 报告写入磁盘,可以使用 DBA_HIST_REPORTS 视图在其中查询。
每个受监视的数据库操作在 V$SQL_MONITOR
视图中都有一个条目。 此条目跟踪为执行收集的关键性能指标,包括耗用时间、CPU 时间、读写次数、I/O 等待时间和各种其他等待时间。 V$SQL_PLAN_MONITOR
视图包括被监控的 SQL 语句的执行计划中每个操作的监控统计信息。 您可以使用 DBMS_SQL_MONITOR.REPORT_SQL_MONITOR、Oracle Enterprise Manager Cloud Control (Cloud Control) 访问报告。
21.1.4 User Interfaces for Database Operations Monitoring
实时 SQL 监控是 Oracle 数据库优化包的一个特性。 当 CONTROL_MANAGEMENT_PACK_ACCESS 初始化参数设置为 DIAGNOSTIC+TUNING(默认)时,启用数据库操作。
21.1.4.1 Monitored SQL Executions Page in Cloud Control
Cloud Control 中的 Monitored SQL Executions 页面,也称为 SQL Monitor,显示 SQL 执行的详细信息。 SQL Monitor 是用于报告数据库操作的推荐界面。
执行计划每个步骤的统计数据都按关键性能指标进行跟踪,包括耗用时间、CPU 时间、读写次数、I/O 等待时间以及各种其他等待时间。 这些指标使 DBA 能够深入分析 SQL 执行并为受监控的 SQL 语句决定最合适的调优策略。
SQL Monitor Active Reports 提供基于 Flash 的交互式报告,使您能够将数据保存在 html 文件中。 您可以保存此文件并离线查看。
Monitored SQL Executions 显示 SQL ID、数据库时间和 I/O 请求等信息。
21.1.4.2 DBMS_SQL_MONITOR Package
DBMS_SQL_MONITOR 包定义复合数据库操作的开始和结束,并生成数据库操作的报告。
此处仅介绍最重要的REPORT_SQL_MONITOR函数。
此函数构建一个详细的报告,其中包含 SQL 语句、PL/SQL 块或数据库操作的监控信息。
对于每个操作,它都会提供关键信息和相关的全局统计信息。 使用此函数获取数据库操作的详细监控信息。
此报告的目标数据库操作可以是:
- Oracle 数据库监控的最后一次数据库操作(默认,无参数)。
- 在指定会话中执行并由 Oracle 数据库监视的最后一个数据库操作。 会话由其会话 ID 和可选的序列号标识(-1 是当前会话)。
- 由其 sql_id 标识的特定数据库操作的最后一次执行。
- 由组合 sql_id、sql_exec_start 和 sql_exec_id 标识的数据库操作的特定执行。
- 由 dbop_name 标识的特定数据库操作的最后一次执行。
- 由dbop_name、dbop_exec_id 组合标识的数据库操作的具体执行。
使用类型参数指定输出类型:TEXT(默认)、HTML、ACTIVE 或 XML。
21.1.4.3 Attributes of composite Database Operations
DBMS_SQL_MONITOR.BEGIN_OPERATION 函数定义了一个数据库操作。
复合数据库操作由以下信息唯一标识:
- 数据库操作名称
这是用户创建的名称,例如 daily_sales_report。 一个作业的操作名称是相同的,即使它是由不同的会话或在不同的数据库上同时执行的。 数据库操作名称不驻留在不同的名称空间中。 - 数据库操作执行ID
同一数据库操作的两个或多个事件可以同时运行,名称相同但执行 ID 不同。 这个数字 ID 唯一标识同一数据库操作的不同执行。
当您开始数据库操作时,数据库会自动创建一个执行 ID。 您还可以指定用户创建的执行 ID。
或者,您可以指定在其中启动数据库操作的会话 ID 和会话序列号。 因此,一个数据库会话可以启动在不同数据库会话中定义的数据库操作。
数据库使用以下三元组值来标识在 V$SQL_MONITOR 视图中监视的每个 SQL 和 PL/SQL 语句,无论该语句是否包含在数据库操作中:
- 标识 SQL 语句的 SQL 标识符 (SQL_ID)
- 开始执行时间戳(SQL_EXEC_START)
- 内部生成的标识符,以确保此主键真正唯一 (SQL_EXEC_ID)
您可以使用零个或多个附加属性来描述和标识复合数据库操作的特征。 每个属性都有一个名称和值。 例如,对于数据库操作 daily_sales_report,您可以定义属性 db_name 并为其分配值 prod。
21.1.4.4 MONITOR and NO_MONITOR Hints
您可以使用 MONITOR 和 NO_MONITOR 提示来控制对单个语句的跟踪。
MONITOR 提示强制对查询进行实时 SQL 监控,即使该语句不是长时间运行的。 此提示仅在参数 CONTROL_MANAGEMENT_PACK_ACCESS 设置为 DIAGNOSTIC+TUNING 时有效。
21.1.4.5 Views for Monitoring and Reporting on Database Operations
您可以使用 V$ 和数据字典视图获取数据库操作的统计信息。
下表总结了这些观点。
表21-2 数据库操作监控视图
视图 | 描述 |
---|---|
DBA_HIST_REPORTS | 此视图显示有关在自动工作负载存储库 (AWR) 中捕获的 XML 报告的元数据。 每个 XML 报告都包含有关组件某些活动的详细信息。 |
DBA_HIST_REPORTS_DETAILS | 此视图显示有关 AWR 中捕获的每个报告的详细信息。 每个报告的元数据显示在 DBA_HIST_REPORTS 视图中,而实际报告在 DBA_HIST_REPORTS_DETAILS 视图中可用。 |
V$SQL_MONITOR | 此视图包含有关简单和复合数据库操作的全局高级信息。 |
V$SQL_MONITOR_SESSTAT | 该视图包含数据库操作中涉及的所有会话的统计信息。 |
V$SQL_PLAN_MONITOR | 该视图包含了被监控SQL语句执行计划中每一步的监控统计信息。 |
您可以将前面的 V$ 视图与以下视图结合使用,以获取有关受监视执行的其他信息:
- V$ACTIVE_SESSION_HISTORY
- V$SESSION
- V$SESSION_LONGOPS
- V$SQL
- V$SQL_PLAN
21.1.5 Basic Tasks in Database Operations Monitoring
基本任务如下:
-
“启用和禁用数据库操作监控”
此任务说明如何在系统和语句级别启用对数据库操作的自动监视。 -
“定义复合数据库操作”
本节介绍如何使用 PL/SQL 定义数据库操作的开始和结束。 -
“生成和访问 SQL 监视器报告”
本节介绍如何生成和解释有关数据库操作的报告。
21.2 Enabling and Disabling Monitoring of Database Operations
使用初始化参数启用或禁用监视。
21.2.1 Enabling Monitoring of Database Operations at the System Level
当 STATISTICS_LEVEL 初始化参数设置为 TYPICAL(默认值)或 ALL 时,SQL 监控功能默认启用。 SQL 监控会针对所有长时间运行的查询自动启动。
先决条件:
因为 SQL 监控是 Oracle 数据库调优包的一个特性,所以 CONTROL_MANAGEMENT_PACK_ACCESS 初始化参数必须设置为 DIAGNOSTIC+TUNING(默认值)。
本教程假设以下内容:
- STATISTICS_LEVEL 初始化参数设置为 BASIC。
- 您想要启用对数据库操作的自动监控。
SQL> SHOW PARAMETER statistics_level
NAME TYPE VALUE
----------------------------------- ----------- -----
statistics_level string BASIC
SQL> ALTER SYSTEM SET STATISTICS_LEVEL='TYPICAL';
21.2.2 Enabling and Disabling Monitoring of Database Operations at the Statement Level
当 CONTROL_MANAGEMENT_PACK_ACCESS 初始化参数设置为 DIAGNOSTIC+TUNING 时,您可以使用提示来启用或禁用对特定 SQL 语句的监视。
当 SQL 语句或 PL/SQL 子程序在单次执行中消耗了至少 5 秒的 CPU 或 I/O 时间时,数据库会自动监控它们。 MONITOR 提示对于强制监视不符合时间标准的语句或子程序很有用。
有两个语句级提示可用于强制或阻止数据库监视 SQL 语句。 要强制执行 SQL 监控,请使用 MONITOR 提示:
SELECT /*+ MONITOR */ SYSDATE FROM DUAL;
此提示仅在 CONTROL_MANAGEMENT_PACK_ACCESS 参数设置为 DIAGNOSTIC+TUNING 时有效。 要防止被提示的 SQL 语句被监视,请使用 NO_MONITOR 反向提示。
21.3 Defining a Composite Database Operation
定义数据库操作涉及提供名称并指定其开始和结束时间。
使用 DBMS_SQL_MONITOR.BEGIN_OPERATION 函数启动数据库操作,并使用 DBMS_SQL_MONITOR.END_OPERATION 过程结束它。
要在不同的会话中开始操作,请指定 session_id 和 serial_num 的组合。 BEGIN_OPERATION 函数返回数据库操作执行 ID。 如果 dbop_exec_id 为空,则数据库生成一个唯一值。
存在用于数据库操作的单个名称空间,这意味着名称冲突是可能的。 Oracle 推荐以下命名约定:component_name.subcomponent_name.operation name。 对于数据库内部的操作,Oracle 建议使用 ORA 作为组件名称。 例如,实体化视图刷新可以命名为 ORA.MV.refresh。 E-Business Suite 工资单函数可以命名为 EBIZ.payroll。
在当前会话中创建数据库操作:
VARIABLE exec_id NUMBER;
BEGIN
:exec_id := DBMS_SQL_MONITOR.BEGIN_OPERATION ( dbop_name => 'ORA.sales.agg' );
END;
/
-- Execute the SQL statements or PL/SQL programs that you want to monitor.
BEGIN
DBMS_SQL_MONITOR.END_OPERATION ( dbop_name => 'ORA.sales.agg', dbop_eid => :exec_id );
END;
/
在其他会话中创建数据库操作:
-- SH 用户登录
-- SYSTEM 用户, T1
SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME = 'SH';
SID SERIAL#
---------- ----------
121 13397
VARIABLE eid NUMBER
BEGIN
:eid:=DBMS_SQL_MONITOR.BEGIN_OPERATION
('sh_count', null, null,
null, '121', '13397');
END;
/
PRINT eid
EID
----------
2
-- SH 用户执行操作
-- SYSTEM用户
BEGIN
DBMS_SQL_MONITOR.END_OPERATION
('sh_count',:eid);
END;
/
...
21.4 Generating and Accessing SQL Monitor Reports
默认情况下,AWR 自动捕获 XML 格式的 SQL 监控报告。
这些报告仅捕获自上次捕获周期以来未执行或排队并且已完成执行的 SQL 语句。 AWR 仅根据已用执行时间捕获最昂贵语句的报告。 SQL Monitor 保留策略由 AWR 策略控制。 您可以使用 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 过程更改保留策略。
Enterprise Manager Cloud Control (Cloud Control) 中的受监控 SQL 执行页面总结了受监控语句的活动。 您可以使用此页面向下钻取并获取有关特定语句的其他详细信息。 Monitored SQL Executions Details 页面使用来自多个视图的数据,包括:
- GV$SQL_MONITOR
- GV$SQL_PLAN_MONITOR
- GV$SQL_MONITOR_SESSTAT
- GV$SQL
- GV$SQL_PLAN
- GV$ACTIVE_SESSION_HISTORY
- GV$SESSION_LONGOPS
- DBA_HIST_REPORTS
- DBA_HIST_REPORTS_DETAILS
注意:从 Oracle Database 19c 开始,Oracle Database 包含未记录的 V$ 视图,使没有 SELECT_CATALOG_ROLE 的数据库用户能够查看在会话中执行的简单数据库操作(单个 SQL 和 PL/SQL 语句)的计划和统计信息。 没有 SELECT_CATALOG_ROLE 的用户无法查看其他用户的 SQL 执行统计信息和详细信息。
用户 sh 正在对每个客户的销售额执行以下长时间运行的并行查询:
SELECT c.cust_id, c.cust_last_name, c.cust_first_name,
s.prod_id, p.prod_name, s.time_id
FROM sales s, customers c, products p
WHERE s.cust_id = c.cust_id
AND s.prod_id = p.prod_id
ORDER BY c.cust_id, s.time_id;
您希望确保前面的查询不会消耗过多的资源。 当语句执行时,您想要确定有关数据库操作的基本统计信息,例如并行级别、数据库总时间和 I/O 请求数。
您使用 Cloud Control 来监视语句执行。
注意:要从命令行生成 SQL 监控报告,请运行 DBMS_SQLTUNE 包中的 REPORT_SQL_MONITOR 函数,如以下示例 SQL*Plus 脚本所示:
VARIABLE my_rept CLOB
BEGIN
:my_rept :=DBMS_SQLTUNE.REPORT_SQL_MONITOR();
END;
/
PRINT :my_rept
第一行就是需要监控的SQL语句,单击其ID列。
查询已执行 1.4 分钟。
上面的报告显示了与语句执行相关的执行计划和统计信息。 例如,Timeline列显示执行计划的每个步骤何时处于活动状态。 时间显示为相对于语句执行的开始和结束。 Executions 列显示操作执行了多少次。
在 Overview 部分中,单击 SQL 文本旁边的链接可显示完整的SQL语句。
在 Time & Wait Statistics 部分,在 Database Time 旁边,将光标移到条形图上最大的部分上。
Database Time 衡量数据库处理此 SQL 语句所花费的时间。 该值包括 CPU 和等待时间,例如 I/O 时间。 条形图分为几个颜色编码部分,以突出显示 CPU 资源、用户 I/O 资源和其他资源。 您可以将光标移到任何部分上以查看总计的百分比值。
在IO Statistics部分的 IO 请求列中,将光标移到 I/O Requests上以查看总数的百分比值。
上图中,IO Requests 消息显示了受监视 SQL 发出的读取请求总数。 该消息显示读取请求占总 I/O 请求的 80%。
21.5 Monitoring Database Operations: Scenarios
21.5.1 Reporting on a Simple Database Operation: Scenario
在这种情况下,查询预计将在几秒钟内完成,但仍在继续执行。
在此示例中,假设您以用户 sh 登录数据库,然后运行以下查询:
SELECT /*+ MONITOR */ s.prod_id, c.cust_last_name FROM sales s, customers c ORDER BY prod_id
查询未完成。 从 Oracle Database 19c 开始,sh 等低权限用户可以在其会话中为简单的数据库操作(单个 SQL 和 PL/SQL 语句)生成 SQL 监视器报告。 为了确定问题的根源,您使用 SQL Monitor 进行诊断,如下所示:
- 取消查询。
- 通过调用 DBMS_SQL_MONITOR.REPORT_SQL_MONITOR 获取文本报告:
SET LONG 1000000
VARIABLE my_rept CLOB;
BEGIN
:my_rept := DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
report_level => 'ALL',
TYPE => 'text');
END;
/
PRINT :my_rept
由于格式化,前面的输出难以阅读。 您决定创建一个图形化的活动 SQL Monitor 报告。
- 创建包含以下命令的 SQL 脚本,并在SQL Plus中运行:
SET FEEDBACK OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
SET TRIM ON
SET PAGES 0
SET LINESIZE 1000
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SPOOL /tmp/long_sql.htm
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
report_level => 'ALL',
TYPE => 'active')
FROM DUAL;
SPOOL OFF
性能问题的原因如第 2 行所示:笛卡尔连接。 查询的作者无意中遗漏了 WHERE 子句。 该查询在取消之前返回了 5000 万行,而不是像销售和客户的内部联接那样返回大约 100 万行。 对两个表中的连接数据进行排序消耗了大部分数据库时间(第 1 行)。
21.5.2 Reporting on Composite Database Operation: Scenario
此场景使用 DBMS_SQL_MONITOR 定义数据库操作并生成活动报告。
您的目标是将 sh 模式中的表的四个查询分组为一个操作,然后生成一个报告。
- 在 SQL Plus 中,以管理用户 SAM 的身份登录。 开始一个名为 SHOP 的操作(指定 forced_tracking 以确保 SQL Monitor 跟踪 SQL),运行四个查询,然后结束操作,如下所示:
VARIABLE exec_id NUMBER;
BEGIN
:exec_id := DBMS_SQL_MONITOR.BEGIN_OPERATION ( dbop_name => 'SHOP', forced_tracking => 'Y' );
END;
/
SELECT COUNT(*) FROM sh.sales;
SELECT COUNT(*) FROM sh.customers;
SELECT prod_id, cust_id
FROM sh.sales
WHERE prod_id < 26
ORDER BY prod_id;
SELECT cust_id, cust_first_name, cust_last_name, cust_city
FROM sh.customers
WHERE cust_id < 30000
ORDER BY cust_id;
BEGIN
DBMS_SQL_MONITOR.END_OPERATION ( dbop_name => 'SHOP', dbop_eid => :exec_id );
END;
/
- 要获取有关操作的元数据,包括其状态和元数据,请查询 V$SQL_MONITOR(包括示例输出):
COL STATUS FORMAT a10
COL DBOP_NAME FORMAT a10
COL CON_NAME FORMAT a5
SELECT STATUS, SQL_ID, DBOP_NAME, DBOP_EXEC_ID,
TO_CHAR(ELAPSED_TIME/1000000,'000.00') AS ELA_SEC
FROM V$SQL_MONITOR
WHERE DBOP_NAME = 'SHOP';
STATUS SQL_ID DBOP_NAME DBOP_EXEC_ID ELA_SEC
---------- ------------- ---------- ------------ -------
DONE SHOP 3 001.34
- 要获取有关 SQL Monitor 报告的元数据,请调用 DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(包括示例输出):
SET LONG 10000000
SET LONGCHUNKSIZE 10000000
SET PAGES 0
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
dbop_name => 'SHOP', type => 'TEXT', report_level => 'ALL') AS rpt
FROM DUAL;
SQL Monitoring Report
Global Information
------------------------------
Status : DONE
Instance ID : 1
Session : SAM (87:6406)
DBOP Name : SHOP
DBOP Execution ID : 3
First Refresh Time : 10/03/2017 07:33:32
Last Refresh Time : 10/03/2017 07:34:24
Duration : 52s
Module/Action : sqlplus@myhost (TNS V1-V3)/-
Service : MYSERVICE
Program : sqlplus@myhost (TNS V1-V3)
Global Stats
========================================================
| Elapsed | Cpu | IO | Buffer | Read | Read |
| Time(s) | Time(s) | Waits(s) | Gets | Reqs | Bytes |
========================================================
| 1.36 | 1.34 | 0.02 | 202 | 583 | 27MB |
========================================================
- 要生成活动的 HTML 报告,请将操作的名称传递给 DBMS_SQL_MONITOR.REPORT_SQL_MONITOR:
SET LONG 10000000
SET LONGCHUNKSIZE 10000000
SET PAGES 0
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
dbop_name => 'SHOP', type => 'TEXT', report_level => 'ALL') AS rpt
FROM DUAL;
SQL Monitoring Report
Global Information
------------------------------
Status : DONE
Instance ID : 1
Session : SAM (87:6406)
DBOP Name : SHOP
DBOP Execution ID : 3
First Refresh Time : 10/03/2017 07:33:32
Last Refresh Time : 10/03/2017 07:34:24
Duration : 52s
Module/Action : sqlplus@myhost (TNS V1-V3)/-
Service : MYSERVICE
Program : sqlplus@myhost (TNS V1-V3)
Global Stats
========================================================
| Elapsed | Cpu | IO | Buffer | Read | Read |
| Time(s) | Time(s) | Waits(s) | Gets | Reqs | Bytes |
========================================================
| 1.36 | 1.34 | 0.02 | 202 | 583 | 27MB |
========================================================
下图显示了活动报告:
以上是关于SQL调优指南笔记21:Monitoring Database Operations的主要内容,如果未能解决你的问题,请参考以下文章
SQL调优指南笔记1:Introduction to SQL Tuning
SQL调优指南笔记22:Gathering Diagnostic Data with SQL Test Case Builder