当前位置: 首页 > news >正文

如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践

这篇博客涉及两个知识点,一个是动态采样,另一个是 DAS 执行。

用户的问题和相关结论

我们看看用户在OceanBase 社区论坛发帖中提出的疑问及其所得出的结论。

问题:收集统计信息之前,为什么会出现计划不稳定的情况?

原帖详见:索引和统计信息问题咨询 - OceanBase - 社区问答- OceanBase社区-分布式数据库

结论:若尚未收集过统计信息,为了创建更优的执行计划,优化器会对表数据进行动态采样。动态采样是在计划生成阶段对数据库对象进行的采样,通过此方式估算行数,并将这些估算值用于代价计算模型中。由于动态采样过程中每次所选的样本数据块具有一定的随机性质,即便表中的数据保持不变,动态采样的结果也可能有所不同,因此可能导致生成不同的执行计划。

用户反馈的问题

下面是这个用户给的计划不稳定的例子,感兴趣的同学可以继续往下看:

第一个问题

用户问的第一个问题就是:为什么收集统计信息前,计划不稳定?

用户的环境信息:三 zone 三副本,各个副本的 leader 打散在三个分区上。

表定义长这样:

CREATE TABLE `test` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`did` varchar(64) DEFAULT NULL COMMENT 'did',`dxm_uuid` varchar(64) DEFAULT NULL COMMENT 'uuid',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `unique_did_uuid` (`did`, `uuid`) BLOCK_SIZE 16384 GLOBAL,KEY `I_create_time` (`create_time`) BLOCK_SIZE 16384 LOCAL,KEY `I_update_time` (`update_time`) BLOCK_SIZE 16384 LOCAL
) REPLICA_NUM = 3partition by hash(id) PARTITIONS 30;

一张三十个分区的分区表,上面有三个索引,一个没有分区的 global index,两个和主表一样有三十个分区的 local index。

执行的 SQL 长这样,十分简单:

SELECTuuid
FROMtest
WHEREdid = ?
ORDER BYupdate_time DESC
LIMIT?

如果没有统计信息,根据不同的动态采样结果,显而易见,可能会出现两种计划。

第一种是走 I_update_time 这个 local index,好处是可以利用这个索引的有序性,优化 ORDER BY update_time DESC 这个排序的动作,消除了各个分区内的排序(个人理解三号算子的 top n sort 不需要真正进行 sort,只需要做 top n 就够了),计划长这样:

第二种是走 unique_did_uuid 这个 global index,好处是满足 did = ? 这个过滤条件的数据,可以在索引上被快速定位,计划长这样:

这里用户反馈的是:如果生成第一种走 I_update_time 这个 local index 的计划,就会慢。

如果生成第二种走 unique_did_uuid 这个 global index 的计划,就会快。

1718552204

因为没有统计信息,所以优化器只能根据动态采样得来的部分数据,算出这两种计划的代价,然后生成代价更低的计划。

即使表中的数据没有发生过变化,因为每次动态采样的数据因为有一定的随机性,会采样到不同的数据,所以可能导致生成的计划不稳定。如果采样到一批比较极端的不能代表整体数据特征的数据,就会导致生成不优的计划。

动态采样的介绍,详见官网链接:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000822131,咱们这里不多啰嗦。

第二个问题

用户问的第二个问题是:收集了统计信息之后,为什么就能稳定生成第二种更优的本地计划了?

这也是个有意思的问题,需要咱们再来重新回顾一遍问题的背景。

用户的环境信息:三 zone 三副本,各个副本的 leader 打散在三个分区上。

表定义长这样:

CREATE TABLE `test` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`did` varchar(64) DEFAULT NULL COMMENT 'did',`dxm_uuid` varchar(64) DEFAULT NULL COMMENT 'uuid',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `unique_did_uuid` (`did`, `uuid`) BLOCK_SIZE 16384 GLOBAL,KEY `I_create_time` (`create_time`) BLOCK_SIZE 16384 LOCAL,KEY `I_update_time` (`update_time`) BLOCK_SIZE 16384 LOCAL
) REPLICA_NUM = 3partition by hash(id) PARTITIONS 30;

