产品化了回放和诊断能力,使用户能够回溯 SQL 计算过程,并诊断每个算子的数据规模与资源占用情况。目前,我们已支持超过 40 种算子粒度问题的诊断。


在优化方面,我们构建了一个能力体系以应对大数据计算中的挑战,如任务运行缓慢、数据处理效率低下和资源启动困难等问题。针对 Spark Flink,我们进行了深入的资源优化。在性能提升方面,我们引入了 SQL 引擎选择、智能 SQL Hint 和智能 RSS 等技术。通过构建 SQL 智能体,我们实现了 SQL 优化改写、语法纠错和诊断等功能。

1)数据驱动的资源优化

针对 Spark 的资源优化,我们构建了一种基于 Spark 历史运行数据的方法,采用白盒和黑盒两种方式进行调整。白盒方法通过分析历史运行过程中资源的实际进程粒度占用情况,拟合出适合作业正确运行的资源参数。我们根据历史运行曲线自定义计算弹性因子,并每天为作业推荐资源参数。黑盒方法则无需用户感知,算法基于时间和性能两个维度自动调整参数,并每天定时进行迭代。通过前一周期的运行结果,调整下一周期的参数,并提交到集群中运行。

最终,针对一些应用组显著节省了超过 50% 的内存成本和 30% CPU 成本,在资源优化方面取得了显著成果,降低了资源使用。

2SQL 引擎选择,提升 SQL 计算效率

SQL 计算引擎选择方面,我们根据 SQL 计算逻辑的复杂度判断其是 IO 密集型还是 CPU 密集型,并将不同的 SQL 分发到不同的计算引擎上以提高性能。同时,我们从历史运行的 SQL 中提取特征,利用 XGBoost 模型进行训练,以优化底层建模过程。

最终,通过特征化和模型训练,引擎 failover 规避率有了显著提升,进一步降低了资源浪费。

3SQL 算子粒度优化,反哺计算引擎

除了资源优化和 SQL 引擎选择外,我们还关注算子粒度的优化。我们从历史运行数据中挖掘包含算子粒度信息的数据记录,经过规划处理后形成 SQL 算子粒度的数据体系。这有助于支持 SQL CBO 代价模型优化。例如,如果提前知道计算过程的数据量,可以自动添加 map join 等提示以提升效率。此外,对于每天定时调度的数据计算任务,由于 SQL 逻辑和数据量相似,可以通过历史数据进行预测和优化。

最终,通过算子粒度的数据挖掘,将运行过程中的数据量大小和数据记录数喂给 SQL 代价模型,实现了自动 map join 的功能,显著提高了 SQL 计算的性能。在 TPC-DS 测试集中,自动 map join 的占比达到了 57%,显著提升了 CPU 和内存的使用效率。

5. SQL 智能体

由于日常机器计算任务中 SQL 任务占比较高,且标准化程度较高,我们结合大语言模型对 SQL 的理解力,以优化 SQL 性能提升作业效率为目标,构建了 SQL 智能体。

腾讯内部基于混元大语言模型,设计了多轮对话、问诊模式的 SQL 智能体,涵盖了 prompt 知识库、function call 等环节。

下面介绍一下 SQL 智能体的构建过程。首先,通过现网收集 SQL 优化和错误 SQL,以及 SQL 工单语料库,在此基础上建立 SQL 指令集,基于基座模型进行指令微调,并结合 prompt 强化用户意图。

最终,通过 SQL 智能体的构建,从多方面实现了 SQL 的优化改写和诊断,显著提升了 SQL 性能。

1)正确性解析和转换

它能自动将硬查询中的 SQL 翻译为 inner join,并实时对比优化前后的 SQL

SQL 智能体在优化改写方面也取得了显著成果。通过底层的 OLAP 引擎测试发现,性能提升了 17.19%。这表明 SQL 智能体能够有效地优化 SQL 计算,提高系统性能。

2SQL 长度优化

大模型能够理解长 SQL 内容,自动去除不必要的如 order by 的逻辑片段,提高计算效率。

3SQL 逻辑简化

此外,SQL 智能体还能够简化 SQL 逻辑,借助临时表等技术,使得 SQL 计算逻辑更加简洁和高效。

三、未来规划和展望

在未来的规划中,我们将继续优化数据存储和研发能力,不断丰富和提升大数据自治的能力。最终,我们计划打造一个湖仓智能自治的解决方案,支撑大数据平台的智能化应用,推动大数据自治向更高层次发展。

点赞(23)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部