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

我们都知道,当 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, countFROM (
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, countFROM (
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的包括历史采样的所有信息:

selectlas.sample_time,las.application_name,las.unique_query_id,las.event,scr.query ,scr.query_plan
fromdbe_perf.local_active_session las,dbe_perf.statement_complex_runtime scr
wherelas.thread_id = scr.pidand scr.pid <> pg_backend_pid();

关于作者

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

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

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

相关文章

基于微博评论的自然语言处理情感分析

目录 一、项目概述 二、需要解决的问题 三、数据预处理 1、词汇表构建&#xff08;vocab_creat.py&#xff09; 2、数据集加载&#xff08;load_dataset.py&#xff09; 四、模型构建&#xff08;TextRNN.py&#xff09; 1、嵌入层&#xff08;Embedding Layer&#xff…

【学术会议论文投稿】ECMAScript标准:塑造现代Web开发的基石

https://www.ais.cn/attendees/index/MVNV3U 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 ECMAScript的历史背景与版本更新 ECMAScript的核心特性 1. 变量和数据类型 2. 变量声明 3. 运算符 4. 控制流语句 5. 函数 6. 错误处理 7. 模板…

github学生认证(Github Copilot)

今天想配置一下Github Copilot&#xff0c;认证学生可以免费使用一年&#xff0c;认证过程中因为各种原因折腾了好久&#xff0c;记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法&#xff0c;不包括配置copilot的全部流程~ 1、准备工作…

构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本

本文为系列测试文章&#xff0c;拟基于自签名证书认证的etcd容器来构建coredns域名解析系统。 一、前置文章 构建后端为etcd的CoreDNS的容器集群&#xff08;一&#xff09;、生成自签名证书 构建后端为etcd的CoreDNS的容器集群&#xff08;二&#xff09;、下载最新的etcd容…

Github 2024-10-19 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1TypeScript项目1Vue项目1CUE项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, …

敏捷Scrum项目管理方法,如何做好敏捷项目管理❓

在当今快速变化的商业环境中&#xff0c;项目管理方法的选择对于项目的成功至关重要。敏捷Scrum作为一种轻量级、迭代式的项目管理方法&#xff0c;因其灵活性和高效性而备受推崇。作为项目经理&#xff0c;掌握敏捷Scrum项目管理方法不仅有助于提升项目交付效率&#xff0c;还…

2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(上)(分值10+)

目录 前言第7章 面向对象技术 &#xff08;上&#xff09;7.1 面向对象基础(3-4分&#xff09;7.1.1 面向对象的基本概念7.1.2 面向对象分析&#xff08;熟记&#xff09;7.1.3 面向对象设计7.1.4 面向对象程序设计7.1.5 面向对象测试 7.2 UML(3~4分)7.2.1 事务7.2.2 关系7.2.2…

Qt 支持打包成安卓

1. 打开维护Qt&#xff0c;双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件&#xff0c;点击下一步&#xff0c; 勾选Android, 点击下一步 3.更新安装中 4.进度100%&#xff0c;完成安装&#xff0c;重启。 5.打开 Qt Creator&#xff0c;编辑-》Preferences... 6.进…

Windows下配置Nginx和PHP

之前在Windows开发php项目用的是phpstudy&#xff0c;好用的很。但是phpstudy好久没有更新了&#xff0c;感觉PHP像没有人再用了一样。但是PHP拿来开发小系统&#xff0c;还是很高效的&#xff0c;今天记录如何在Windows环境下配置Nginx和PHP。 1. 配置nginx Nginx软件下载解压…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误&#xff1a; InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是&#xff0c;当传入的参数不符合期望时&#xff0c;就会抛出这个异常&#xff1a; InvalidArgumentException: invali…

【C#】使用vue3的axios发起get和post请求.net framework部署的API显示跨域

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言跨域提示解决方案现状跨域疑问跨域概念相关文章 前言 最近在对接…

React高级Hook

useReducer useReducer 是 React 提供的一个 Hook&#xff0c;用于在函数组件中使用 reducer 函数来管理组件的 state。它类似于 Redux 中的 reducer&#xff0c;但仅用于组件内部的状态管理。useReducer 可以使复杂的状态逻辑更加清晰和可维护。 基本用法 useReducer 接收…

Linux——网络层协议

前言 网络层&#xff1a;在复杂的网络环境中确定一个合适的路径 目录 前言 一IP协议 1预备知识 2基本概念 3格式 4网段划分 4.1理解IP 4.2IP组成 4.3划分方式 4.4为什么要网段划分 5特殊的IP地址 6IP地址的限制 7私有IP和公网IP 8NAT技术 9理解公网 10路由 …

[MySQL课后作业]人事管理系统的SQL实践

1.假设某商业集团中有若干公司&#xff0c;人事数据库中有3个基本表 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CANME,CITY…

【优选算法篇】踏入算法的深邃乐章:滑动窗口的极致探秘

文章目录 C 滑动窗口详解&#xff1a;进阶题解与思维分析前言第二章&#xff1a;进阶挑战2.1 水果成篮解法一&#xff1a;滑动窗口解法二&#xff1a;滑动窗口 数组模拟哈希表复杂度分析&#xff1a;图解分析&#xff1a;示例&#xff1a;滑动窗口执行过程图解&#xff1a; 详…

C for Graphic:径向模糊

最近要做一系列特效需求&#xff0c;顺便记录一下。 径向模糊&#xff08;也叫辐射模糊&#xff09;&#xff1a;一种由内向外发散的模糊的效果 原理&#xff1a;获取中心点&#xff08;centeruv&#xff09;到当前像素&#xff08;pixeluv&#xff09;的朝向法向…

RFC2616 超文本传输协议 HTTP/1.1

一、URL-俗称“网址” HTTP 使用 URL(Uniform Resource Locator&#xff0c;统一资源定位符)来定位资源&#xff0c;它是 URI(Uniform Resource Identifier&#xff0c;统一资源标识符)的子集&#xff0c;URL 在 URI 的基础上增加了定位能力 URI 除了包含 URL&#xff0c;还包…

车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

5G NR:UE初始接入信令流程浅介

UE初始接入信令流程 流程说明 用户设备&#xff08;UE&#xff09;向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU。IN…

PFC和LLC的本质和为什么要用PFC和LLC电路原因

我们可以用电感和电容的特性,以及电压和电流之间的不同步原理来解释PFC(功率因数校正)和LLC(谐振变换器)。 电感和电容的基本概念 电感(Inductor): 电感是一种储存电能的组件。它的电流变化比较慢,电流在电感中延迟,而电压变化得比较快。可以把电感想象成一个“滞后…