---
title: "分析 ASH 报告 - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: 分析 ASH 报告 生成 ASH 报告后, 查看其内容以确定瞬时性能问题的可能原因。 ASH 报告内容 ASH 报告中通过 ASH Report 部分记录关于 ASH 报告的统计数据，包括系统的版本、操作系统环境、信息采样时间段、分析时间段、ASH 和 WR 数据源、采样数量、事件数量和平均活跃会话数等这些信息，生成…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.5 LTS

# 分析 ASH 报告

更新时间：2026-04-15 17:16:59

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/300.analyze-ash-report.md)  

生成 ASH 报告后, 查看其内容以确定瞬时性能问题的可能原因。

## ASH 报告内容

ASH 报告中通过 ASH Report 部分记录关于 ASH 报告的统计数据，包括系统的版本、操作系统环境、信息采样时间段、分析时间段、ASH 和 WR 数据源、采样数量、事件数量和平均活跃会话数等这些信息，生成 Top Active Tenants、Top Node Load、Top Groups、Top Foreground DB Time、Top Background DB Time、Top Sessions、Top IO Bandwidth、Top Blocking Sessions、Top Latchs、Top DB Objects、Activity Over Time、Top Execution Phase、Top IO Events、Top SQL Statement Types、Top SQL with Top Events、Top SQL with Top Operator、Top PL/SQL Procedures、Complete List of SQL Text And Status 等 18 个模块的信息。

这些模块主要从资源开销和执行路径开销两个方面进行展示 ObServer 收集的性能数据，因此，在分析具体性能问题时，可以通过查看相关模块来确定问题的根源是资源瓶颈还是执行方式不够高效。

### ASH Report

这部分显示 ASH（Active Session History）报告中一些关于采样时间、分析时间和一般统计数据的信息。

- Cluster Name：集群的名称，表示数据库集群的名称。
 - Observer Version：OceanBase 数据库版本信息，包含版本号和详细的构建版本。
 - Operation System Info：操作系统信息，包括内核版本和架构。
 - User Input Begin Time：采样开始的时间，表示开始记录会话活动的时间点。
 - User Input End Time：采样结束的时间，表示停止记录会话活动的时间点。
 - Analysis Begin Time：分析开始的时间，表示对采样数据进行分析的起始时间点。
 - Analysis End Time：分析结束的时间，表示对采样数据进行分析的结束时间点。
 - Ash Data Source：ASH 数据源，若未使用 ASH，则不会有相应的列。
 - Wr Data Source：WR 数据源，若未使用 WR，则不会有相应的列。
 - Elapsed Time：所有采样时间的总秒数。
 - Ash Num of Sample：ASH 采样的数量，表示记录到的会话活动次数。
 - Wr Num of Sample：WR 采样的数量，表示在分析时间范围内生成的性能快照数量。
 - Average Active Sessions：平均活跃会话数，表示在采样期间的平均活跃会话数量。

通过这些数据可以了解采样期间的活动情况、会话和事件的数量，以及系统的活跃程度。

```shell
ASH Report

           Cluster Name: test425
       Observer Version: OceanBase 4.2.5.3 (203000012025022717-866087xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
  Operation System Info: Linux(3.10.0-327.ali2019.alios7.x86_64)_x86_64
  User Input Begin Time: 2024-09-22 10:26:47
    User Input End Time: 2025-06-22 20:27:07
Ash Analysis Begin Time: 2025-03-05 12:59:50
  Ash Analysis End Time: 2025-03-05 15:47:12
 Wr Analysis Begin Time: 2025-02-28 09:43:43
   Wr Analysis End Time: 2025-03-05 12:59:35
        Ash Data Source: oceanbase.GV$ACTIVE_SESSION_HISTORY
         Wr Data Source: oceanbase.DBA_WR_ACTIVE_SESSION_HISTORY
           Elapsed Time: 453793
      Ash Num of Sample: 11019
       Wr Num of Sample: 475940
Average Active Sessions: 1.07

```

### Top Active Tenants

这部分将资源开销分为前台用户请求和后台任务，可以看到租户内部整体的资源开销情况。

