资源消耗降低 90%,速度提升 50%,解读 Apache Doris Compaction 最新优化与实现

Apache Doris:深度优化与最佳实践 通过本文,读者将能够更好地理解和应用 Doris 的高级功能,从而提升系统的整体性能和稳定性。通过本文,读者将能够更好地理解和应用 Doris 的高级功能,从而提升系统的整体性能和稳定性。在数据导入 Doris 之前,进行必要的数据清洗和预处理可以提高数据质量和查询性能。合理管理数据的生命周期,定期删除不再需要的历史数据,可以节省存储空间并提高查询性能。索引覆盖是指查询的所有列都在索引中,这样可以避免回表查询,提高查询性能。预聚合可以显著提高查询性能,特别是在需要频繁进行聚合操作的场景中。 阅读详情

背景

LSM-Tree( Log Structured-Merge Tree)是数据库中最为常见的存储结构之一,其核心思想在于充分发挥磁盘连续读写的性能优势、以短时间的内存与 IO 的开销换取最大的写入性能,数据以 Append-only 的方式写入 Memtable、达到阈值后冻结 Memtable 并 Flush 为磁盘文件、再结合 Compaction 机制将多个小文件进行多路归并排序形成新的文件,最终实现数据的高效写入。

Apache Doris 的存储模型也是采用类似的 LSM-Tree 数据模型。用户不同批次导入的数据会先写入内存结构,随后在磁盘上形成一个个的 Rowset 文件,每个 Rowset 文件对应一次数据导入版本。而 Doris 的 Compaction 则是负责将这些 Rowset 文件进行合并,将多个 Rowset 小文件合并成一个 Rowset 大文件。

在此过程中 Compaction 发挥着以下作用:

  • 每个 Rowset 内的数据是按主键有序的,但 Rowset 与 Rowset 之间数据是无序的,Compaction 会将多个 Rowset 的数据从无序变为有序,提升数据在读取时的效率;

  • 数据以 Append-only 的方式进行写入,因此 Delete、Update 等操作都是标记写入,Compaction 会将标记的数据进行真正删除或更新,避免数据在读取时进行额外的扫描及过滤;

  • 在 Aggregate 模型上,Compaction 还可以将不同 Rowset 中相同 Key 的数据进行预聚合,减少数据读取时的聚合计算,进一步提升读取效率。

问题与思考

尽管 Compaction 在写入和查询性能方面发挥着十分关键的作用,但 Compaction 任务执行期间的写放大问题以及随之而来的磁盘 I/O 和 CPU 资源开销,也为系统稳定性和性能的充分发挥带来了新的挑战。

在用户真实场景中,往往面临着各式各样的数据写入需求,并行写入任务的多少、单次提交数据量的大小、提交频次的高低等,各种场景可能需要搭配不同的 Compaction 策略。而不合理的 Compaction 策略则会带来一系列问题:

  • Compaction 任务调度不及时导致大量版本堆积、Compaction Score 过高,最终导致写入失败(-235/-238);

  • Compaction 任务执行速度慢,CPU 消耗高;

  • Compaction 任务内存占用高,影响查询性能甚至导致 BE OOM;

与此同时,尽管 Apache Doris 提供了多个参数供用户进行调整,但相关参数众多且语义复杂,用户理解成本过高,也为人工调优增加了难度。

基于以上问题,从 Apache Doris 1.1.0 版本开始,我们增加了主动触发式 QuickCompaction、引入了 Cumulative Compaction 任务的隔离调度并增加了小文件合并的梯度合并策略,对高并发写入和数据实时可见等场景都进行了针对性优化。

而在 Apache Doris 最新的 1.2.2 版本和即将发布的 2.0.0 版本中,我们对系统 Compaction 能力进行了全方位增强,在触发策略、执行 方式 、 工程实现 以及参数配置上都进行了大幅优化, 在实时性、易用性与稳定性得到提升的同时更是彻底解决了查询效率问题。

Compaction 优化与实现

在设计和评估 Compaction 策略之时,我们需要综合权衡 Compaction 的任务模型和用户真实使用场景,核心优化思路包含以下几点:

  • 实时性和高效性。Compaction 任务触发策略的实时性和任务执行方式的高效性直接影响到了查询执行的速度,版本堆积将导致 Compaction Score 过高且触发自我保护机制,导致后续数据写入失败。

  • 稳定性。Compaction 任务对系统资源的消耗可控,不会因 Compaction 任务带来过多的内存与 CPU 开销造成系统不稳定。

  • 易用性。由于 Compaction 任务涉及调度、策略、执行多个逻辑单元,部分特殊场景需要对 Compaction 进行调优,因此需要 Compaction 涉及的参数能够精简明了,指导用户快速进行场景化的调优。

