循序渐进丨在 MogDB 数据库中实现 Oracle ASH能力

news2024/10/19 9:36:42

我们都知道,当 Oracle 数据库出现性能故障后,一般会在线上实时诊断数据库性能问题,特别是资源突然打高的场景,这个时候用到ASH的数据,就能很大程度上准确定位问题所在。

Oracle ASH

图片

在 Oracle 数据库中,实时捕获相关性能数据是通过ASH工具来实现的。

  • ASH是v$session为基础,1s采样一次,记录活跃会话等待的事件。采样工作由后台进程MMNL来完成。

  • dba_hist_active_sess_history是视图v$active_session_history的历史数据,默认每十秒收集一次信息储存在磁盘中。

  • MMON负责执行与AWR相关的任务。包括收集数据库统计信息,收集AWR快照,启动各种自动维护作业JOB,生成超过阀值告警信息。

  • MMNL负责执行与ASH相关的任务。

MogDB ASP

ASP (ACTIVE SESSION PROFILE) 是 MogDB 中提供的对活跃会话样本收集的功能,类似 Oracle 中ASH。ASP可以让用户查询活跃会话样本的基本信息。对于数据库运行期间的实时监控以及性能问题诊断有重要作用。

MogDB 继承了社区开源版本 openGauss 的ASH能力(下面称ASP)在此基础上进行企业版增强,称为"SQL运行状态观测",主要是通过在采样数据中增加SQL执行算子的采样来完成的。

图片

图 1

从采样中统计出活跃Session的统计指标,这些统计指标从客户端信息、执行开始、结束时间、SQL文本、等待事件、当前数据库对象等维度反映活跃Session的基本信息、状态和持有的资源。

基于概率统计的活跃Session信息,可以帮助用户诊断系统中哪些Session消耗了更多的CPU、内存资源,哪些数据库对象是热对象,哪些SQL消耗了更多的关键事件资源等,从而定位出有问题的Session、SQL、数据库设计。

Session采样数据分为两级,如图1所示:

第一级为实时信息,存储在内存中,展示最近几分钟的活跃Session信息,具有最高的精度,视图DEB_PERF.local_active_session显示内存记录的实时活跃会话信息;

第二级为持久化历史信息,存储在磁盘文件中,展示过去很长一段时间的历史活跃Session信息,从内存数据中抽样而来,适合长时间跨度的统计分析,系统表GS_ASP(或ASP log文件),存放持久化的信息。

图片

图 2

如图2所示,各session工作线程将各自的状态信息存储在共享内存t_thrd.shemem_ptr_cxt的BackendStatusArray数组中。后台采样线程ASH_WORKER每隔一个采样周期将t_thrd.shemem_ptr_cxt.BackendStatusArray内容采集写入到g_instance.stat_cxt.active_sess_hist_arrary中。当采样填满了active_sess_hist_arrary时,ASH_WORKER会将内存中的采样数据按比例刷新到GS_ASP表或者log文件中以供历史查询。而内存active_sess_hist_arrary中的实时信息可以通过视图DEB_PERF.local_active_session查询。

MogDB企业版增强

MogDB 企业版增强的ASH能力,称为"SQL运行状态观测",主要是通过在采样数据中增加SQL执行算子的采样来完成的。

MogDB 在上述视图中增加了plan_node_id字段来记录每次采样时,SQL正在执行的算子情况,将该算子与其它性能视图中记录的SQL执行计划来关联,即可知道对于出现性能问题的SQL具体是慢在了执行计划的哪个步骤上。

以下参数,会对企业版ASH功能产生影响:

  • resource_track_level参数指定为operator,则会开启算子采样能力,默认值是query,只会记录SQL级别采样。

ASP数据收集流程

图片

MogDB 启动后会检查enable_asp是否开启,如果开启,就会启动一个后台采样线程ASH_WORKER。该采样线程每隔一个采样周期将t_thrd.shemem_ptr_cxt.BackendStatusArray内容采集写入到g_instance.stat_cxt.active_sess_hist_arrary中。采样周期由GUC参数asp_sample_interval控制,默认采样周期为1秒。当采样填满了active_sess_hist_arrary(由guc参数asp_sample_num控制,默认为100000个采样)时,会将内存中的采样数据刷新到GS_ASP表或者ASP log文件中以供历史查询。

MogDB ASP参数

