开发者社区> 问答> 正文

druid是如何处理rewriteBatchedStatements 这个参数的

我用druid插入2w多条数据时候,明显感觉到慢

原提问者GitHub用户evenX86

展开
收起
山海行 2023-07-05 22:08:14 157 0
5 条回答
写回答
取消 提交回答
  • 在 Druid 数据库连接池中,rewriteBatchedStatements 参数用于优化批量插入或更新操作的性能。当该参数设置为 true 时,Druid 将尝试将多个 SQL 语句合并成一个批量操作。

    具体来说,rewriteBatchedStatements 参数会影响到 DruiD 内部使用的 JDBC 驱动程序(如 MySQL 驱动)的行为。在传递给 JDBC 驱动执行之前,Druid 可以对 SQL 语句进行修改,将多个单独的 INSERT、UPDATE 或 DELETE 请求组合成一个批量请求。

    Druid 处理 rewriteBatchedStatements 参数的方式是通过拦截和修改 SQL 语句。当该参数设置为 true 时,在执行批量操作之前,Druid 将会尝试检测到连续的相同类型的 SQL 语句,并将它们合并为一个大的批量操作。这样可以减少网络开销和数据库服务器上的往返次数,从而提高性能。

    需要注意的是,rewriteBatchedStatements 参数只对支持批量操作的数据库驱动程序有效,并且其效果取决于所使用的具体数据库和驱动程序版本。因此,在使用该参数时,请确保您的数据库和驱动程序支持相关的批量操作。

    2023-07-30 23:24:33
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    Druid是一种高性能的数据库连接池和监控平台,支持MySQL、Oracle、SQL Server等多种数据库,并提供了一系列配置参数来优化数据库连接的性能。

    其中,rewriteBatchedStatements参数是用于优化批量插入操作性能的一个参数。当rewriteBatchedStatements设置为true时,Druid会将多个单条SQL语句合并为一个批量SQL语句执行,从而减少与数据库的通信次数,提高插入操作的性能。

    2023-07-29 22:59:45
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    当你在使用Druid插入大量数据时,确实可能会感到速度较慢。这可能是由于一些原因造成的,以下是一些可能的解决办法:

    调整插入数据的批量大小:将一次插入的数据量增加到更大的批量大小。这可以提高插入的效率。

    调整Druid的配置参数:根据你的需求和硬件资源,调整Druid的配置参数,如内存分配、索引和查询等。这些参数的不同组合可能会影响插入的速度。

    使用Druid的索引优化:根据你的查询需求,合理创建和管理Druid的索引。索引的正确使用可以提高查询和插入的速度。

    确保Druid集群的健康状态:检查Druid集群的各个组件是否正常运行。可能存在硬件故障、网络问题或其他因素导致性能下降。

    考虑数据预处理:在插入数据之前进行一些数据预处理操作,如数据清洗、数据压缩等。这些操作可以减少插入数据的大小,从而提高插入速度。

    分配足够的硬件资源:确保Druid集群分配了足够的硬件资源,包括CPU、内存、磁盘等。不足的硬件资源可能导致性能下降。

    如果你仍然感到插入速度较慢,可以进一步检查Druid集群的日志和监控信息,查找可能的性能瓶颈或错误。如果问题持续存在,你可以考虑咨询Druid的开发者或技术支持团队,以获得更专业的帮助。

    2023-07-07 12:33:02
    赞同 展开评论 打赏
  • 自己在jdbc url中配置就可以了

    原回答者GitHub用户wenshao

    2023-07-06 12:44:27
    赞同 展开评论 打赏
  • 当rewriteBatchedStatements参数被设置为true时,MySQL JDBC驱动会使用批量方式执行SQL语句。但是在某些情况下,批量方式执行SQL语句可能会导致性能下降,例如当SQL语句包含大量参数时,或者当SQL语句的长度非常大时。

    为了解决这个问题,MySQL JDBC驱动提供了一个优化参数rewriteBatchedStatements,当该参数被设置为true时,MySQL JDBC驱动将对SQL语句进行重写,并将其转换为批量执行的形式。

    Druid连接池会将这个参数直接透传给JDBC连接,具体来说,在DruidDataSource中,可以通过设置connectionProperties属性来传递这个参数,例如:

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="connectionProperties" value="rewriteBatchedStatements=true"/>
    </bean>
    

    这样就能够在Druid连接池中使用rewriteBatchedStatements这个参数来优化批量执行SQL语句的性能了。

    2023-07-06 08:25:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载