一张三十个分区的分区表,上面有三个索引,一个没有分区的 global index,两个和主表一样有三十个分区的 local index。

执行的 SQL 长这样,十分简单:

SELECTuuid
FROMtest
WHEREdid = ?
ORDER BYupdate_time DESC
LIMIT?

因为这条 SQL 涉及的表是分区表,各个分区的主副本都被打散在了不同的 zone 里,并且 SQL 的过滤条件又不包含分区键,所以 proxy 这个时候是没办法知道要怎么对这条 SQL 进行路由的。这时候 proxy 就会随机路由到任意一台节点上。

但是收集完统计信息之后,发现可以稳定选择走 unique_did_uuid 这个 global index,计划长这样:

看上去没有 remote xxx 算子和 exchange xxx 算子,不是远程计划和分布式计划,那么这就是个本地计划。

这个计划虽然是本地计划,但是实际也有数据的网络传输。因为 SQL 需要根据 update_time 列进行排序,global index 中并没有这个列的数据,所以过滤完之后,肯定还需要回主表(计划里也可以看到 is_index_back = true)去拿 update_time 列的值,一定还是会走网络的。

不过这个本地计划里的网络传输,和上一个计划有明确的 exchange 算子表示网络传输有所不同,这个计划里的网络传输被封到了一号算子里。一号算子是 DISTRIBUTED TABLE SCAN,含义是 TABLE SCAN 走了 DAS 执行。

大家可以简单地把 DAS 理解成是一种特殊场景下,对网络传输的优化。

DAS 不需要像 remote 或者 exchange 算子一样在网络中把复杂的 SQL 或者子计划在节点间传来传去,而是直接跟存储层交互,通过 RPC 拉取到存储层的数据。

DAS 一般会出现在简单的点查,或者全局索引回表中(刚好就是用户的场景,did = ? 是点查,并且还有全局索引的回表)。DAS 可以通过特殊的 RPC 和存储层直接进行远程数据的交互,所以可以减少在网络里传输 SQL 和子计划的开销。在这两种场景下,通过 DAS 的方式进行数据的网络传输,资源消耗是最小的。

DAS 执行的介绍详见官网链接:https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000217873,咱们依然不在这里多啰嗦。

我们以 proxy 转发 SQL 到 zone2 这台 observer 上为例,那么 zone2 上这台 observer 就会通过 DAS 发 RPC 拉取另外几个节点上的主表数据,进行全局索引回表。

我们以 proxy 转发 SQL 到 zone1 这台 observer 上为例,那么 zone1 上这台 observer 首先会通过 DAS 发 RPC 直接拉取 zone2 上 global index 主副本上的经过过滤之后的数据(过滤条件也一起下压过去了),然后再通过 DAS 发 RPC 拉取另外几个节点上的主表数据,进行全局索引回表。

所以无论 proxy 把 SQL 路由到哪个节点,这条 SQL 中网络传输的动作,都被封到一号 DISTRIBUTED TABLE SCAN 算子里了(一号算子通过 DAS 执行完成了全部的网络传输),因此可以生成稳定的计划。

相关文章:

如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践

这篇博客涉及两个知识点,一个是动态采样,另一个是 DAS 执行。 用户的问题和相关结论 我们看看用户在OceanBase 社区论坛发帖中提出的疑问及其所得出的结论。 问题:收集统计信息之前,为什么会出现计划不稳定的情况? …...

NY321NY322美光闪存芯片NY323NY336

NY321NY322美光闪存芯片NY323NY336 在存储技术飞速发展的今天,美光科技的闪存芯片凭借其创新架构与高性能表现,已成为工业自动化、智能终端等领域的核心组件。本文将围绕技术解析、产品评测、行业趋势、应用案例及市场动态五大维度,深入探讨…...

HMDB51数据集划分

生成训练集、验证集和测试集 每个split文件应该包含: 训练集(id1): 70个视频测试集(id2): 30个视频未使用(id0): 剩余视频 这是一个70/30的训练/测试分割比例。标记为0的视频被排除在当前实验之外。实际上训练集(id1),验证集&am…...

