我们正在尝试对Azure Synapse(以前称为Azure SQL数据仓库)执行批处理插入。问题是:
我们正在使用标准的JDBC批处理插入模式addBatch()
和executeBatch()
和PreparedStatements
(https://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秒的时间...
JDBC规范不需要任何类型的优化来执行批处理。实际上,并非所有数据库都支持批处理执行。无论基础数据库系统是否支持,都应使用兼容的JDBC驱动程序来实现批处理。