暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磐维数据库_分布式数据库sql优化-巧用循环性能提升587倍

原创 磐维数据库 2024-11-30
226

业务场景:

应用使用的为磐维分布式版本oracle兼容模式,业务逻辑中使用sql脚本 for循环对十几张进行insert操作,每次insert插入一条数据,循环100w次。

问题现象:

业务对比集中式和分布式版本,发现分布式插入效率没有集中式高,需要定位优化。

问题分析:

查看sql脚本逻辑,for循环对十几张进行insert操作,每次insert插入一条数据,循环100w次。

脚本内容如下:

此脚本逻辑,算法效率为N*M,N为外部循环次数100w,M为内部的 insert 条数,此种算法并不是最优。

分布式的架构与集中式架构存在差异性,集中式架构只有一个datanode组件参与insert计算,分布式架构则是cn、gtm、datanode均参与insert计算,如下图所示。

分布式架构决定了单条insert一条数据要比集中式慢。无形中也放大了上面N*M 算法效率慢的现象。

问题解决:

两种办法:

1:业务脚本只是简单的循环 insert插入,并未其他逻辑,采用数据库内置函数generate_series(),消除 N*M循环算法,采用数据库内部的 max(N,M) 算法,提高性能。

generate_series()函数用法如下:

Demo测试如下,第一张优化之前的执行将近1小时,第二张优化后执行6s。

优化后的业务sql如下,执行耗时25s,符合预期。

2:当sql脚本比较复杂时,通过将脚本中涉及十几张拆分为几个sql脚本,并行执行,发挥PanweiDB分布式数据库的并行能力,提高业务性能。

问题总结:

业务使用磐维分布式版本oracle兼容模式时,应用使用的为磐维分布式版本oracle兼容模式,业务逻辑中使用sql脚本 for循环对十几张进行insert操作,每次insert插入一条数据,循环100w次。经过以上分析,分布式架构原因导致比集中式慢,未发挥PanweiDB的分布式能力。解决方法:1.使用数据库内置函数generate_series():消除 N*M循环算法,采用数据库内部的 max(N,M) 算法,提高性能587倍。2.将脚本按照表数量拆分多个脚本,并行执行,发挥PanweiDB分布式数据库的并行能力。

最后修改时间:2024-11-30 23:16:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论