具体在实现过程中,包含了触发策略、执行方式、工程实现以及参数配置这四个方面的优化。

Compaction 触发策略

调度策略决定着 Compaction 任务的实时性。在 Apache Doris 2.0.0 版本中,我们在主动触发和被动扫描这两种方式的基础之上引入了 Tablet 休眠机制,力求在各类场景均能以最低的消耗保障最高的实时性。

主动触发

主动触发是一种最为实时的方式,在数据导入的阶段就检查 Tablet 是否有待触发的 Compaction 任务,这样的方式保证了 Compaction 任务与数据导入任务同步进行,在新版本产生的同时就能够立即触发数据合并,能够让 Tablet 版本数维持在一个非常稳定的状态。主动触发主要针对增量数据的 Compaction (Cumulative Compaction),存量数据则依赖被动扫描完成。

被动扫描

与主动触发不同,被动扫描主要负责触发大数据量的 Base Compaction 任务。Doris 通过启动一个后台线程,对该节点上所有的 Tablet 元数据进行扫描,根据 Tablet Compaction 任务的紧迫程度进行打分,选择得分最高的 Tablet 触发 Compaction 任务。这样的全局扫描模式能够选出最紧急的 Tablet 进行 Compaction,但一般其执行周期较长,所以需要配合主动触发策略实施。

休眠机制

频繁的元信息扫描会导致大量的 CPU 资源浪费。因此在 Doris 2.0.0 版本中我们引入了 Tablet 休眠机制,来降低元数据扫描带来的 CPU 开销。通过对长时间没有 Compaction 任务的 Tablet 设置休眠时间,一段时间内不再对该 Tablet 进行扫描,能够大幅降低任务扫描的压力。同时如果休眠的 Tablet 有突发的导入,通过主动触发的方式也能顾唤醒 Compaction 任务,不会对任务的实时性有任何影响。

通过上述的主动扫描+被动触发+休眠机制,使用最小的资源消耗,保证了 Compaction 任务触发的实时性。

Compaction 执行方式

在 Doris 1.2.2 版本中中,我们引入了两种全新的 Compaction 执行方式:

  • Vertical Compaction,用以彻底解决 Compaction 的内存问题以及大宽表场景下的数据合并;

  • Segment Compaction,用以彻底解决上传过程中的 Segment 文件过多问题;

而在即将发布的 Doris 2.0.0 版本,我们引入了 Ordered Data Compaction 以提升时序数据场景的数据合并能力。

Vertical Compaction

在之前的版本中,Compaction 通常采用行的方式进行,每次合并的基本单元为整行数据。由于存储引擎采用列式存储,行 Compaction 的方式对数据读取极其不友好,每次 Compaction 都需要加载所有列的数据,内存消耗极大,而这样的方式在宽表场景下也将带来内存的极大消耗。

针对上述问题,我们在 Doris 1.2.2 版本中实现了对列式存储更加友好的 Vertical Compaction,具体执行流程如下图:

整体分为如下几个步骤:

  1. 切分列组。将输入 Rowset 按照列进行切分,所有的 Key 列一组、Value 列按 N 个一组,切分成多个 Column Group;

  1. Key 列合并。Key 列的顺序就是最终数据的顺序,多个 Rowset 的 Key 列采用堆排序进行合并,产生最终有序的 Key 列数据。在产生 Key 列数据的同时,会同时产生用于标记全局序 RowSources。

  1. Value 列的合并。逐一合并 Column Group 中的 Value 列,以 Key 列合并时产生的 RowSources 为依据对数据进行排序。

  1. 数据写入。数据按列写入,形成最终的 Rowset 文件。

由于采用了按列组的方式进行数据合并,Vertical Compaction 天然与列式存储更加贴合,使用列组的方式进行数据合并,单次合并只需要加载部分列的数据,因此能够极大减少合并过程中的内存占用。在实际测试中,Vertical C ompaction 使用内存仅为原有 Compaction 算法的 1/10,同时 Compaction 速率提升 15%。

Vertical Compaction 在 1.2.2 版本中默认关闭状态,需要在 BE 配置项中设置 enable_vertical_compaction=true 开启该功能。

相关PR:https://github.com/apache/doris/pull/14524

