上一期生成了ASH报告后,就需要解读报告关键信息。ASH的使用可以快速定位瞬时性能问题。生产环境的场景时间紧、任务重,但是必须要结合具体业务分析,同时借助其他工具做报告做趋势分析。

一、ASH 技术原理

1. 核心机制
  • 采样原理​:ASH 每秒采样一次活动会话(状态为 ACTIVE,非空闲等待),由后台进程 ​MMNL​(Memory Monitor Light)执行
  • 数据存储​:
    • 内存​:采样数据存储在 SGA 的循环缓冲区(V$ACTIVE_SESSION_HISTORY),缓冲区大小由隐含参数 _ash_size 控制(默认约 1MB~30MB)
    • 持久化​:MMNL 定期将内存数据写入 AWR 表 WRH$_ACTIVE_SESSION_HISTORY(视图为 DBA_HIST_ACTIVE_SESS_HISTORY),持久化比例由 _ash_disk_filter_ratio 控制(默认 1/10)
采样偏差​:ASH 偏向捕获长时间等待事件(例如 100ms 事件被采样的概率是 10ms 事件的 10 倍)
2. 核心术语 

​术语​

​解释​

​分析意义​

​DB Time​

所有活动会话消耗的总时间(CPU + 等待时间)

衡量系统负载强度,高 DB Time 表明性能瓶颈

​Top Events​

排名前几的等待事件(如db file sequential read,

enq: TX - row lock contention)

定位系统级瓶颈(事件占比 >30% 需优先处理)

​Load Profile​

活动会话数、逻辑读/秒、物理读/秒等负载指标

判断资源压力(如物理读 >500/秒需优化 I/O)

​SQL ID​

消耗资源最多的 SQL 唯一标识

关联高负载 SQL 与等待事件

​Blocking Session​

阻塞其他会话的源头会话 ID

诊断锁争用问题(如行锁阻塞链)

 3. 关键隐含参数​

​参数名​

​默认值​

​作用​

_ash_sampling_interval

1000ms

采样间隔(毫秒)

_ash_enable

TRUE

启用/禁用 ASH 采样

_ash_sample_all

FALSE

是否采样空闲等待会话(通常仅ACTIVE会话)

_ash_disk_write_enable

TRUE

控制是否持久化到磁盘

4. ​顶级等待事件(Top User Events)​​

识别系统级瓶颈的核心区域

关键阈值​:
  • 单事件占比 > 30%​​:需要立即处理
  • 累计等待时间 > 50%​​:系统级瓶颈
5. ​高负载SQL(Top SQL with Top Events)​
资源消耗最大的SQL语句分析

​字段

诊断意义

优化阈值

SQL ID

SQL唯一标识

-

% Activity

SQL影响范围

>5%需优先优化

Executions

执行频率

>100/分钟需关注

Buffer Gets

逻辑读消耗

单次>10,000需优化

Scan Type

扫描方式

FTS(全表扫描)需建索引

关联等待事件

SQL瓶颈类型

关联Top Events分析

典型优化场景​:
  • 高频全表扫描 → 创建缺失索引
  • 高逻辑读SQL → SQL重写/绑定变量
  • 长时锁等待SQL → 业务逻辑优化
6. ​活动会话时间分布(Activity Over Time)​
10等分时间片的负载趋势分析
诊断要点​:
  • 时段突增​:关联具体SQL/事件(如时段3的db file sequential read)
  • 持续高峰​:系统容量不足
  • 周期性波动​:定时任务影响
7. ​阻塞会话分析(Blocking Sessions)​
锁争用问题诊断的核心区域
关键字段​:
  • BLOCKING_SESSION:阻塞源会话ID
  • WAIT_TIME:等待时间(>1秒需关注)
  • EVENT:等待事件类型
  • SQL_ID:阻塞源SQL

二、ASH报告诊断四步法

分析流程

定位核心瓶颈​:

  • 查看 Top Events,筛选占比 >30% 的等待事件(如行锁、I/O 等待)
  • 检查 Load Profile 中的活动会话数:若持续超过 CPU 核数 × 1.5,表明资源争用