- Tenant Name：租户名，标识特定租户的信息。
 - Session Type：会话类型，可能值包括 BACKGROUND 和 FOREGROUND，分别表示后台进程和前台进程。
 - Total Samples：总记录数，表示在 ASH 报告分析时间段内的总样本数。
 - Wait Event Count：等待事件数，表示会话在等待事件上的样本数。
 - On CPU Samples：CPU 上的样本数，表示会话在 CPU 上执行的样本数。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Equivalent Client Load：ASH 报告分析时间段内的客户端与数据库的活跃连接数。

这些信息提供了关于租户活动的细节，揭示了数据库性能的不同方面以及租户对资源的使用情况。

在 Top Active Tenants 模块中，性能问题可能来源于数据库内部，也可能出现在数据库与业务程序的交互链路上。首先需要确认性能问题发生的指标 Equivalent Client Load 和 Avg Active Sessions。这两个指标用于评估数据库和链路对性能的影响。比值 (Avg Active Sessions/Equivalent Client Load) 越大，说明数据库内部开销对性能的影响越大；比值越小，说明网络链路或客户端对性能的影响更大。

例如报告显示，该比值为 88%，表明性能问题主要由数据库负载引起。在明确数据库负载存在问题后，应进一步分析数据库内部资源的开销。Top Active Tenants 模块中前台用户请求消耗了 69.65% 的数据库资源，而后台任务约占 30%。因此，性能瓶颈主要发生在用户请求的执行链路上。此外，前台任务的等待事件总共消耗了 1140 秒的数据库时间，而 CPU 执行消耗了 72860 秒。这表明该业务模型没有由于磁盘 I/O、网络带宽等资源限制而导致大量等待，主要开销集中在 CPU 执行上。由于业务在版本上运行正常，可以推断集群的 CPU 资源是足够的，性能变慢可能与 SQL 执行链路中某个环节的执行效率在升级后下降有关。

![Top Active Tenants](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-active-tenants.jpg)

### Top Node Load

这部分显示了 DB time 度量的顶级节点的性能指标。

- IP：服务器 IP 地址。
 - Port：服务器端口号。
 - Session Type：会话类型，可能值包括 BACKGROUND 和 FOREGROUND，分别表示后台进程和前台进程。
 - Total Samples：总记录数，表示在 ASH 报告分析时间段内的总样本数。
 - Wait Event Samples：等待事件数，表示会话在等待事件上的样本数。
 - On CPU Samples：CPU 上的样本数，表示会话在 CPU 上执行的样本数。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Equivalent Client Load：客户端与数据库的活跃连接数，比值 (Avg Active Sessions/Equivalent Client Load) 越大，说明数据库内部开销对性能的影响越大；比值越小，说明网络链路或客户端对性能的影响更大。

这些信息提供了数据库集群中各个节点的负载相关的性能指标。

![Top Node Load](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-node-load.jpg)

### Top Groups

这部分显示了资源消耗排名靠前的用户资源管理组（Resource Consumer Groups）。

- Node：节点地址。
 - Group Name：资源组的组名称。
 - Group Samples：当前资源组中被采样到的会话活动记录的数量。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Program：后台会话对应的进程名称。
 - % Program：该后台会话进程在资源组（如 CPU、线程）中的占比。
 - Module：程序中的功能模块名称。
 - % Module：该模块在程序活跃会话中的占比，用于定位程序内部的热点操作。
 - Action：模块中的具体操作。
 - % Action：该操作在模块活跃会话中的占比，进一步细化性能分析粒度。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - Slot Begin Time：记录会话活动时间段的起始时间，格式为 `YYYY-MM-DD HH:MM:SS(+ 偏移秒数)`，表示该统计周期的开始时刻。
 - Slot Count：当前时间段内的总采样次数。ASH 默认每秒采样一次活跃会话状态，Slot Count 值等于时间段的长度，单位为秒。
 - Action Key：标识触发活跃会话的操作类型，用于定位具体服务或组件的资源占用情况通常包含以下信息：

     - 来源节点：如 `xx.xx.xx.xx:2882`（IP 和端口）。
     - 租户与资源组：如 `tenant:1002/group:0`。
     - 服务类型：如 `T1002_LogService-LogRestoreService-RemoteLogWriter`（日志恢复服务）。
 - Action Samples：当前时间段内，该操作（Action Key）被采样到的活跃会话次数。数值越高，表示该操作占用的数据库资源越多。