Segment Compaction

在数据导入阶段,Doris 会在内存中积攒数据,到达一定大小时 Flush 到磁盘形成一个个的 Segment 文件。大批量数据导入时会形成大量的 Segment 文件进而影响后续查询性能,基于此 Doris 对一次导入的 Segment 文件数量做了限制。当用户导入大量数据时,可能会触发这个限制,此时系统将反馈 -238 (TOO_MANY_SEGMENTS) 同时终止对应的导入任务。Segment compaction 允许我们在导入数据的同时进行数据的实时合并,以有效控制 Segment 文件的数量,增加系统所能承载的导入数据量,同时优化后续查询效率。具体流程如下所示:

在新增的 Segment 数量超过一定阈值(例如 10)时即触发该任务执行,由专门的合并线程异步执行。通过将每组 10个 Segment 合并成一个新的 Segment 并删除旧 Segment,导入完成后的实际 Segment 文件数量将下降 10 倍。Segment Compaction 会伴随导入的过程并行执行,在大数据量导入的场景下,能够在不显著增加导入时间的前提下大幅降低文件个数,提升查询效率。

Segment Compaction 在 1.2.2 版本中默认关闭状态,需要在 BE 配置项中设置 enable_segcompaction = true 开启该功能。

相关 PR : https://github.com/apache/doris/pull/12866

Ordered Data Compaction

随着越来越多用户在时序数据分析场景应用 Apache Doris,我们在 Apache Doris 2.0.0 版本实现了全新的 Ordered Data Compaction。

时序数据分析场景一般具备如下特点:数据整体有序、写入速率恒定、单次导入文件大小相对平均。针对如上特点,Ordered Data Compaction 无需遍历数据,跳过了传统 Compaction 复杂的读数据、排序、聚合、输出的流程,通过文件 Link 的方式直接操作底层文件生成 Compaction 的目标文件。

Ordered Data Compaction 执行流程包含如下几个关键阶段:

  1. 数据上传阶段。记录 Rowset 文件的 Min/Max Key,用于后续合并 Rowset 数据交叉性的判断;

  1. 数据检查阶段。检查参与 Compaction 的 Rowset 文件的有序性与整齐度,主要通过数据上传阶段的 Min /Max Key 以及文件大小进行判断。

  1. 数据合并阶段。将输入 Rowset 的文件硬链接到新 Rowset,然后构建新 Rowset 的元数据(包括行数,Size,Min/Max Key 等)。

可以看到上述阶段与传统的 Compaction 流程完全不一样,只需要文件的 Link 以及内存元信息的构建,极其简洁、轻量。针对时序场景设计的 Ordered Data Compaction 能够在毫秒级别完成大规模的 Compaction 任务,其内存消耗几乎为 ****0,对用户极其友好。

Ordered Data Compaction 在 2.0.0 版本中默认开启状态,如需调整在 BE 配置项中修改 enable_segcompaction 即可。

使用方式:BE 配置 enable_ordered_data_compaction=true

Compaction 工程实现

除了上述在触发策略和 Compaction 算法上的优化之外,Apache Doris 2.0.0 版本还对 Compaction 的工程实现进行了大量细节上的优化,包括数据零拷贝、按需加载、Idle Schedule 等。

数据零拷贝

Doris 采用分层的数据存储模型,数据在 BE 上可以分为如下几层:Tablet -> Rowset -> Segment -> Column -> Page,数据需要经过逐层处理。由于 Compaction 每次参与的数据量大,数据在各层之间的流转会带来大量的 CPU 消耗,在新版本中我们设计并实现了全流程无拷贝的 Compaction 逻辑,Block 从文件加载到内存中后,后续无序再进行拷贝,各个组件的使用都通过一个 BlockView 的数据结构完成,这样彻底的解决了数据逐层拷贝的问题,将 Compaction 的效率再次提升了 5%。

按需加载

Compaction 的逻辑本质上是要将多个无序的 Rowset 合并成一个有序的 Rowset,在大部分场景中,Rowset 内或者 Rowset 间的数据并不是完全无序的,可以充分利用局部有序性进行数据合并,在同一时间仅需加载有序文件中的第一个,这样随着合并的进行再逐渐加载。利用数据的局部有序性按需加载,能够极大减少数据合并过程中的内存消耗。

Idle schedule

