2025年sqlldr导入数据比较慢(sqlloader导入数据when)

sqlldr导入数据比较慢(sqlloader导入数据when)p shardingsphe 在服务启动时会去加载表的元数据 导致启动缓慢 如果分表数量多 启动一次等待个上百秒都是可能的 可以添加扫描的线程的并发数量加快扫描速度 p 添加后再启动发现快了一点 效果不明显 通过 debug 代码可以发现

大家好,我是讯享网,很高兴认识大家。



 <p>shardingsphere在服务启动时会去加载表的元数据&#xff0c;导致启动缓慢&#xff0c;如果分表数量多&#xff0c;启动一次等待个上百秒都是可能的。可以添加扫描的线程的并发数量加快扫描速度</p> 

讯享网

讯享网

添加后再启动发现快了一点,效果不明显。

通过debug代码可以发现,慢的根源是ColumnMetaDataLoader#load这个方法,需要去查db信息,表多的话需要查询数量多,就耗时越高。分表的表元数据其实基本都是一样的,例如tabale_0到table_127,这128张表的元数据都是相同,其实只要查一次就够了。所以我们可以调整一下ColumnMetaDataLoader的逻辑,想办法让它获取分表元数据时只查询一次。


讯享网

首先我们会想到使用aop去对原逻辑做切面调整,但是ColumnMetaDataLoader这个是不归spring管理的类,spring提供aop是无法对这个逻辑做处理的,这时可以通过javaAgent去修改字节码。我们用一个小工具集成javaagent完成对字节码的修改。

maven引入依赖

 

然后添加代码对ColumnMetaDataLoader逻辑做调整

讯享网

确保ShardingSphereBoostReCoder 这个类能被你的spring容器扫描到,然后启动服务可以发现启动速度提升了很多。首次启动还会把元数据保存到本地硬盘,第二次启动耗时更低。依赖引入那可以加上&lt;scope&gt;test&lt;/scope&gt;,然后把这个类移动到test目录下,这样就不会影响到线上逻辑,你本地调试的时候启动也快了。

小讯
上一篇 2025-06-11 20:52
下一篇 2025-05-17 22:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153045.html