有以下几个主要参数,会对ASH功能产生影响:

  • enable_asp设置为on或者off,表示是否开启ASH功能,默认为开启;

  • asp_sample_interval指定每次采样的间隔,默认为1s采样一次,如果想减轻采样压力,可以将该参数设置为更长间隔,最长允许设置为10s;

  • asp_sample_num指定在内存表LOCAL_ACTIVE_SESSION中保留的样本总数,超过该数,将会触发将内存中的样本刷盘记录到GS_ASP系统表中的行为,默认为10万条。当发生刷盘行为后,LOCAL_ACTIVE_SESSION中的所有记录会被清空,重新开始采样;

  • asp_flush_rate指定哪些内存中的样本数据会被刷盘记录到GS_ASP表中,判断时会计算LOCAL_ACTIVE_SESSION中记录的sampleid字段值,其中 sampleid%asp_flush_rate == 0的记录会被标志为need_flush_sample=true,这些记录都会被持久化保存(在内核函数Asp::SubAspWorker中定义)。可以简单地理解为,该参数默认值为10,也就是1/10的样本会被持久化保存;

  • asp_retention_days指定在GS_ASP中保留的数据的时限,默认为2天,最多7天。

ASP常用SQL

查看session之间的阻塞关系:

select sessionid, block_sessionid from pg_thread_wait_status;

采样blocking session信息:

select sessionid, block_sessionid from DBE_PERF.local_active_session;

Final blocking session展示:

select sessionid, block_sessionid, final_block_sessionid from DBE_PERF.local_active_session;

最耗资源的wait event:

SELECT s.type, s.event, t.count
FROM dbe_perf.wait_events s, (
SELECT event, COUNT (*)
FROM dbe_perf.local_active_session
WHERE sample_time > now() - 5 / (24 * 60)
GROUP BY event)t WHERE s.event = t.event ORDER BY count DESC;

查看最近五分钟较耗资源的session把资源都花费在哪些event上:

SELECT sessionid, start_time, event, count
   FROM (
SELECT sessionid, start_time, event, COUNT(*)
   FROM dbe_perf.local_active_session
WHERE sample_time > now() - 5 / (24 * 60)
   GROUP BY sessionid, start_time, event) as t ORDER BY SUM(t.count) OVER (PARTITION BY t. sessionid, start_time)DESC, t.event;

最近五分钟比较占资源的SQL把资源都消耗在哪些event上:

SELECT query_id, event, count
   FROM (
SELECT query_id, event, COUNT(*)
   FROM dbe_perf.local_active_session
WHERE sample_time > now() - 5 / (24 * 60)
   GROUP BY query_id, event) t ORDER BY SUM (t.count) OVER (PARTITION BY t.query_id ) DESC, t.event DESC;

正在执行的SQL的包括历史采样的所有信息:

select
	las.sample_time,
	las.application_name,
	las.unique_query_id,
	las.event,
	scr.query ,
	scr.query_plan
from
	dbe_perf.local_active_session las,
	dbe_perf.statement_complex_runtime scr
where
	las.thread_id = scr.pid
	and scr.pid <> pg_backend_pid();

关于作者

许玉晨,云和恩墨 MogDB 技术支持工程师,有超过10年的金融、保险、政府、地税、运营商等业务关键型系统的运维经验,曾担任公司异常恢复东区接口人,负责紧急异常恢复工作,目前负责 MogDB 数据库的技术推广工作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

E-R网络

一、ER网络的基本性质 ER网络的生成方式 定义&#xff1a;一个随机图是由N个节点构成并且每对节点之间的连接概率为p G(N,L)模型&#xff1a; 一个随机图由N个节点构成&#xff0c;并且有L条连边随机放置在L对节点之间&#xff08;不出现重边与自环&#xff09; G(N,p)模型…

利用移动式三维扫描技术创建考古文物的彩色纹理网格【上海沪敖3D】

文章来源于蔡司工业质量解决方案&#xff0c;作者蔡司工业质量 在考古环境中&#xff0c;三维扫描技术应用广泛&#xff0c;如存档、保存、复制和分享&#xff08;包括实体和虚拟形式&#xff09;。 文中&#xff0c;通过真实的扫描案例&#xff0c;您将了解到三维光学解决方案…

微信小程序绘制轨迹

1、map | uni-app官网 根据官网描述&#xff1a;通过从数据库获取POI数据&#xff0c;并通过 uni-id-common 内的路线规划API&#xff0c;计算路线、距离、时间。 2、 <map style"width:100%;height:96%;" id"myMap" :scale"scale" :longi…

打包使用pythn编写的maya插件,使用pyeal打包

1.安装python,注意版本一定要和maya上面的python解释器版本一致 2.安装pyeal使用pycharm或者maya自带的python解释器mayapy.exe 3.如果有别的库&#xff0c;下载安装到你需要的文件夹中&#xff1a; 使用mayapy: "D:\AnZhuangBao\maya2022\2022\maya2022AZ\Maya2022\bin\m…

【华为HCIP实战课程十四】OSPF网络中LSA过滤,网络工程师