这些信息提供了顶级资源消费组及其关键性能指标，包括它们遭遇的主要性能事件、事件发生的频繁度、活动占比以及并发会话的平均水平。

![Top Groups](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-groups.jpg)

### Top Foreground DB Time

这部分按事件类型列出了数据库前台活动时间的主要消耗者。

- Node：节点地址。
 - Event Name：消耗 DB Time 最多的事件，既包括等待事件，也包括在 CPU 上的事件。
 - Wait Class：等待事件所属类型。
 - Event Samples：每个事件被采样到的会话活动记录的数量。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。

这些信息提供了在指定分析周期内，前台会话所消耗 DB Time 排名前列的情况。

例如在 Top Foreground DB Time 数据中可以看到，业务任务运行期间确实存在由访问事务上下文引发的锁冲突等待，但该开销在整体中占比不到 1%，且未在等待事件中发现事务提交（tx committing wait）对应的等待事件。因此，可以排除在 Top Active Tenants 中关于性能问题的两点假设。

综上所述，可以确认性能下降并非由于资源瓶颈引起，因此很有可能是新版本的执行链路出现了性能回退。

![Top Foreground DB Time](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-foreground-db-time.jpg)

### Top Background DB Time

这部分显示了后台会话产生的 DB Time。

- Node：节点地址。
 - Program：后台会话对应的进程名称。
 - Module：程序中的功能模块名称。
 - Action：模块中的具体操作。
 - Event Name：消耗 DB Time 最多的事件，既包括等待事件，也包括在 CPU 上的事件。
 - Wait Class：等待事件所属类型。
 - Event Samples：每个事件被采样到的会话活动记录的数量。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。

这些信息提供了最占用资源的后台进程、它们经历的主要事件类型及其活动频率、对整体 DB Time 的贡献比例，以及并发活跃会话的平均水平。

![Top Background DB Time](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-background-db-time.jpg)

### Top Sessions

这部分显示了顶级会话（Top Sessions）的信息。

- Session ID：采样的会话 ID。
 - Program：后台会话对应的进程名称。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - Event Name：消耗 DB Time 最多的事件，既包括等待事件，也包括在 CPU 上的事件。
 - Wait Class：等待事件所属类型。
 - % Event：该事件在数据库总活动中的占比。高百分比可能表明该事件是系统性能的主要瓶颈。
 - SQL ID: SQL 查询的唯一标识符。
 - Plan Hash: 当前 SQL 执行计划的数值，相同的计划会有相同的哈希值。
 - % SQL ID: 与该事件关联的 SQL 语句在数据库总活动中的占比。高百分比表明该 SQL 是资源消耗的主要来源。
 - Sql Executions: SQL 语句在分析时间段内的执行次数。高频执行可能引发资源竞争或锁冲突。

这些信息提供了以 Session 为维度进行排序统计活跃的 Session。通过采样的会话 ID、活动会话百分比、事件、事件个数、事件百分比，当前用户和采样的活动状态之间的比较，方便找到潜藏的问题 Session。

![Top Sessions](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-sessions.jpg)

### Top IO Bandwidth

这部分显示了从 SQL 和后台任务角度列出 TOP I/O 的吞吐量。

- Node：节点地址。
 - Program Module Action/SQL ID：后台任务类型（如日志聚合、事务日志写入）/SQL 查询的唯一标识符，追踪具体 SQL 语句的资源消耗。
 - Plan Hash: 当前 SQL 执行计划的数值，相同的计划会有相同的哈希值。
 - Type：I/O 操作类型，区分读写负载来源。
 - IOPS：每秒 I/O 请求次数，反映存储设备的负载压力。高 IOPS 可能表明频繁小数据量操作。
 - IO Size(MB)：任务或 SQL 在采样期间的总读写数据量（MB）。后台任务通常涉及更大数据量（如日志批量写入）。
 - IO Bandwidth(MB/s)：每秒 I/O 吞吐量，衡量存储带宽的实际使用率。低带宽可能因数据分散或硬件限制导致。
 - Object ID：I/O 操作涉及的主要数据分片，无数据表示无数据分散或采样时间段内未采集到。
 - % Object ID：主导分片的 I/O 占比。