在实际运行过程中,由于部分 Compaction 任务占用资源多、耗时长,经常出现因为 Compaction 任务影响查询性能的 Case。这类 Compaction 任务一般存在于 Base compaction 中,具备数据量大、执行时间长、版本合并少的特点,对任务执行的实时性要求不高。在新版本中,针对此类任务开启了线程 Idle Schedule 特性,降低此类任务的执行优先级,避免 Compaction 任务造成线上查询的性能波动。

易用性

在 Compaction 的易用性方面,Doris 2.0.0 版本进行了系统性优化。结合长期以来 Compaction 调优的一些经验数据,默认配置了一套通用环境下表现最优的参数,同时大幅精简了 Compaction 相关参数及语义,方便用户在特殊场景下的 Compaction 调优。

总结规划

通过上述一系列的优化方式, 全新版本在 Compaction 过程中取得了极为显著的改进效果。在 ClickBench 性能测试中,新版本 Compaction 执行速度 达到 30w row/s,相较于旧版本 提升 了 50 % ;资源消耗降幅巨大, 内存占用仅为原先的 10% 。高并发数据导入场景下,Compaction Score 始终保持在 50 左右,且系统表现极为平稳。同时在时序数据场景中,Compaction 写放大系数降低 90%,极大提升了可承载的写入吞吐量。

后续我们仍将进一步探索迭代优化的空间,主要的工作方向将聚焦在自动化、可观测性以及执行效率等方向上:

  1. 自动化调优。针对不同的用户场景,无需人工干预,系统支持进行自动化的 Compaction 调优;

  1. 可观测性增强。收集统计 Compaction 任务的各项指标,用于指导自动化以及手动调优;

  1. 并行 Vertical Compaction。通过 Value 列并发执行,进一步提升 Vertical Compaction 效率。

以上方向的工作都已处于规划或开发中,如果有小伙伴对以上方向感兴趣,也欢迎参与到社区中的开发来。期待有更多人参与到 Apache Doris 社区的建设中 ,欢迎你的加入!

作者介绍:

一休,Apache Doris contributor,SelectDB 资深研发工程师

张正宇,Apache Doris contributor,SelectDB 资深研发工程师

# 相关链接:

SelectDB 官网:

https://selectdb.com

Apache Doris 官网:

http://doris.apache.org

Apache Doris Github:

https://github.com/apache/doris

Apache Doris 入门教程02:标准部署 本文主要介绍了部署 Doris 所需软硬件环境、建议的部署方式、集群扩容缩容,以及集群搭建到运行过程中的常见问题。 阅读详情

相关推荐

大数据Doris(三十三):Doris高级设置

但如果小表的数据量也很大的时候, 就会造成内存溢出, 此时需要通过shuffle join的方式进行, 也被称为partition join. 即将大表小表都按照join的key进行hash, 然后进行分布式join。doris在join操作的时候时候, 默认使用broadcast的方式进行join, 即将小表通过广播的方式广播到大表所在的节点, 形成内存hash, 然后流式读出大表数据进行hashjoin。📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨。

Lansonli(蓝深李)的博客 2469

Doris使用及优化(1.2.6 - 2.0.2 release)

Doris的使用及优化经验,持续更新,欢迎投递。

weixin_43983455的博客 9648

【Doris】31问-最全的Apache Doris的性能优化实战技巧(收藏版)

随着 Apache Doris 在越来越多的企业中得到落地和应用,越来越多用户开始关注如何在海量数据下对Doris的查询性能进行优化。有哪些性能优化的小技巧?如何降低查询耗时?数据模型和分区分桶策略该如何设计?针对慢查询该如何进行分析及优化?来自百度的资深研发工程师、Apache Doris PPMC 缪翎,与大家一起探讨 Apache Doris 性能优化实战技巧,包括但不限于:慢查询定位、Profile 解读及SQL优化;数据模型、索引及分区分桶策略设计;物化视图及Rollup使用技巧;Doris查询优

m0_54252387的博客 1万+

Apache Doris1.0版本集群搭建、负载均衡与参数调优

首先下载包,有源码和预编译两种包 。我这用的预编译下载 | Apache Doris我的架构是3FE+7BE首先操作系统安装要求#设置系统最大打开文件句柄数 时钟同步Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。#关闭交换分区(swap)Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区#Liunx文件系统推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。

h952520296的博客 3269

【Doris】Doris 最佳实践-Compaction调优(1)

