StarRocks案例6: StarRocks同关系型数据库的绑定变量功能

文章讨论了公司在使用StarRocks时遇到的硬解析问题,即重复解析相似SQL导致的CPU压力。文章提到了尝试自定义变量的解决方案,但未达到预期效果。接着,作者引入了SQL指纹功能来归类SQL语句,虽然减少了硬解析,但执行计划的一致性导致了新的问题,期望能有类似Oracle的自适应游标共享功能来适应不同条件下的查询性能。
摘要由CSDN通过智能技术生成

一. 问题描述

公司目前的业务是,实时和离线的数据,都导入StarRocks,然后后端根据前端传入的条件来拼接SQL语句。
使用过关系型数据库的朋友应该知道,这样会导致很多类似的SQL需要重复解析,俗称硬解析,给CPU带来较大的压力。

二. 解决方案

自定义变量:
找了下官网,没有发现绑定变量相关的文档,只有一个类似MySQL在查询中使用变量的方法,感觉目前 还不能解决当前的问题。

SET @var = (select sum(c1) from tbl);
SELECT @var, v1 from test;

SQL指纹:
后来发现,StarRock支持SQL指纹
https://docs.starrocks.io/zh-cn/latest/administration/Query_planning#%E6%9F%A5%E7%9C%8B-sql-%E6%8C%87%E7%BA%B9

StarRocks 支持规范化慢查询中 SQL 语句,归类并计算各个类型 SQL 语句的 MD5 哈希值。

以下两个 SQL 语句,规范化后属于同一类SQL。

SELECT * FROM orders WHERE customer_id=10 AND quantity>20

SELECT * FROM orders WHERE customer_id = 20 AND quantity > 100

以下为规范化后 SQL 类型。

SELECT * FROM orders WHERE customer_id=? AND quantity>?

存在问题:
因为条件传参不同,查询的数据量差别很大,进而导致执行计划的差异。
而使用了SQL指纹,则两者的执行计划相同。虽然解决了硬解析的问题,但是带来了另外一个问题。
期待同Oracle的自适应游标共享的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值