25、DeepSeek-R1论文笔记

DeepSeek-R1论文笔记 1、研究背景与核心目标2、核心模型与技术路线3、蒸馏技术与小模型优化4、训练过程简介5、COT思维链(Chain of Thought)6、强化学习算法(GRPO)7、冷启动**1. 冷启动的目的****2. 冷启动的实现步骤****3. 冷启动…...

CodeBuddy 打造响应式测试平台:ScreenLab 的诞生记

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 开发工具:CodeBuddy(AI 代码伙伴) 技术栈:Vue3 Vite 原生 CSS…...

STM32实战指南:SG90舵机控制原理与代码详解

知识点1【SG90的简述】 SG90是一款微型舵机(Micro Servo),由TowerPro等厂商提供,广泛用于机器人,舵机云台,舵机控制教学等项目中。 1、基本参数 2、工作原理 SG90内部有电机,齿轮组&#xff…...

基于Spring Boot和Vue的在线考试系统架构设计与实现(源码+论文+部署讲解等)

源码项目获取联系 请文末卡片dd我获取更详细的演示视频 系统介绍 基于Spring Boot和Vue的在线考试系统。为学生和教师/管理员提供一个高效、便捷的在线学习、考试及管理平台。系统采用前后端分离的架构,后端基于成熟稳定的Spring Boot框架,负责数据处理…...

开源RTOS(实时操作系统):nuttx 编译

开源RTOS(实时操作系统):nuttx 编译 手册:Installing — NuttX latest documentation 源码:GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…...

C++学习:六个月从基础到就业——C++11/14:decltype关键字

C学习:六个月从基础到就业——C11/14:decltype关键字 本文是我C学习之旅系列的第四十二篇技术文章,也是第三阶段"现代C特性"的第四篇,主要介绍C11/14中的decltype关键字。查看完整系列目录了解更多内容。 引言 在现代C…...

【51】快速获取数码管段选表(含小数点)及字母表的工具(分享)

1 介绍 1.1 画面 1.2 用法 输入IO口和段码字母的映射关系,比如这里e4d5dp2,指的是bit4是e段,bit5是d段,bit2是小数点dp段。 然后选择有效电平(1表示亮 or 0表示亮)。 点击生成段码配置,即可得到…...

高频面试题(含笔试高频算法整理)基本总结回顾120

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...

5月17日

这几天不知道为啥没更新。可能是玩得太疯了。或者是考试有点集中?? 线性代数开课了,英语昨天完成了debate 昨天中午debate结束我们就出去玩了,去的那里时光民俗,别墅很好,770平米,但是缺点是可…...

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程

摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…...

从零开始:使用 PyTorch 构建深度学习网络