关联资源消耗​:

  • 在 Top SQL with Top Events 中,找到高 % Activity(>5%)的 SQL,分析其执行计划与资源消耗
  • 示例 SQL(查找高逻辑读 SQL):
    --注意参数
    SELECT sql_id, SUM(buffer_gets) total_gets
    FROM dba_hist_active_sess_history
    WHERE sample_time BETWEEN :start AND :end
    GROUP BY sql_id ORDER BY total_gets DESC;

追溯阻塞链​:

  • 通过 Blocking Sessions 定位锁源头会话,结合 DBA_HIST_ACTIVE_SESS_HISTORY 分析锁类型(如 enq: TX - row lock contention)

时段负载分析​:

  • 使用 Activity Over Time 图表定位突增时段(如 10:05-10:08),关联该时段内的 SQL 与事件

 三、关键性能问题速查表

​现象​

​可能原因​

​验证方法​

​log file sync > 30%​

redo写入延迟

检查redo日志文件性能

​enq: TX - row lock contention​

行锁争用

分析阻塞会话链

​db file sequential read​

索引扫描I/O慢

检查磁盘IOPS/延迟

​buffer busy waits​

热块争用

检查对象访问模式

​CPU used when call started​

SQL效率低下

分析Top SQL逻辑读

四、案例解析

案例 1:Oracle 11g 行锁阻塞(enq: TX - row lock contention)​
  • 问题现象​:ASH 报告中 enq: TX - row lock contention 占比 87.62%
分析过程​:
  • 在 Top Events 中确认行锁为顶级事件。
  • 通过关联的 SQL_ID 找到UPDATE 卡事务的 SQL:
    --更新业务侧,等待很久
    UPDATE HIS.FEI_ACCOUNT SET SHYUEDU = SHYUEDU - 1000 
    WHERE HUANGZHE_ID = 9028;
  • 溯源 BLOCKING_SESSION,发现未提交的事务持有行锁
  • 解决方案​:
    • 优化事务提交逻辑,避免长事务。
    • 添加索引减少行锁竞争范围

 

案例 2:Oracle 19c RAC 全局 I/O 瓶颈
  • 问题现象​:gc buffer busy 和 db file sequential read 等待事件在多个实例同时出现。
  • 分析过程​:
  1. a.RAC ASH 报告显示跨实例的高 gc buffer busy。
  2. 关联 SQL 发现全表扫描频繁,导致全局缓存争用。
  3. 检查 Buffer Activity 部分,Consistent Gets 异常高
  • 解决方案​:
    • 为高频查询字段添加索引,减少全表扫描。
    • 调整 db_cache_size 和 inmemory_size,优化缓冲区命中率
案例 3:短时 CPU 高负载(11g 单机)​
  • 问题现象​:用户反馈系统在 14:00-14:05 卡顿,但 AWR 未捕获异常。
  • 分析过程​:
  1. 生成精确时段的 ASH 报告(14:00-14:05)。
  2. 发现 CPU used when call started 占比 95%,关联 SQL 为低效聚合查询。
  3. 该 SQL 执行计划使用全表扫描而非索引
  • 解决方案​:
    • 优化 SQL,添加复合索引。
    • 调整 cursor_sharing 减少硬解析

五、ASH 的局限和最佳实践​

1. ​数据覆盖风险​:

  • 内存缓冲区仅保留约 1 小时数据,高并发时可能被覆盖,需及时捕获

2. ​RAC 环境要点​:

  • 使用 ashrpti.sql 生成全局报告,分析跨实例等待事件(如 gc buffer busy)
ASH报告分析最佳实践

采样时间选择​:

  • 问题发生期精确分析:5-15分钟
  • 趋势分析:30-60分钟

对比分析​:

-- 比如工作日 vs 周末,注意时间参数
SELECT event, COUNT(*) 
FROM dba_hist_active_sess_history
WHERE sample_time BETWEEN <高负载期间> AND <低负载期间>
GROUP BY event;

