浅谈StarRocks SQL性能检查与调优
StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率,物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略,避免全表扫描或数据倾斜。资源层面,需平衡并行度、内存限制与网络开销,防止资源争抢或溢出。优化方向包括避免SELECT *、改写分页逻辑、调整分桶策略及定期维护(如合并小文件)。结合执行计划分析与监控工具,可精准定位瓶颈,通过向量化引擎、Bitmap索引及CBO优化器进一步提升效率。持续监控资源使用与数据分布,确保集群处于最佳状态。
StarRocks 作为一款高性能的分布式分析型数据库,其 SQL 性能调优需要结合其存储模型、分布式架构和查询优化器特性。以下是性能检查与调优的核心思路及实践方法:
一、性能检查工具
1. 执行计划分析
EXPLAIN命令:解析查询逻辑执行计划,定位瓶颈阶段(如扫描、Shuffle、聚合)。EXPLAIN SELECT ...; -- 查看逻辑执行计划 EXPLAIN ANALYZE SELECT ...; -- 实际执行并返回物理资源消耗(3.0+)- 关注点:
- SCAN 阶段:是否命中分区/分桶裁剪?数据扫描量是否过大?
- JOIN 阶段:是否触发 Colocate/Bucket Shuffle Join?是否存在数据倾斜?
- AGGREGATE 阶段:是否过度聚合?是否启用两阶段优化?
- 关注点:
2. Profile 分析
- 查询 Profile:通过
SET enable_profile=true;开启,执行查询后获取详细资源消耗。SHOW PROFILE ALL; -- 查看所有节点的 CPU、内存、网络消耗- 关键指标:
OperatorTotalTime:各算子耗时。PeakMemoryUsage:内存峰值(避免 OOM)。NetworkBytes:Shuffle 数据量。
- 关键指标:
3. 系统表监控
information_schema:查询慢 SQL、资源使用历史。-- 查看最近 10 条慢查询 SELECT * FROM information_schema.query_statistics ORDER BY total_cost DESC LIMIT 10;
二、常见性能问题及优化手段
1. 数据扫描效率低
- 优化手段:
- 分区裁剪:确保 WHERE 条件包含分区键(如
dt='2023-10-01')。 - 分桶优化:分桶键选择高基数字段,且查询中常作为 JOIN/WHERE 条件。
- 索引加速:
- Bitmap 索引:低基数列的等值查询(如
gender、city)。 - Bloom Filter 索引:高基数列的等值/IN 查询(如
user_id)。
- Bitmap 索引:低基数列的等值查询(如
- 分区裁剪:确保 WHERE 条件包含分区键(如
2. JOIN 性能差
- 优化策略:
- Colocate Join:保证 JOIN 表的分桶方式和分桶数一致,避免数据 Shuffle。
-- 建表时指定相同的分桶数和副本分布 PROPERTIES ("colocate_with" = "group1"); - Bucket Shuffle Join:左表分桶键与 JOIN 键一致时自动触发,减少右表 Shuffle。
- Runtime Filter:利用
set runtime_filter_mode=global动态过滤数据。
- Colocate Join:保证 JOIN 表的分桶方式和分桶数一致,避免数据 Shuffle。
3. 聚合查询慢
- 优化方向:
- 预聚合:使用 Aggregate Key 表模型或物化视图(Rollup)。
- 两阶段聚合:通过
set new_planner_agg_stage=2启用(减少数据传输)。 - 避免大基数 DISTINCT:用
BITMAP_UNION替代COUNT(DISTINCT)。
4. 资源瓶颈
- 内存优化:
- 设置
exec_mem_limit限制单查询内存,避免 OOM。 - 对大表扫描启用
spill_to_disk(3.0+),落盘缓解内存压力。
- 设置
- 并发控制:
- 调整
parallel_fragment_exec_instance_num控制并发度。 - 使用资源组(Resource Group)隔离关键业务查询。
- 调整
三、调优最佳实践
1. 表设计规范
- 数据分布:
- 分区键:按时间(如天/小时)分区,控制单分区数据量在 10GB 内。
- 分桶键:选择 JOIN/WHERE 高频字段,分桶数=节点数×(2~5)。
- 存储模型:
- 明细场景:Duplicate Key 模型(默认)。
- 更新频繁场景:Primary Key 模型(3.0+)。
2. 查询优化技巧
- 谓词下推:确保过滤条件尽早执行(如将过滤条件写在子查询中)。
- **避免 SELECT ***:明确指定列,减少数据传输。
- 利用物化视图:预计算高频聚合指标(如每日 UV、GMV)。
3. 系统级调优
- Compaction 优化:调整
cumulative_compaction_num_threads加速小文件合并。 - 统计信息收集:定期执行
ANALYZE TABLE更新 CBO 优化器统计信息。 - 冷热分离:将历史数据转存至对象存储(如 S3),降低存储成本。
四、性能调优案例
场景:大表 JOIN 数据倾斜
- 现象:JOIN 时个别节点耗时远高于其他节点。
- 诊断:
EXPLAIN显示 Shuffle Join,且某 Bucket 数据量显著偏大。- Profile 中
NetworkBytes不均衡。
- 优化:
- 调整分桶键,选择更均匀的字段组合。
- 启用 Colocate Join 或 Bucket Shuffle Join。
- 对倾斜 Key 增加随机前缀打散数据。
五、总结
StarRocks 的性能调优需遵循以下核心原则:
- 数据分布先行:合理设计分区、分桶,减少数据移动。
- 资源精细管控:平衡内存、并发与稳定性。
- 利用原生特性:Colocate Join、Bitmap 索引、物化视图等。
- 持续监控分析:通过 Profile 和系统表定位瓶颈。
通过结合业务场景的系统性调优,StarRocks 可支撑亚秒级响应的高并发分析需求,适用于实时数仓、OLAP 等复杂场景。
相关文章:
浅谈StarRocks SQL性能检查与调优
StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率,物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略,避免全表扫描或数据倾斜。资源层面,需平衡并行度、内存限制与网络…...
java 中散列表(Hash Table)和散列集(Hash Set)是基于哈希算法实现的两种不同的数据结构
在 Java 中,散列表(Hash Table)和散列集(Hash Set)是两种不同的数据结构,但它们都基于哈希表的原理来实现。下面是它们的联系与区别、实现类以及各自的优缺点,并用表格进行对比整理。 联系与区…...
python编写的一个打砖块小游戏
游戏介绍 打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失…...
【菜鸟飞】通过vsCode用python访问公网deepseek-r1等模型(Tocken模式)
目标 通过vsCode用python访问deepseek。 环境准备 没有环境的,vscode环境准备请参考之前的文章,另外需安装ollama: 【菜鸟飞】用vsCode搭建python运行环境-CSDN博客 AI入门1:AI模型管家婆ollama的安装和使用-CSDN博客 选读文章…...
Figma介绍(基于云的协作式界面设计工具,主要用于UI/UX设计、原型制作和团队协作)
文章目录 注册和登录简单操作说明Figma介绍**核心特点**1. **云端协作与实时同步**2. **跨平台兼容**3. **高效设计工具**4. **原型交互与动效**5. **开发对接友好**6. **插件生态**7. **版本控制与历史记录** **适用场景**- **团队协作**:远程团队共同设计、评审、…...
Text-to-SQL将自然语言转换为数据库查询语句
有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…...
什么是 Fisher 信息矩阵
什么是 Fisher 信息矩阵 Fisher 信息矩阵是统计学和机器学习中一个重要的概念,它用于衡量样本数据所包含的关于模型参数的信息量。 伯努利分布示例 问题描述 假设我们有一个服从伯努利分布的随机变量 X X X,其概率质量函数为 P ( X ...
XSS漏洞靶场---(复现)
XSS漏洞靶场—(复现) 反射型 XSS 的特点是攻击者诱导用户点击包含恶意脚本的 URL,服务器接收到请求后将恶意脚本反射回响应页面,浏览器执行该脚本从而造成攻击,恶意脚本不会在服务器端存储。 Level 1(反射型XSS) 此漏…...
基于ssm的电子病历系统(全套)
一、系统架构 前端:jsp | bootstrap | jquery 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…...
Linux-数据结构-线性表-单链表
一.链表的概念 【1】线性表的链式存储 解决顺序存储的缺点,插入和删除,动态存储问题。 【2】特点: 线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存…...
基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别
【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤ÿ…...
通过 Python 爬虫提高股票选股胜率
此贴为Python爬虫技术学习贴 在股票中,即便有了选股规则,从5000多只股票中筛选出符合规则的股票也是十分困难的,于是想通过爬虫来实现自动化的快速选股。全文用GP代替股票 实现方案 1、指定两套规则,第一套弱约束,第…...
OpenEuler20.3 安装 Elasticsearch7.17
1、下载elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.17-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.17-linux-x86_64.tar.gz.sha512 shasum -a 512 -c elasticsea…...
大数据学习(68)- Flink和Spark Streaming
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
Fastdata极数:中国民宿行业发展趋势报告2025
2024年,中国游客出行次数大幅上涨,旅游相关支出也复苏强劲。2025年中国旅游业还将持续稳健的复苏及增长。同时,中国旅游业将见证一场深刻的变革,这场变革的推动力是消费者对旅游期望的转变,经济因素和年轻人全新价值观…...
图论——广度优先搜索实现
99. 岛屿数量 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述 第一行包含两个整数 N, M,表示矩阵的行数和列数。 后续 N 行,每行…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(6)
1.问题描述: 使用华为内置的MapComponent, 发现显示不出来。查看日志, MapRender底层有报错。 解决方案: 麻烦按以下步骤检查下地图服务,特别是签名证书指纹那部分。 1.一般没有展示地图,可能和没有配置…...
【MySQL】B树和B+树的区别?MySQL为什么选用B+树作为索引数据结构?
B树和B树的区别: 结构方面: 1.节点存储内容: B树: 节点同时存储索引和数据。B树:只有叶子节点存储数据记录或指向数据记录的指针,非叶子节点只存键值,用于索引。 B 树的非叶子节点可以存储更…...
鸿蒙路由 HMrouter 配置及使用一
1、学习链接 HMRouter地址 https://gitee.com/hadss/hmrouter/blob/dev/HMRouterLibrary/README.md 2、工程配置 下载安装 ohpm install hadss/hmrouter 添加编译插件配置 在工程目录下的build-profile.json5中,配置useNormalizedOHMUrl属性为true (我这项目创…...
ERC-6909 最小多代币标准
ERC-6909 Token标准是 ERC-1155 Token标准的一种简化替代方案。 ERC-1155 标准引入了一种多Token接口,使得单个智能合约能够结合可替代的和不可替代的Token(即,ERC20 和 ERC721)。 ERC-1155 解决了多个挑战,例如降…...
各省水资源平台 水资源遥测终端机都用什么协议
各个省水资源平台 水资源遥测终端机 的建设大部分从2012年开始启动,经过多年建设,基本都已经形成了稳定的通讯要求;河北瑾航科技 遥测终端机,兼容了大部分省市的通讯协议,如果需要,可以咨询和互相学习&…...
需求分析、定义、验证、变更、跟踪(高软47)
系列文章目录 需求分析、定义、验证、变更、跟踪 文章目录 系列文章目录前言一、需求分析二、需求定义三、需求验证四、需求变更五、需求跟踪六、真题总结 前言 本节讲明需求分析、定义、验证、变更、跟踪相关知识。 一、需求分析 二、需求定义 三、需求验证 四、需求变更 五、…...
从零开始 | C语言基础刷题DAY3
❤个人主页:折枝寄北的博客 目录 1.打印3的倍数的数2.从大到小输出3. 打印素数4.打印闰年5.最大公约数 1.打印3的倍数的数 题目: 写一个代码打印1-100之间所有3的倍数的数字 代码: int main(){int i 0;for (i 1; i < 100; i){if (i % …...
PostreSQL指南-内幕探索-学习笔记-01-数据库集簇的逻辑与物理结构
目录 一、环境信息 二、参考内容 三、逻辑结构概念 四、物理结构概念 五、逻辑映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 五、物理映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 六、数据库文件布局 1、表格 2、postmaster.pid文件解…...
docker入门篇
使用docker可以很快部署相同的环境,这也是最快的环境构建,接下来就主要对docker中的基础内容进行讲解.Docker 是一个用于开发、交付和运行应用程序的开源平台,它可以让开发者将应用程序及其依赖打包到一个容器中,然后在任何环境中运行这个容器࿰…...
Unity Shader - UI Sprite Shader之简单抠图效果
Sprite抠图效果: 前言 在PhotoShop中我们经常会用到抠图操作,现在就用Shader实现一个简单的抠图效果。 实现原理: 使用当前像素颜色与需要抠掉的颜色相减作比较,然后与一个指定的阈值比较以决定是否将其显示出来; U…...
本地仓库设置
将代码仓库初始化为远程仓库,主要涉及在服务器上搭建 Git 服务,并将本地代码推送到服务器上。以下是详细的步骤: 1. 选择服务器 首先,你需要一台服务器作为代码托管的远程仓库。服务器可以是本地服务器、云服务器,甚…...
30、Vuex 为啥可以进行缓存处理
Vuex 状态管理基础与缓存的关联 Vuex 的核心概念: Vuex 主要由五个部分组成:state、mutations、actions、getters和modules。其中,state是存储数据的地方,类似于一个全局的数据仓库。在这个菜谱 APP 的例子中,缓存的数…...
ngx_http_conf_ctx_t
定义在 src/http/ngx_http_config.h typedef struct {void **main_conf;void **srv_conf;void **loc_conf; } ngx_http_conf_ctx_t; ngx_http_conf_ctx_t 是 Nginx 中用于管理 HTTP 配置上下文的核心结构体,其设计体现了 Nginx 多级配置&…...
vllm-openai多服务器集群部署AI模型
服务器配置是两台ubantu系统电脑,每台电脑安装两张4090-48G显存的显卡,共计192G显存。 服务器1 服务器2 准备工作: 1.两台电脑都已经安装了docker 2.两台电脑都已经安装了nvidia驱动 参考vllm官方资料 https://docs.vllm.ai/en/latest/serving/distributed_serving.html…...
