AWRRPT 结果解释

简介: 转自http://hotjava.javaeye.com/blog/193906 1.1.1. SQL ordered by Elapsed Time:    记录了执行总和时间的TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。

转自http://hotjava.javaeye.com/blog/193906

1.1.1. SQL ordered by Elapsed Time

   记录了执行总和时间TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)

SQL ordered by Elapsed Time

  • Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
  • % Total DB Time is the Elapsed Time of the SQL statement divided into the Total Database Time multiplied by 100

Elapsed Time (s)

CPU Time (s)

Executions

Elap per Exec (s)

% Total DB Time

SQL Id

SQL Module

SQL Text

152,148

150,929

205,218

0.74

24.22

an4rtjrb8tbq5

 

update SYS.AUD$ set XID = :1 w...

109,969

109,032

2,003

54.90

17.50

0twzs3px5d7wj

 

DECLARE job BINARY_INTEGER := ...

38,797

38,460

8,843

4.39

6.17

6gvch1xu9ca3g

 

DECLARE job BINARY_INTEGER := ...

29,312

13,414

10

2931.15

4.67

26ndjmd3nnmwx

 

BEGIN CS_SLT_DSCLJG(:1, :2, :3...

 

   Elapsed Time(S): SQL语句执行用总时长,此排序就是按照这个字段进行的。注意该时间不是单个SQL跑的时间,而是监控范围内SQL执行次数的总和时间。单位时间为秒。Elapsed Time = CPU Time + Wait Time

  CPU Time(s): SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒。

  Executions: SQL语句在监控范围内的执行次数总计。

  Elap per Exec(s): 执行一次SQL的平均时间。单位时间为秒。

  % Total DB Time: SQLElapsed Time时间占数据库总时间的百分比。

  SQL ID: SQL语句的ID编号,点击之后就能导航到下边的SQL详细列表中,点击IE的返回可以回到当前SQL ID的地方。

  SQL Module: 显示该SQL是用什么方式连接到数据库执行的,如果是用SQL*Plus或者PL/SQL链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的sql该位置为空。

  SQL Text: 简单的sql提示,详细的需要点击SQL ID

 

1.1.2. SQL ordered by CPU Time:

  记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)

1.1.3. SQL ordered by Gets:

  记录了执行占总buffer gets(逻辑IO)TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets).

 

1.1.4. SQL ordered by Reads:

记录了执行占总磁盘物理读(物理IO)TOP SQL(请注意是监控范围内该SQL的执行占磁盘物理读总和,而不是单次SQL执行所占的磁盘物理读)

 

1.1.5. SQL ordered by Executions:

  记录了按照SQL执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。

 

1.1.6. SQL ordered by Parse Calls:

  记录了SQL软解析次数TOP SQL

  说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oraclesql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:

  1、语法检查(syntax check)

  检查此sql的拼写是否语法。

  2、语义检查(semantic check)

  诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。

  3、对sql语句进行解析(prase)

  利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)

  4、执行sql,返回结果(execute and return)

  其中,软、硬解析就发生在第三个过程里。

  Oracle利用内部的hash算法来取得该sqlhash值,然后在library cache里查找是否存在该hash值;

  假设存在,则将此sqlcache中的进行比较;

  假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。

  诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。

  创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。

/****************************************************/

大家都在说在Sql中使用了Bind Var(绑定变量)会提高不少性能,那他到底是如何提高性能的呢?

使用了Bind Var能提高性能主要是因为这样做可以尽量避免不必要的硬分析(Hard Parse)而节约了时间,同时节约了大量的CPU资源。

当一个Client提交一条SqlOracle后,Oracle首先会对其进行解析(Parse),然后将解析结果提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如果只需要软解析的话会少部分步骤)。

但是,当Oracle接到Client提交的Sql后会首先在共享池(Shared Pool)里面去查找是否有之前已经解析好的与刚接到的这一个Sql完全相同的Sql(注意这里说的是完全相同,既要求语句上的字符级别的完全相同,又要求涉及的对象也必须完全相同)。当发现有相同的以后解析器就不再对新的Sql在此解析而直接用之前解析好的结果了。这里就节约了解析时间以及解析时候消耗的CPU资源。尤其是在OLTP中运行着的大量的短小Sql,效果就会比较明显了。因为一条两条Sql的时间可能不会有多少感觉,但是当量大了以后就会有比较明显的感觉了。

上面说到了硬解析(Hard Parse),那这个Hard Parse到底是个啥呢?

Parse主要分为三种:

1Hard Parse (硬解析)

2Soft Parse (软解析)

3Soft Soft Parse(好像有些资料中并没有将这个算在其中)

Hard Parse就是上面提到的对提交的Sql完全重新从头进行解析(当在Shared Pool中找不到时候将会进行此操作),总共有一下5个执行步骤:

1:语法分析

2:权限与对象检查