这些信息提供了 Node、SQL ID、IOPS 等参数内容，分析 SQL 和后台任务的 I/O 吞吐量，结合读写类型、数据量及分布特征，帮助定位性能瓶颈。

![Top IO Bandwidth](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-io-bandwidth.jpg)

### Top Blocking Sessions

这部分显示了数据库中因锁（enqueues）、闩锁（latches）和缓冲区争用（buffer busy）导致的阻塞会话问题。

- Blocking Session ID：阻塞其他会话的会话标识符，用于定位问题源头。
 - % Activity：阻塞会话引发的事件的活动百分比，高百分比表明该会话是主要争用源。
 - Avg Active Sessions：阻塞会话在采样周期内的平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - Holder User：持有锁或资源的用户。
 - Holder TX ID：持有资源的事务 ID。
 - Holder SQL ID：持有资源的 SQL 语句标识符，用于关联具体操作。
 - Event Caused：由阻塞会话引发的等待事件类型。
 - % Event：该事件在同类阻塞中的占比，帮助识别高频争用类型。
 - XIDs：关联的事务 ID 链，用于追踪事务间的依赖关系。
 - Top Waiting SQL ID：因阻塞受影响最严重的 SQL 语句标识符。
 - % SQL ID：该 SQL 在总阻塞等待中的占比，用于优先优化高影响查询。

这些信息提供了 `Blocking Session ID`、`Holder TX ID` 等字段精准定位阻塞源，结合 `% Activity` 与 `% Event` 的量化争用影响，利用 `Holder SQL ID` 和 `Top Waiting SQL ID` 关联 SQL 级根因，并借助 XIDs 实现事务链追踪，最终为数据库性能瓶颈提供从会话、事务到 SQL 的全链路诊断能力。

![Top Blocking Sessions](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-blocking-sessions.jpg)

### Top Latchs

这部分显示了数据库中竞争最激烈的 Latch。

- Latch Wait Event：Latch等待事件名称。
 - Event Samples：每个事件被采样到的会话活动记录的数量。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。

这些信息提供了导致最高等待的 Latch、它们的等待事件计数、活动占比及平均活跃会话数，直接指向了数据库中并发控制的关键瓶颈所在。这些信息对于诊断和解决 Latch 争用问题、减少等待时间、提升系统响应速度及整体性能表现极为关键。

![Top Latchs](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-latchs.jpg)

### Top DB Objects

这部分通过分析 Application/Cluster/User I/O/buffer busy 四类关键等待事件，量化数据库对象（如表、分区）的访问负载与关联 SQL，以定位高争用热点。

- Node Address：节点地址（格式 IP:Port），用于标识分布式环境中的物理节点位置。
 - Tenant ID：租户 ID，租户的唯一标识符。
 - Object ID：数据库表的 tablet_id，用于元数据关联。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Execution Count：该对象的 SQL 执行总次数，高频访问可能引发资源争用。
 - Event：对应的 Top 等待事件（最多打印 5 个事件）。
 - % Event：对应的 Top 等待事件的百分比（最多打印 5 个事件）。
 - SQL ID：等待事件中负载较高的 SQL ID。
 - % SQL ID/Module：等待事件中负载较高的 SQL ID 或 Module 的百分比，用于优先优化高影响查询。
 - Object Name (Type/Partition Name)：正在访问的数据库对象的名称、类型和分区信息。

这些信息通过量化数据库对象（如表、分区）的访问负载、关联 SQL 及等待事件，定位导致高资源争用的热点对象，为优化表结构、索引设计及 SQL 性能提供直接依据。

![Top DB Objects](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-db-objects.jpg)

### Activity Over Time

这部分通过时间间隔的信息展示了分析时段内的数据库活动动态。

- Slot Begin Time：当前时间片的起始时间，每个时间片直到下一个时间片开始时结束
 - Slot Count：当前时间段内的总采样次数。ASH 默认每秒采样一次活跃会话状态，Slot Count 值等于时间段的长度，单位为秒。
 - Event Name：消耗 DB Time 最多的事件，既包括等待事件，也包括在 CPU 上的事件。
 - Wait Class：等待事件所属类型。
 - Event Samples：每个事件被采样到的会话活动记录的数量。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Avg Active Sessions：平均活跃会话数，表示在采样期间该阶段平均同时有多少数据库会话处于活跃状态（不论是在 CPU 上还是在等待事件）。