这是Compaction调优系列文章的第一篇,我们将尝试通过3篇文章帮助Doris用户了解什么是Compaction、Compaction是如何运作,以及如果调整Compaction策略。## 什么是 CompactionDoris 的数据写入模型使用了 LSM-Tree 类似的数据结构。数据都是以追加(Append)的方式写入磁盘的。这种数据结构可以将随机写变为顺序写。这是一种面向写优化的数据结构,他能增强系统的写入吞吐,但是在读逻辑中,需要通过 Merge-on-Read 的方式,在读取时合并多次写入的

m0_54252387的博客 1893

三极管简单振荡电路实现:从零开始的实战示例

通过一个基础实例,手把手教你如何利用三极管构建简单的振荡电路,深入理解三极管在实际电路中的工作原理与应用技巧。

weixin_32836713的博客 1201

Doris解决磁盘高占用

问题 有个Doris集群的磁盘占用比较高,一直在告警 需要清理be节点storage_root_path路径下的trash目录,但是清理了之后过一段时间又高很多,需要调整集群参数进行自动清理 分析 BE 配置:trash_file_expire_time_sec FE 配置:catalog_trash_expire_second fe的配置是加快进入 trash的时间 be的配置是trash里的数据过期时间 解决办法 调整BE参数,变小些 BE 配置:trash_file_expire_time_sec

gaofeng的博客 3454

利用易特天下 ipbox&零层壹号 sdwan 组网盒子实现异地组网

一款支持zerotier的异地组网盒子

v808v808的博客 3347

Apache Doris 的应用实践与优化

Apache Doris 近期宣传比较多,自己对MPP架构也很感兴趣,前段时间也看了官网文档和一些架构。从我目前了解到的内容来看,Doris适合大规模数据查询的场景,并不能完全取代Hive,以前的ETL数据处理任务也不适合全部迁移到Doris中。针对不同的查询使用场景Doris也分了数据模型,当然现在这几种模型不能完全满足用户需求。看到项目社区很活跃,希望大家能够积极参与社区建设。以下分享Dori...

数据一哥,公众号:数据社 1万+

利用wolcmd.exe批处理执行远程唤醒

代码如下: @echo off cls :check if exist wolcmd.exe goto targetmac echo 缺少wolcmd.exe echo. goto end :targetmac cls echo -------------------------------------------------------- echo 目标主机PC-01地址:40235678A...

Chriseo的博客 6946

基于STM32单片机设计的智能水温控制系统

本项目研究并实现了一种基于STM32单片机的智能水温控制系统。系统以STM32F103RCT6作为主控制器,通过DS18B20温度传感器实时采集水温数据,利用PID控制算法精确调节5V直流防水型70W加热棒的功率输出,确保水温恒定在设定范围内。此外,采用OLED显示屏显示当前水温和预设上限阀值,并集成ESP8266-WiFi模块与自研Android手机APP进行远程通信和控制。用户可通过本地按键或手机APP设置温度阀值,实现实时监控与智能化管理。整个系统设计旨在提高水资源利用效率,提升生活及工业用水环境的舒

8789

Apache Doris 入门教程24:查询和导入性能分析

本文简要介绍如何在Apache Doris 中进行查询和导入的性能分析

sunjian286的专栏 1768

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

助力中国联通万亿日志数据分析提速 10 倍,Apache Doris 是如何做到的?

【优快云 编者按】在数据安全管理体系的背后,离不开对安全日志数据的存储与分析。以终端设备为例,中国联通每天会产生百亿级别的日志数据,对于保障网络安全、提高系统稳定性和可靠性具有至关重要的作用。目前,Apache Doris 在联通体系的落地已支持了 30 多条业务线和数百个实时作业,不仅帮助联通实现了万亿级安全日志的高效分析和低成本,也为其他运营商提供了成功的参考案例和学习经验,对推动运营商的数...

优快云资讯 1366

【WRF-Chem教程-附录 C】闪电-NOx 参数化方案详解

闪电-NOx 参数化方案详解

WW、forever的博客 974

Mac安装Claude Code的3种方式及5类报错解决方案

介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel

weixin_28728443的博客 361

Doris学习笔记之优化

本文记录了Doris优化的一些方法或原则,比如查看QueryProfile、Join优化原则等,并介绍了Bitmap索引和布隆索引,以及优化的原理等

四国棋客 4225

裂缝二维检测:裂缝的长度和宽度检测

这一节,我们需要去整合一下前面的代码,在进行长度和宽度的测量时,需要裂缝的类型、个数、面积的帮助。这一章是本专栏的核心部分。以上代码我均试过,由于本人能力有限,看不懂代码,最终还是没有采用,使用的是最普通检测宽度的方法,即求得骨架总长度后,用总面积求取平均宽度。