一、3类LSA过滤以及汇总 我们查看SW3的路由到达R4的lo0下一跳是R1的接口IP 10.1.15.1 我们在SW3上查看3类汇总LSA: SW3的3类汇总LSA可以看到ABR R1和R5到达R4的lo0的度量值分别为48和96,因此SW3到达R4的lo0的地址为48+1=49 和 96+1=97, 因此会显示49的cost,SW3的下一跳为R1的…

word怎么清除格式,Word一键清除所有格式教程

你是否曾在编辑Word文档时遇到过复制内容时格式混乱的情况?别担心&#xff0c;这只需要清除一下格式就可以了&#xff0c;很多朋友还不知道word怎么清除格式&#xff0c;下面小编就来给大家讲一讲word一键清除所有格式的方法教程&#xff0c;操作非常简单&#xff0c;有需要的…

使用短效IP池的优势是什么?

短效IP池作为代理IP服务中一种独特的资源管理方式&#xff0c;其应用已经在数据采集、市场分析和网络安全等多个领域中展示出强大的功能。尽管“短效”听起来似乎意味着某种限制&#xff0c;然而在某些特定的应用场景下&#xff0c;短效IP池却提供了无可比拟的优势。本文将详细…

流量PID控制(开度前馈量计算+辅助PID)

和流体流速(瞬时流量)相关的计算请参考下面文章链接: 1、PLC通过伯努利方程近似计算水箱流量 PLC通过伯努利方程近似计算水箱流量(FC)-CSDN博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及…

R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结系统信息介绍 K-邻…

AI创新驱动教育:科技革命下的教育转型

日前&#xff0c;2024教育装备创新大会在杭州市余杭区举行&#xff0c;会上集中展示了AI技术如何赋能教学并深入探讨了其影响。AI技术正在以前所未有的力度&#xff0c;引领教育步入智能新时代&#xff0c;成为教育改革创新的催化剂。 在国家政策的积极推动下&#xff0c;AI技…

tomcat catalina log 出现乱码(SpringMvc)

如下图所示&#xff1a; 解决方法&#xff1a; 找到tomcat的conf文件夹&#xff0c;打开logging.properties&#xff0c;把最后一个UTF-8改成GBK就可以啦 改正后&#xff1a;

基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

2024系统架构师---论软件维护方法及其应用

论软件维护方法及其应用 软件维护是指在软件交付使用后&#xff0c;直至软件被淘汰的整个时间范围内&#xff0c;为了改正错误或满足新的需求而修改软件的活动。在软件系统运行过程中&#xff0c;软件需要维护的原因是多种多样的。根据维护的原因不同可以将软件维护分为改正性…

C语言_指针_进阶

引言&#xff1a;在前面的c语言_指针初阶上&#xff0c;我们了解了简单的指针类型以及使用&#xff0c;下面我们将进入更深层次的指针学习&#xff0c;对指针的理解会有一个极大的提升。从此以后&#xff0c;指针将不再是难点&#xff0c;而是学习底层语言的一把利器。 本章重点…

MySQL中查询语句的执行流程

文章目录 前言流程图概述最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么&#xff0c;让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程&#xff0c;主要可以分为…

青少年编程能力等级测评CPA C++(二级)试卷(2)

青少年编程能力等级测评CPA C&#xff08;二级&#xff09;试卷&#xff08;2&#xff09; 一、单项选择题&#xff08;共20题&#xff0c;每题3.5分&#xff0c;共70分&#xff09; CP2_2_1&#xff0e;下列C程序段中&#xff0c;对二维数组arr的定义不正确是&#xff08; &…

(新手入门篇)2024年10 月 Java JDK 1.8版本WIN 10 系统安装教程!!!!!!!

前言 IDEA的安装是Java课程的入门&#xff0c;对于刚入门的小白来说&#xff0c;安装jdk是必不可少的一个环节&#xff0c;当然&#xff0c;很多的老同学进入新公司装环境也是不可或缺的&#xff0c;本人也是经常会碰到类似的场景&#xff0c;为避免后续忘记&#xff0c;选择记…

SHA256算法学习

SHA-256&#xff08;Secure Hash Algorithm 256-bit&#xff09;是一种常用的哈希算法&#xff0c;是SHA-2家族中的一种。它可以将任意长度的数据转换为一个固定长度的256位&#xff08;32字节&#xff09;哈希值。 算法特点 固定长度输出&#xff1a;无论输入数据有多长&…

flutter assets配置加载本地图片报错

首选列出我在照着网上说的设置assets怎么搞都报错&#xff0c;错误如下&#xff0c;搞的我想骂娘。 flutter: uses-material-design: true assets: - assets/images 后来找到了下面这个教程&#xff0c;才终于解决&#xff0c;就是要在后面加一个"/" 。 flutter这个…

【JVM】—深入理解ZGC回收器—背景概念回收流程

深入理解ZGC回收器—背景概念&回收流程 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 文章目录 深入…