3:在共享池中检查是否有完全相同的之前完全解析好的如果存在,直接跳过45,运行Sql(此时算soft parse

4:选择执行计划

5:产生执行计划

Soft Parse就如果是在Shared Pool中找到了与之完全相同的Sql解析好的结果后会跳过Hard Parse中的后面的两个步骤。

Soft Soft Parse实际上是当设置了session_cursor_cache这个参数之后,Cursor被直接Cache在当前SessionPGA中的,在解析的时候只需要对其语法分析、权限对象分析之后就可以转到PGA中查找了,如果发现完全相同的Cursor,就可以直接去取结果了,也就就是实现了Soft Soft Parse

不过在计算解析次数的时候是只计算Hard ParseSoft Parse的(其实Soft Soft Parse好像也并不能算是做了Parse  ):

Soft Parse百分比计算:Round(100*(1-:hprs/:prse),2) [hprs:硬解析次数;prse:解析次数]

Parse比率计算: Round(100*(1-prse/exec) ,2) [exec:执行次数]

   软解析过多的意思就是说session_cursor_cache的数值有可能小了,一些频繁调用的SQLCache中找不到相同的Cursor

 

1.1.7. SQL ordered by Sharable Memory:

  记录了SQL占用library cache的大小TOP SQL

Sharable Mem (b)占用library cache的大小。单位是byte

 

1.1.8. SQL ordered by Version Count:

  记录了SQL打开子游标TOP SQL

 在硬解析的过程中,进程会一直持有library cach latch,直到硬解析结束。硬解析结束以后,会为该SQL产生两个游标,一个是父游标,另一个是子游标。父游标里主要包含两种信息:SQL文本以及优化目标(optimizer goal)。父游标在第一次打开时被锁定,直到其他所有的session都关闭该游标后才被解锁。当父游标被锁定的时候是不能被交换出library cache的,只有在解锁以后才能被交换出library cache,这时该父游标对应的所有子游标也被交换出library cache。子游标包括游标所有的信息,比如具体的执行计划、绑定变量等。子游标随时可以被交换出library cache,当子游标被交换出library cache时,oracle可以利用父游标的信息重新构建出一个子游标来,这个过程叫reload。可以使用下面的方式来确定reload的比率:
SELECT 100*sum(reloads)/sum(pins) Reload_Ratio FROM v$librarycache;
一个父游标可以对应多个子游标。子游标具体的个数可以从v$sqlareaversion_count字段体现出来。而每个具体的子游标则全都在v$sql里体现。当具体的绑定变量的值与上次的绑定变量的值有较大差异(比如上次执行的绑定变量的值的长度是6位,而这次执行的绑定变量的值的长度是200位)时或者当SQL语句完全相同,但是所引用的对象属于不同的schema时,都会创建一个新的子游标

 

1.1.9. SQL ordered by Cluster Wait Time:

  记录了集群的等待时间TOP SQL

 

1.2. 其他管理员相关问题解析:

1.2.1. Load Profile

 

Per Second

Per Transaction

Redo size:

65,768.90

17,459.39

Logical reads:

31,757.56

8,430.54

Block changes:

271.06

71.96

Physical reads:

188.86

50.13

Physical writes:

11.90

3.16

User calls:

197.15

52.34

Parses:

241.40

64.08

Hard parses:

1.90

0.50

Sorts:

12.46

3.31

Logons:

0.15

0.04

Executes:

313.88

83.32

Transactions:

3.77

 

 

% Blocks changed per Read:

0.85

Recursive Call %:

95.92

Rollback per transaction %:

30.79

相关文章
|
数据库
分布式集群时钟同步问题及解决方案
分布式集群时钟同步问题及解决方案
916 1
|
1月前
|
存储 缓存 Java
重构一个类,JVM竟省下2.9G内存?
通过重构核心类,将 `HashMap<Long, HashSet<String>>` 优化为 `Long2ObjectOpenHashMap<int[]>`,结合数据分布特征与紧凑存储,JVM 堆内存从 3.13GB 降至 211MB,降幅达 94%,验证了高效数据结构在海量场景下的巨大价值。
260 24
重构一个类,JVM竟省下2.9G内存?
|
8天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
515 12
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
787 3
|
JSON 数据挖掘 API
天猫店铺商品数据接口集成指南与实战技巧
**天猫商品API概览** - **接口**: Tmall.item_search_shop, 获取店铺商品详情。 - **功能**: 开发者可获取商品标题、价格、销量等。 - **流程**: 注册天猫开放平台账户→获App Key/Secret→获取Access Token→构建URL调用API→解析JSON响应。 - **参数**: 包含店铺ID、页码、数量等。 - **返回**: JSON格式的商品列表。 - **应用**: 商品管理、电商应用开发、数据分析。此API助力商家高效管理、提升用户体验。
|
缓存 应用服务中间件 nginx
[nginx]proxy_cache缓存系统
[nginx]proxy_cache缓存系统
449 4
|
存储 关系型数据库 数据库
在 Postgres 中使用更改列类型
【8月更文挑战第11天】
737 0
在 Postgres 中使用更改列类型
|
SQL 关系型数据库 MySQL
“震撼揭秘!Flink CDC如何轻松实现SQL Server到MySQL的实时数据同步?一招在手,数据无忧!”
【8月更文挑战第7天】随着大数据技术的发展,实时数据同步变得至关重要。Apache Flink作为高性能流处理框架,在实时数据处理领域扮演着核心角色。Flink CDC(Change Data Capture)组件的加入,使得数据同步更为高效。本文介绍如何使用Flink CDC实现从SQL Server到MySQL的实时数据同步,并提供示例代码。首先确保SQL Server启用了CDC功能,接着在Flink环境中引入相关连接器。通过定义源表与目标表,并执行简单的`INSERT INTO SELECT`语句,即可完成数据同步。
1452 1
|
敏捷开发 程序员 定位技术
敏捷开发
敏捷开发
264 0
|
负载均衡 监控 算法
负载均衡一般用什么模式
负载均衡可以采用多种模式,具体的选择取决于应用程序的需求、架构设计和性能目标。以下是一些常见的负载均衡模式: 1. **轮询(Round Robin):** 请求依次分发到每个后端服务器,循环进行。这是一种简单的负载均衡算法,适用于后端服务器性能相对均衡的情况。 2. **加权轮询(Weighted Round Robin):** 类似于轮询,但可以为每个后端服务器分配不同的权重,以便更灵活地分配负载。性能更高的服务器可以分配更高的权重。 3. **最小连接数(Least Connections):** 请求分发到当前连接数最少的后端服务器。这可以确保负载更平均地分布到服务器上,适用于处
1726 0