m0_62919535的博客 4237

2021-02-14 JVM垃圾回收算法 垃圾收集器

1.垃圾回收算法 1.1标记-清除算法 1.2复制算法

圣域杂兵的博客 573

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

doris版本1.1.1 内存持续增长,版本升级到1.1.5稳定版本的记录

只是减缓了内存的增长速度并没有解决内存缓慢增长的问题,官网浏览版本更新介绍在1.1.3版本中有介绍说1.1.0-1.1.2版本都是没有解决内存缓慢增长的问题,只能检索版本查看稳定版,最新的1.2.X性能强大,但是刚出现并不能确定版本是否稳定,能确定较稳定的版本只有0.15和1.1.5,但是0.15 相对性能较差,因而选定了1.1.5。2、停止BE,重命名be数据存储目录be为be-two,作为备份。7、其他fe节点 ,删除本地的存储文件,删除后重新添加。删除除了已经启动的master节点外的所有fe节点。

select_where的博客 2546

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Doris--基础--06--设置内存

【代码】Doris--基础--06--设置内存。

zhou920786312的博客 7204

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一文揭秘高效稳定的 Apache Doris 内存管理机制

通过上述一系列的优化,高并发性能和稳定性有明显改善,OOM 导致 BE 宕机的次数也明显降低,即使发生 OOM 通常也可依据日志定位内存位置,并针对性调优,从而让集群恢复稳定,对查询和导入的内存限制也更加灵活,在内存充足时让用户无需感知内存使用。查询和导入支持异常安全,从而可以随时随地的抛出内存分配失败的 Exception,外部捕获后触发异常处理或释放内存,而不是在内存超限后单纯依赖异步 Cancel。

SelectDB 2286

Doris性能优化不要慌,看看这里!

因为Doris这个框架越来越火,行业内已经成为了必不可少的框架,面试当然也是重点考察。Doris性能优化不要慌,分为几个部分掌握回答就好了。关于Doris的优化是一个很大的课题,我们可以从几个方面进行回答。例如:导入、查询、Join优化等等。我们起一个小的系列,专门回答这个问题。我们先从Join优化说起。一、Doris数据划分在介绍Doris中多种Join方式及优化原理之前,先回顾下Doris的数...

微信搜:import_bigdata,大数据领域硬核原创作者 5276

apache doris的一些重点笔记,参数实践调优

HELP ALTER TABLE; Name: 'ALTER TABLE' Description: 该语句用于对已有的 table 进行修改。如果没有指定 rollup index,默认操作 base index。 该语句分为三种操作类型: schema change 、rollup 、partition 这三种操作类型不能同时出现在一条 ALTER TABLE 语句中。 其中 schema change 和 rollup 是异步操作,任务提交成功则返回。之后可使用 SH...

qq_31866793的博客 8177

【Doris】spark 写入doris太慢方案解决

最近公司用到了spark读写doris,因为doris其实就是mysql协议,在读取数据时候速度还是可以的,但是写入时候就发生了数据写入特别慢,几千条的数据甚至要用几十分钟,这不是可以接受的。经过调研查询发现因为连接参数没有指定,数据都是单条写入,改造前写入方式: 而需要增加的参数就是在URL后增加,单表重复批量写入,而不是单条的循环写入 改造后: 写入速度又原先的几十分钟变为了几十秒。参考:spark写入mysql速度优化......

m0_54252387的博客 2988

查询性能显著提升,Apache Doris 向量化版本在小米 A/B 实验场景的调优实践

小米的 A/B实验平台对 Doris 查询性能的提升有着迫切的需求,因此我们选择优先在小米的 A/B实验平台上线 Apache Doris 向量化版本,也就是 1.1.2 版本。小米的A/B实验平台是一款通过 A/B测试的方式,借助实验分组、流量拆分与科学评估等手段来辅助完成科学的业务决策,最终实现业务增长的一款运营工具产品。在实际业务中,为了验证一个新策略的效果,通常需要准备原策略A 和新策略B 两种方案。随后在总体用户中取出一小部分,将这部分用户完全随机地分在两个组中,使两组用户在统计角度无差别。

SelectDB 3950
上一篇: 从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践
下一篇: 查询性能较 Trino/Presto 3-10 倍提升!Apache Doris 极速数据湖分析深度解读
SelectDB技术团队
博客等级 码龄4年 2119粉丝 483原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SelectDB技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值