这些信息提供以时间序列的方式，详细描绘了分析周期内数据库活动的动态变化，包括关键事件的分布、活动强度、资源争用情况随时间的演变。这对于识别性能问题的趋势、高峰期管理、以及制定基于时间维度的性能优化策略提供了宝贵的依据。

![Activity Over Time](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/activityovertime.jpg)

### Top Execution Phase

这部分显示了执行阶段中占比较高的活动，按会话类型分类，涵盖了 SQL 执行、PL/SQL 处理、存储读写等多个方面。

- Session Type：会话类型，可能值包括 BACKGROUND 和 FOREGROUND，分别表示后台进程和前台进程。
 - Phase of Execution：执行阶段的名称，例如 IN_SQL_EXECUTION（SQL 执行）、IN_COMMITTING（提交过程）、IN_PLSQL_EXECUTION（PL/SQL 执行）等。
 - Active Samples：每个执行阶段发生的次数或记录数。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - SQL ID：等待事件中负载较高的 SQL ID。
 - % SQL ID/Module：等待事件中负载较高的 SQL ID 或 Module 的百分比，用于优先优化高影响查询。

由于基础路径的性能问题通常会影响数据库中所有请求，Top Execution Phase 能直观地汇总出基础路径上性能的影响。

例如 Top Execution Phase 模块的内容中，我们可以获取以下信息：

1. IN_SQL_EXECUTION 占据了 69.65% 的开销，这部分表示 SQL 获取计划后进入执行的总开销。在 OceanBase 数据库定义的几个执行阶段中，IN_SQL_EXECUTION 包含 IN_STORAGE_WRITE、IN_STORAGE_READ 和 IN_RPC_ENCODE。从这个指标可以看出，SQL 的主要开销在执行（EXECUTION）阶段，而不是在解析（PARSER）或计划缓存（PLAN CACHE）阶段。
 2. IN_STORAGE_WRITE 是 IN_SQL_EXECUTION 阶段中的一个子阶段，这部分开销占据了 68.19%，说明性能的主要开销发生在向 memtable 写入数据中。
 3. IN_DEADLOCK_ROW_REGISTER 是 IN_STORAGE_WRITE 的一个子阶段，这部分开销占据了 65.10%，说明该场景大部分的开销发生在这个阶段。

上述这三个指标在导入型任务的基准测试（benchmark）中通常不会超过 30%，这是因为在导入型任务中，整个系统的 memtable 转储、clog 同步和落盘的后台任务会占据一部分 CPU 资源，同时 SQL 解析和表达式计算等阶段也会占用一部分 CPU 资源。而在该任务中，IN_STORAGE_WRITE 阶段的开销接近 70%，远大于基准测试的参考值，说明该业务场景的性能问题主要出现在这个阶段。 另外，IN_DEADLOCK_ROW_REGISTER 阶段主要负责将写入数据中持有的行锁信息注册到死锁管理器（Deadlock Manager）中，便于后台任务检测活跃事务是否存在死锁。通常这步操作只是更新和维护一个 hashmap value，是非常快的操作，在基准测试中这个阶段的开销通常不超过 3%，显然在该系统中，这部分开销远大于基准测试的经验值。

根据上述分析，我们基本可以确定性能问题出在 IN_DEADLOCK_ROW_REGISTER 阶段。这是 memtable 写入的一个通用路径，通常通用路径上出现的性能问题可能只影响某个具体的 SQL，也可能会影响所有访问该路径的 SQL 性能。那么在该问题中，如何确定受影响的 SQL 范围？

Top Execution Phase 章节除了列出 OceanBase 数据库预定义的各个阶段的占比开销外，还展示了每个阶段开销最大的 SQL 及其具体占比。从报告数据可以得知，IN_DEADLOCK_ROW_REGISTER 阶段开销最大的 SQL 是 D5B2150EA75EB405C25592A65708DD21。根据报告展示的文本信息，这条 SQL 是一条 INSERT 语句：