关联工具使用​:

  • 瞬时问题:ASH + SQL Monitor
  • 历史分析:ASH + AWR
  • 实时监控:ASH + OEM

保存策略优化​:

-- 延长ASH保留时间(单位:分钟)
EXEC DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(retention => 4320    -- 3天保留期(默认=4320分钟)
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85328.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85328.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85328.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评

“本地化思维模块化体验”&#xff1a;一款轻量数据中心监控系统的真实测评 在数据中心运维逐步精细化的今天&#xff0c;一款真正贴合本地用户习惯、设计有温度的系统并不多见。近期体验了一款功能全面、逻辑清晰的监控平台&#xff0c;给人留下了深刻印象。并不是广。今天就从…

词编码模型有哪些

词编码模型有哪些 词编码模型在高维向量空间的关系解析与实例说明 如Word2Vec、BERT、Qwen等 一、高维向量空间的基础概念 词编码模型(如Word2Vec、BERT、Qwen等)的核心是将自然语言符号映射为稠密的高维向量,使语义相近的词汇在向量空间中位置接近。以Qwen模型为例,其…

elementui el-select 获取value和label 以及 对象的方法

获取 el-select 的 value 和 label 值 在 Element UI 的 el-select 组件中&#xff0c;可以通过以下方法获取选项的 value 和 label 值。 1、绑定 v-model 获取 value el-select 通常通过 v-model 绑定 value 值&#xff0c;直接访问绑定的变量即可获取当前选中的 value。…

树莓派与嵌入式系统实验报告

一、Linux 系统编译工具链实践&#xff1a;mininim 源码编译 虚拟机 Ubuntu 编译流程 环境配置问题 编译时遇到虚拟机无法联网的情况&#xff0c;通过连接个人热点解决&#xff08;校园网限制导致无法访问外部资源&#xff09;。 执行 ./bootstrap 时报错 gnulib-tool: command…

IDEA部署redis测试

新建springboot&#xff0c;项目改为&#xff1a;testredis E:\ideaproject\testredis\src\main\java\org\example\testredis\TestredisApplication.java 代码为&#xff1a; package org.example.testredis;import org.springframework.boot.SpringApplication; import org.…

旅游服务礼仪实训室:从历史演进到未来创新的实践探索

一、旅游服务礼仪实训室的历史演进&#xff1a;从礼制规范到职业化培养 旅游服务礼仪实训室的建设并非一蹴而就&#xff0c;其发展历程与人类对礼仪认知的深化及职业教育体系的完善密切相关。 1. 古代礼仪教育的萌芽 礼仪作为社会行为规范&#xff0c;最早可追溯至中国夏商周…

Could not find a declaration file for module ‘..XX‘.

1. 添加 Vue 声明文件 如果您还没有为 .vue 文件创建类型声明&#xff0c;可以通过创建一个新的类型声明文件来解决该问题。 步骤&#xff1a; 在您的项目根目录下创建一个名为 shims-vue.d.ts 的文件&#xff08;您可以选择其他名称&#xff0c;但建议使用常见名称以便于识…

OpenCV CUDA模块设备层-----反正切(arctangent)函数atan()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对输入的 uchar1 像素值&#xff08;范围 [0, 255]&#xff09;&#xff0c;先归一化到 [0.0, 1.0] 浮点区间&#xff0c;然后计算其反正切值 at…

java中常见的排序算法设计介绍

排序算法 复杂度原地排序冒泡排序算法逻辑时间复杂度&#xff1a;最好O(n)&#xff0c;最坏和平均O(n^2)冒泡排序:稳定性算法 选择排序算法逻辑时间复杂度&#xff1a;最好&#xff0c;最坏和平均都是O(n^2)选择排序:不稳定性算法 插入排序算法逻辑时间复杂度&#xff1a;最好O…

深度学习系列81:MCP快速上手

MCP 是一种开放协议&#xff0c;通过标准化的服务器实现&#xff0c;使 AI 模型能够安全地与本地和远程资源进行交互。MCP 可帮助你在 LLM 之上构建智能代理和复杂的工作流。MCP 采用客户端-服务器架构&#xff0c;主机应用程序可以连接到多个服务器。 这里用个demo展示一下如何…

【Python机器学习(一)】NumPy/Pandas手搓决策树+使用Graphviz可视化(以西瓜书数据集为例)

下题来源于笔者学校的《模式识别与机器学习》课程的作业题,本文将通过使用NumPy处理数学运算,Pandas处理数据集,Graphviz实现决策树可视化等Python库来实现决策树算法及其格式化。 导入用到的Python库: import numpy as np import pandas as pd from graphviz import Digr…

react-activation 组件级缓存解决方案

文章目录 一、KeepAlive 组件二、AliveScope 容器三、useAliveController Hook四、生命周期五、完整示例 react-activation 主要解决 React 项目中的「页面缓存」需求(是第三方库&#xff0c;非React 官方)&#xff0c;类似于 Vue 中的 <KeepAlive>&#xff1a; 功能说明…

CentOS 7内核升级方案

关于升级 CentOS 7 系统内核至 4.19 版本的可执行升级方案,可根据实际情况进行调整和完善,希望能对大家有所帮助: 一、升级背景与目的 随着业务的发展和系统稳定性的要求,当前 CentOS 7 系统所使用的内核版本 3.10.0-1160.el7.x86_64 已经无法满足部分新功能需求以及面临…

树莓派实验实践记录与技术分析

一、内核驱动开发&#xff1a;hello 模块实现 驱动程序代码 #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_INFO "hello kernel\n"); return 0; } module_init(hello_init); static void …

【秦九绍算法】小红的 gcd

题目 牛客网&#xff1a;小红的 gcd 题目分析 我们知道&#xff0c;求gcd就用欧几里得算法&#xff08;辗转相除法&#xff09;&#xff1a;gcd(a,b)gcd(b,a mod b)。但是这题的a非常大&#xff0c;最大是一个1e6位数&#xff0c;无法使用任何数据类型存储。如果使用高精度…

AWS服务监控之EC2内存监控

首先在IAM里找到角色&#xff0c;创建角色&#xff0c;选择EC2 然后在被监控的机器上安装cloudwatch-agent 官方链接在本地服务器上安装 CloudWatch 代理 - Amazon CloudWatch wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-a…

鸿蒙 ArkWeb 和 H5混编开发

ArkWeb Web 相关标准技术(HTML/CSS/JS)&#xff0c;是业内支持性最广泛的技术&#xff0c;可以在最广泛的平台下实现“一次编写到处运行”&#xff1b;大部分对性能无需极致要求的应用页面&#xff0c;都可以使用 Web 技术来实现。 鸿蒙 ArkWeb Kit&#xff08;方舟 Web&…

设计模式-迪米特法则(Law of Demeter, LoD)

迪米特法则&#xff08;Law of Demeter, LoD&#xff09; 别名&#xff1a;最少知识原则&#xff08;Least Knowledge Principle&#xff09; 核心思想&#xff1a;一个对象应尽可能少地与其他对象发生交互&#xff0c;只与直接的朋友&#xff08;成员变量、方法参数、方法返回…

python获取AB直线间任意一点经纬度

获取AB直线间任意一点经纬度 1、目标 已知A点经纬度,距离;B点经纬度,距离,如果C点在AB之间,且知道C点距离,求C点的经纬度信息。 目标:在AB这条直线上,根据给定的距离(从A点开始沿直线到某点的距离)来求该点的经纬度。 2、方法 首先计算AB的总长度(大圆距离),…

Android实战——系统字体库加载流程

Android 系统字体库指的是在Android设备上用于显示文本的字体集合。随着Android系统的更新,其对字体的支持也日益增强,允许开发者和用户更灵活地定制界面文字显示。 一、字体库介绍 1、字体库文件 字体库文件是指存储字体数据的文件,这些文件包含了创建文本字符所需的所有…