从零开始:使用 PyTorch 构建深度学习网络 目录 PyTorch 简介环境配置PyTorch 基础构建神经网络训练模型评估与测试案例实战:手写数字识别进阶技巧常见问题解答 PyTorch 简介 PyTorch 是一个开源的深度学习框架,由 Facebook(现…...

应用层自定义协议与序列化

应用层自定义协议与序列化 应用层协议网络版计算器序列化和反序列化序列化反序列化 重新理解read、write、recv、send和TCP为什么支持全双工代码结构Jsoncpp特性安装序列化使用Json::Value的toStyledString方法使用Json::StreamWriter使用Json::FastWriter 反序列化使用Json::R…...

2025春训第二十场

问题 B: 狗是啥呀 题目描述 在神秘的地狱深处,有着一种神秘的犬类生物,据传这种生物长了x个脑袋,并且具有强大的生命力。由于见过它的人全都下落不明,至今没有人知道它的真面目。 一位勇士为了斩杀这奇怪的生物,来到地…...

分糖果--思维+while判断

1.从左到右只考虑右边一遍&#xff0c;再从右到左考虑左边一遍&#xff0c;相当于左右考虑了 2.然后关键是1遍不一定行&#xff0c;while循环直到成功 https://www.luogu.com.cn/problem/B4091 #include<bits/stdc.h> using namespace std; #define N 100011 typedef …...

[system-design] ByteByteGo_Note Summary

目录 通信协议 REST API 与 GraphQL gRPC 如何工作&#xff1f; 什么是Webhook&#xff1f; 如何提高应用程序接口的性能&#xff1f; HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) SOAP vs REST vs GraphQL vs RPC 代码优先与应用程序接口优先 HTT…...

Flask项目实践:构建功能完善的博客系统(含评论与标签功能)

引言 在Python Web开发领域&#xff0c;Flask以其轻量级、灵活性和易用性赢得了众多开发者的青睐。本文将带您从零开始构建一个功能完善的博客系统&#xff0c;包含文章发布、评论互动和标签分类等核心功能。通过这个实战项目&#xff0c;您不仅能掌握Flask的核心技术&#xf…...

Python爬虫实战:获取1688商品信息

在电商领域&#xff0c;获取1688商品信息对于市场分析、竞品研究、用户体验优化等至关重要。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富的商品资源。通过Python爬虫技术&#xff0c;我们可以高效地获取1688商品的详细信息&#xff0c;包括商品名称、价格、图片、描述…...

Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争

AI 目前是一个巨大的市场,每个人都想从中分一杯羹。 即使是 Canva,这个以拖放图形设计而闻名的流行设计平台,也在其 Canva Create 2025 活动中发布了自己版本的代码生成器,加入了 AI 竞赛。 但为什么一个以设计为先的平台会提供代码生成工具呢? 乍看之下,这似乎有些不…...

多平台屏幕江湖生存指南

UniApp 屏幕适配大师:多平台屏幕江湖生存指南 屏幕江湖:尺寸混战 屏幕适配就像是应对不同体型的客人:从迷你的手机屏,到标准的平板,再到巨大的电视屏幕,你的应用必须有如武林高手般的适应力。 ┌──────────────────────────────────…...

BootCDN介绍(Bootstrap主导的前端开源项目免费CDN加速服务)

文章目录 BootCDN前端开源项目CDN加速服务全解析什么是BootCDN技术原理与架构CDN技术基础BootCDN架构特点1. 全球分布式节点网络2. 智能DNS解析系统3. 高效缓存管理机制4. 自动同步更新机制5. HTTPS和HTTP/2协议支持 BootCDN的核心优势速度与稳定性开源免费资源丰富度技术规范遵…...

LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析

文章目录 问题描述算法思路&#xff1a;二分查找法关键步骤 代码实现代码解释高频疑问解答1. 为什么循环条件是 left < right 而不是 left < right&#xff1f;2. 为什么比较 nums[mid] > nums[right] 而不是 nums[left] < nums[mid]&#xff1f;3. 为什么 right …...

刷leetcodehot100返航版--二叉树

二叉树理论基础 二叉树的种类 满二叉树和完全二叉树&#xff0c;二叉树搜索树 满二叉树 如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 节点个数2^n-1【n为树的深度】 完全二叉树 在完全二叉树…...

「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面

一、概述 本篇基于上一节 Python 实现的双通道搜索服务&#xff08;聚合 SearxNG 本地知识库&#xff09;&#xff0c;构建一个完整的 HarmonyOS ArkTS 前端页面。用户可在输入框中输入关键词&#xff0c;实时查询本地服务 http://localhost:5001/search?q...&#xff0c;返…...

【LINUX操作系统】生产者消费者模型(下):封装、信号量与环形队列

1.封装、完善基于阻塞队列的productor-consumer module 前文中我们封装了自己的Mutex 【LINUX操作系统】线程同步与互斥-CSDN博客 按照老规矩&#xff0c;现在我们对同步与互斥的理解更进一步了&#xff0c;现在把这种面向过程的语言封装成面向对象的写法 1.1 封装条件变量 #p…...

项目管理学习-CSPM-4考试总结

前言 经过两个月左右时间的学习&#xff0c;今天&#xff08;2025年5月17日&#xff09;参加了CSPM-4的考试&#xff0c;仿佛回到了2011年参加软考高项的时候。中午12点考完出来后&#xff0c;手都是酸酸的。不过整体感觉还可以&#xff0c;和预想的差不多。CSPM-4的考试一共有…...

自己手写tomcat项目

一&#xff1a;Servlet的原理 在Servlet(接口中)有&#xff1a; 1.init():初始化servlet 2.getServletConfig()&#xff1a;获取当前servlet的配置信息 3.service():服务器&#xff08;在HttpServlet中实现&#xff0c;目的是为了更好的匹配http的请求方式&#xff09; 4.g…...

C语言—再学习(结构体)

一、建立结构体 用户自己建立由不同类型数据组成的组合型的数据结构&#xff0c;它称为结构体。 struct Student { int num; //学号char name[20]; //名字为字符串char sex; //性别int age; //年纪float score; //分数char addr[30]; 地址为字符…...

SpringBoot--自动配置原理详解

为什么要学习自动配置原理&#xff1f; 原因&#xff1a;在实际开发中&#xff0c;我们经常会定义一些公共的组件&#xff0c;提供各个团队来使用&#xff0c;为了使用方便&#xff0c;我们经常会将公共的组件自定义成starter&#xff0c;如果想自定义starter&#xff0c;必须…...

MiInsertPageInFreeList函数分析和MmFreePagesByColor数组的关系

第一部分&#xff1a; Color MI_GET_COLOR_FROM_LIST_ENTRY(PageFrameIndex, Pfn1); ColorHead &MmFreePagesByColor[ListName][Color]; 第二部分&#xff1a; #define MI_GET_COLOR_FROM_LIST_ENTRY(index,pfn) \ ((ULONG)(((pfn)->…...

Windows/MacOS WebStorm/IDEA 中开发 Uni-App 配置

文章目录 前言1. 安装 HBuilder X2. WebStorm/IDEA 安装 Uniapp Tool 插件3. 配置 Uniapp Tool 插件4. 运行 Uni-App 项目 前言 前端开发人员对 WebStorm 一定不陌生&#xff0c;但有时需要开发 Uni-App 的需求&#xff0c;就必须要采用 HBuilder X&#xff0c;如果不习惯 HBu…...

redisson分布式锁实现原理归纳总结

Redisson 分布式锁的实现原理主要依赖于 Redis 的 Hash 数据结构、Lua 脚本、发布订阅机制以及看门狗&#xff08;Watchdog&#xff09;机制&#xff0c;以下是核心要点总结&#xff1a; 1. 核心原理 • 互斥性与可重入性&#xff1a; 通过 Redis 的 Hash 数据结构保存锁的持…...

Ubuntu 添加系统调用

实验内容 通过内核编译法添加一个不用传递参数的系统调用&#xff0c;其功能可自定义。 &#xff08;1&#xff09;添加系统调用号&#xff0c;系统会根据这个号找到syscall_table中的相应表项。具体做法是在syscall_64.tbl文件中添加系统调用号和调用函数的对应关系。 &#…...

Olib 2.2.0 | 免费开源软件,无需注册登录即可从ZLibrary下载多语言电子书

Olib是一款专为书籍爱好者设计的免费开源软件&#xff0c;它允许用户无需注册或登录即可从ZLibrary高速下载各种语言的电子书。该软件支持上百种语言的电子书下载&#xff0c;非常适合需要多语言资源的读者和研究人员使用。Olib的操作界面非常直观&#xff0c;使得书籍的搜索与…...

c++动态链接库

1. 生成动态链接库 首先实现一个动态链接库的代码 // example.cpp #include <iostream> void sayHello() {std::cout << "Hello from shared library!" << std::endl; }int add(int a, int b) {return a b; }// example.h #pragma once void sa…...

HelloWorld

HelloWorld 新建一个java文件 文件后缀名为 .javahello.java【注意】系统可能没有显示文件后缀名&#xff0c;我们需要手动打开 编写代码 public class hello {public static void main(String[] args) {System.out.print(Hello,World)} }编译 javac java文件&#xff0c;会生…...

SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 背景与想法 我一直对 SVG 图标的动画处理有浓厚兴趣&#xff0c;特别是描边、渐变、交互等效果能为图标增添许…...

SLAM定位常用地图对比示例

序号 地图类型 概述 1 格栅地图 将现实环境栅格化,每一个栅格用 0 和 1 分别表示空闲和占据状态,初始化为未知状态 0.5 2 特征地图 以点、线、面等几何特征来描绘周围环境,将采集的信息进行筛选和提取得到关键几何特征 3 拓扑地图 将重要部分抽象为地图,使用简单的图形表示…...

强化学习中,frames(帧)和 episodes(回合)

在强化学习中&#xff0c;frames&#xff08;帧&#xff09;和 episodes&#xff08;回合&#xff09;是两个不同的概念&#xff1a; 1. 定义差异 Frame&#xff08;帧&#xff09;&#xff1a; 表示智能体与环境交互的单个时间步&#xff08;step&#xff09;&#xff0c;例如…...

HCIP第六次作业

一、拓扑图 二、需求 1、使用PreVal策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2、使用AS_Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略&#xff0c;确保R1通过R2…...

高频面试题(含笔试高频算法整理)基本总结回顾110

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

数据湖与数据仓库融合:Hudi、Iceberg、Delta Lake 实践对比

在实时与离线一体化的今天,数据湖与数据仓库边界不断融合,越来越多企业选用如 Hudi、Iceberg、Delta Lake 等开源方案实现统一的数据存储、计算、分析平台。本篇将围绕以下关键点,展开实战对比与解决方案分享: ✅ 实时写入能力 ✅ ACID 保证 ✅ 增量数据处理能力 ✅ 流批一…...

OGG 更新表频繁导致进程中断,见鬼了?非也!

大家好&#xff0c;这里是 DBA学习之路&#xff0c;专注于提升数据库运维效率。 目录 前言问题描述问题分析解决方案后续 前言 最近几周一直遇到一个 OGG 问题&#xff0c;有一张表已更新就会中断 OGG 同步进程&#xff0c;本文记录一下分析过程以及解决方案。 问题描述 昨天…...

C++学习-入门到精通-【7】类的深入剖析

C学习-入门到精通-【7】类的深入剖析 类的深入剖析 C学习-入门到精通-【7】类的深入剖析一、Time类的实例研究二、组成和继承三、类的作用域和类成员的访问类作用域和块作用域圆点成员选择运算符(.)和箭头成员选择运算符(->)访问函数和工具函数 四、具有默认实参的构造函数重…...

非易失性存储技术综合对比:EEPROM、NVRAM、NOR Flash、NAND Flash和SD卡

非易失性存储技术综合对比&#xff1a;EEPROM、NVRAM、NOR Flash、NAND Flash和SD卡 读写性能对比 存储类型读取速度写入速度随机访问能力最小操作单位NVRAM极快(~10ns)极快(~10ns)极优(字节级)字节EEPROM中等(~100ns)慢(~5ms/字节)优(字节级)字节NOR Flash快(~50ns)慢(~5ms/…...

数字化转型- 数字化转型路线和推进

数字化转型三个阶段 百度百科给出的企业的数字化转型包括信息化、数字化、数智化三个阶段 信息化是将企业在生产经营过程中产生的业务信息进行记录、储存和管理&#xff0c;通过电子终端呈现&#xff0c;便于信息的传播与沟通。数字化通过打通各个系统的互联互通&#xff0c;…...

ARM (Attention Refinement Module)

ARM模块【来源于BiSeNet】&#xff1a;细化特征图的注意力&#xff0c;增强重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 详解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增强特征表示的关键模块&#xff0c;它通过注意力机制来细化特征图&…...

符合Python风格的对象(对象表示形式)

对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方 式。Python 提供了两种方式。 repr()   以便于开发者理解的方式返回对象的字符串表示形式。str()   以便于用户理解的方式返回对象的字符串表示形式。 正如你所知&#xff0c;我们要实现_…...