JDBC批处理执行保证

问题描述 投票:0回答:1

我们正在尝试对Azure Synapse(以前称为Azure SQL数据仓库)执行批处理插入。问题是:

  • 性能太差了(插入少于2KB的行和20-25列,大约需要1秒的时间]
  • 它线性缩放(我认为100行约90秒)

我们正在使用标准的JDBC批处理插入模式addBatch()executeBatch()PreparedStatementshttps://stackoverflow.com/a/3786127/496289)。

我们正在使用Microsoft提供的JDBC驱动程序。

我们知道出了什么问题,在数据库遥测中,很明显,数据库正在分解批处理,或多或少地像在for循环中那样运行它。没有批处理“优化”。

奇怪的是,当基础数据源是SQL Server时,批处理按预期方式扩展。

问题是:标准/规格中没有任何内容表明executeBatch()应该比线性缩放更好?

例如JDBC™ 4.3 Specification (JSR 221)表示can会提高性能,而不是must

第14章批处理更新

批处理更新工具允许将多个SQL语句提交到一个数据源以立即进行处理。提交多个SQL语句(而不是单独提交)可以极大地提高性能。语句,PreparedStatement和CallableStatement对象可用于提交批处理更新

[14.1.4 PreparedStatement Objects没有这样的显式/隐式声明,说批处理机制可以提高性能。


[应该补充说,Azure Synapse能够使用500个DWU在17-26分钟内从Data Lake加载1万亿行数据(Parquet格式为450 GB)。

我们正在尝试对Azure Synapse(以前称为Azure SQL数据仓库)执行批处理插入。问题是:性能太差(插入不到2KB且一行20-25的行大约需要1秒的时间...

performance jdbc azure-sql-data-warehouse
1个回答
0
投票

JDBC规范不需要任何类型的优化来执行批处理。实际上,并非所有数据库都支持批处理执行。无论基础数据库系统是否支持,都应使用兼容的JDBC驱动程序来实现批处理。

© www.soinside.com 2019 - 2024. All rights reserved.