```shell
INSERT INTO TRADE_BASE_000_LOAD_42
SELECT TRADE_NO, TRADE_NO
FROM TRADE_BASE_000_LOAD PARTITION(p42)
WHERE ROWNUM <= 50000000;

```

这条 SQL 在 IN_DEADLOCK_ROW_REGISTER 阶段的开销为 0.67%，相比整个阶段的总开销差异很大，说明 IN_DEADLOCK_ROW_REGISTER 阶段的总开销并不集中在某条 SQL 上，而是分散在很多 SQL 上。

![Top Execution Phase](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-execution-phase.jpg)

### Top IO Events

这部分统计了 SQL 和后台任务的 I/O 等待事件，识别磁盘 I/O 瓶颈源，包括高负载 SQL、后台任务类型及具体设备性能指标。

- Node：节点地址。
 - Program Module Action/SQL ID：后台任务类型（如日志聚合、事务日志写入）/SQL 查询的唯一标识符，追踪具体 SQL 语句的资源消耗。
 - Plan Hash: 当前 SQL 执行计划的数值，相同的计划会有相同的哈希值。
 - IO Event Samples：任务执行过程中 I/O 等待事件的样本总数。
 - %IO Event Samples：所有采样点中 I/O 等待事件样本总数的比例，反映 I/O 请求频率。
 - Top Event：主要 I/O 等待事件的名称。
 - IO Type：I/O 等待事件的类型（读/写/异步），用于区分操作模式。
 - % EVENT：I/O 等待事件的活动百分比。
 - Enqueue Time(S)：排队等待 I/O 请求的总时间，单位为秒，反映设备拥塞程度。
 - Device Time(S)：在设备上执行 I/O 请求的总时间，单位为秒，衡量磁盘性能。
 - Callback Time(S)：执行 I/O 请求回调所花费的总时间，单位为秒。

这些信息通过量化 SQL 和后台任务的 I/O 等待事件，结合设备排队时间（Enqueue Time）和执行时间（Device Time），定位高负载 SQL（通过 SQL ID 和 Plan Hash）及磁盘性能瓶颈，为优化 I/O 密集型操作提供依据。

![Top IO Events](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-io-events.jpg)

### Top SQL Statement Types

这部分显示了在 ASH 报告分析时段内，汇总各种语句类型的执行情况，帮助分析业务性能问题发生在哪种语句类型上。

- SQL Statement Type：列出了最常执行的 SQL 语句类型，如 SELECT、UPDATE、INSERT 或 DELETE 等。
 - Total Samples：给定 SQL 语句类型在整个 ASH 报告分析期间的执行总数。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Sampled Executions：该类型 SQL 的采样执行次数（多次执行可能因参数不同被独立统计）。
 - Node：节点地址。
 - % Node：该节点上此类 SQL 的活动占比，用于评估节点负载均衡性。
 - % On CPU：该类型 SQL 在 CPU 上运行的时间占比，高值说明计算密集型（如复杂聚合）。
 - % Event：该事件在数据库总活动中的占比。高百分比可能表明该事件是系统性能的主要瓶颈。

这些信息提供了分类统计 SQL 语句的执行情况，揭示了不同操作类型（如查询、更新）对数据库资源消耗和系统活动的影响。这些数据对于识别高负荷 SQL 类型、优化查询策略、平衡资源分配、以及针对性地进行性能调优具有重要价值。

![Top SQL Statement Types](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/top-sql-statement-types.jpg)

### Top SQL with Top Events

这部分显示了与特定顶级事件关联最紧密的 SQL 语句。

- SQL ID：等待事件中负载较高的 SQL ID。
 - Plan Hash：当前 SQL 执行计划的数值，相同的计划会有相同的哈希值。
 - Active Samples：每个执行阶段发生的次数或记录数。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Sampled Executions：该类型 SQL 的采样执行次数（多次执行可能因参数不同被独立统计）。
 - Top Event：主要 I/O 等待事件的名称。
 - % Event：该事件在数据库总活动中的占比。高百分比可能表明该事件是系统性能的主要瓶颈。
 - Top Operator/ExecPhase：在当前 SQL 执行计划中耗时最长的操作。
 - % Operator/ExecPhase：该操作/阶段占 SQL 总耗时的百分比，用于定位执行计划瓶颈。
 - SQL Text: SQL 查询的文本。

这些信息提供了 SQL 语句执行中导致最高活动占比的具体事件，直接指向了性能瓶颈的核心。通过识别出这些“瓶颈”事件和相关 SQL，数据库管理员可以针对性地优化 SQL 语句、调整执行计划或改善系统配置，以减少等待时间、提高资源利用率。

Top SQL with Top Events 模块为我们展示了耗时超过整体1%的具体 SQL 信息，而这个章节的内容为空，这个信息也说明性能问题并没有发生在某些具体的 SQL 上，而是整体 SQL 执行都变得更慢。基于报告信息，我们基本明确了性能问题的阶段与死锁检测有关(IN_DEADLOCK_ROW_REGISTER)，并且这是一个通用的性能问题。

```shell
Top SQL with Top Events:
  - This Section lists the SQL statements that accounted for the highest percentages event.
  - Plan Hash: Numeric representation of the current SQL plan
  - Active Samples: num of samples for top current SQL
  - % Activity: activity percentage for given SQL ID
  - Sampled Executions: represents the number of times the current SQL execution has been sampled
  - Top Event: top event name for current SQL plan
  - % Event: activity percentage for current SQL plan
  - Top Operator/ExecPhase: top operator name or execution phase for current event
  - % Operator/ExecPhase: activity percentage for given operator
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+
|                                  SQL ID|           Plan Hash|      Active Samples|    % Activity|  Sampled Executions|                                                       Top Event|       % Event|                                                                                                          Top Operator/ExecPhase|    % Operator/ExecPhase|                                                        SQL Text|
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+
+----------------------------------------+--------------------+--------------------+--------------+--------------------+----------------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------+------------------------+----------------------------------------------------------------+

```

### Top SQL with Top Operator

这部分显示了在执行计划中使用了特定操作符且占据了样本会话活动较高比例的 SQL 语句。

- SQL ID：等待事件中负载较高的 SQL ID。
 - Plan Hash：当前 SQL 执行计划的哈希数值，用于识别 SQL 执行计划的唯一性。
 - Active Samples：每个执行阶段发生的次数或记录数。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - Sampled Executions：该类型 SQL 的采样执行次数（多次执行可能因参数不同被独立统计）。
 - Top Operator：在当前 SQL 执行计划中耗时最长的操作。
 - % Operator：该阶段占 SQL 总耗时的百分比，用于定位执行计划瓶颈。
 - Top Event：主要 I/O 等待事件的名称。
 - % Event：该事件在数据库总活动中的占比。高百分比可能表明该事件是系统性能的主要瓶颈。
 - SQL Text: SQL 查询的文本。

这些信息提供了与最高活动比例相关的 SQL 操作符，为数据库管理员和开发者提供了优化 SQL 执行路径的精确指引。

```shell
Top SQL with Top Operator:
  - This Section lists the SQL statements that accounted for the highest percentages of sampled session activity with sql operator
  - Plan Hash: Numeric representation of the current SQL plan
  - Active Samples: num of samples for top current SQL
  - % Activity: activity percentage for given SQL ID
  - Sampled Executions: represents the number of times the current SQL execution has been sampled
  - Top Operator: top operator name for current SQL plan
  - % Operator: activity percentage for given operator
  - Top Event: top event name for current operator
  - % Event: activity percentage for given event
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
|                                  SQL ID|           Plan Hash|Active Samples|    % Activity|  Sampled Executions|                                                                                                                    Top Operator|    % Operator|                                                       Top Event|       % Event|                                                        SQL Text|
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+
+----------------------------------------+--------------------+--------------+--------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------+--------------+----------------------------------------------------------------+

```

### Top PL/SQL Procedures

这部分显示了 Top PL/SQL 存储过程的信息。

- PLSQL Entry Subprogram: 显示应用程序的顶级 PL/SQL 入口子程序，它可以是过程（procedure）、函数（function）、触发器（trigger）或包的初始化（package initialization）。
 - % Activity：事件的活动百分比，表示给定租户在指定时间段内的活动（CPU + 等待）百分比。
 - PLSQL Current Subprogram: 显示当前正在执行的 PL/SQL 子程序，在采样点时正在执行的 PL/SQL 子程序。如果值为 `SQL`，则表示在特定 PL/SQL 入口子程序中执行 SQL 所占时间的百分比；如果值为 `--`，表示没有具体的子程序执行。
 - % Current：当前子程序（PL/SQL Current Subprogram）在入口子程序中的时间占比。如果当前子程序是 SQL，则反映执行 SQL 的时间占比。

这些信息提供了有关 Top PL/SQL 存储过程的执行情况，包括顶级入口子程序和当前执行子程序的相关信息以及活动百分比。

```shell
Top PL/SQL Procedures:
  - "PL/SQL Entry Subprogram" represents the application's top-level entry-point(procedure, function, trigger, package initialization) into PL/SQL.
  - "PL/SQL Current Subprogram" is the pl/sql subprogram being executed at the point of sampling. If the value is "SQL", it represents the percentage of time spent executing SQL for the particular plsql entry subprogram.
  - "PL/SQL Entry Subprogram" represents the application's top-level subprogram name
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
|                                      PLSQL Entry Subprogram|          % Activity|                                    PLSQL Current Subprogram|           % Current|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+
|               oceanbase.dbms_workload_repository.ASH_REPORT|               0.00%|          oceanbase.dbms_workload_repository.ASH_REPORT_TEXT|               0.00%|
+------------------------------------------------------------+--------------------+------------------------------------------------------------+--------------------+

```

### Complete List of SQL Text（V4.2.5 BP7 之前版本）

这部分显示 SQL 文本（SQL Text）的列表，该列表包含了 SQL 查询的 SQL ID 和 SQL 查询的文本信息。

- SQL ID: SQL 查询的唯一标识符。
 - SQL Text: SQL 查询的文本。

这些信息提供了关于 SQL 查询列表，可以用于识别、分析和优化查询性能。

![Complete List of SQL Text](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/complete-list-of-sql-text.jpg)

### Complete List of SQL Text And Status（V4.2.5 BP7 及之后版本）

这部分显示了 SQL 语句及其执行状态的列表，该列表包含了用于性能分析的关键指标。需要注意的是，一些执行效率最高的 SQL 语句可能因其资源消耗较低而不在此列表显示范围内。

- First Load Time: 执行计划首次被加载到缓存的时间，即计划生成的时间。
 - Plan Cache Hit Rate: 执行计划缓存命中率，即从缓存中成功获取计划而非重新生成的次数百分比。
 - AVG RPC: 每次执行该 SQL 语句时，发起远程过程调用（RPC）的平均次数。
 - AVG Partition: 每次执行过程中，平均访问的分区数量。
 - Route Miss Rate: 发生分区路由错误的请求比例，即请求被错误地发送到不包含目标数据节点的概率。
 - AVG Disk Reads: 每次执行过程中，从磁盘读取数据的平均字节数。
 - Muti Query Rate: 多语句查询（包含多条 SQL 的请求）所占的百分比。
 - Muti Query Batch Rate: 以批处理模式执行的请求所占的百分比。
 - AVG Error: 每个请求平均发生的错误次数。
 - Full Table Scan Rate: 执行计划中包含全表扫描的操作所占的百分比。
 - AVG Retry: 每次执行过程中，因各种原因（如超时、冲突）而进行重试的平均次数。
 - Executions: 该 SQL 语句在统计时间段内的总执行次数。
 - AVG Elapsed Time: 每次执行该 SQL 语句所花费的平均执行时间。

![Complete List of SQL Text And Status](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.5/700.reference/1000.performance-tuning-guide/400.performance-diagnosis/500.ash-report-diagnosis/ash-img/CompleteListofSQLTextAndStatus.png)

这些信息提供了一个关于 SQL 查询执行效率、资源消耗及稳定性的综合视图，可用于快速识别性能瓶颈、优化查询语句以及调整数据库配置。

## 相关等待事件

根据 [常见的等待事件](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001499698) 查询各等待事件表示的含义，方便您在分析报告时，快速的定位问题，

## 相关文档

- [ASH 简介](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001500500)。
 - [生成 ASH 报告](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001500502)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
