相关疑难解决方法(0)

Statement.setFetchSize(nSize)方法在SQL Server JDBC驱动程序中的作用是什么?

我有这个非常大的桌子,每天有数百万条记录,每天结束时我都会提取前一天的所有记录.我这样做:

String SQL =  "select col1, col2, coln from mytable where timecol = yesterday";
Statement.executeQuery(SQL);
Run Code Online (Sandbox Code Playgroud)

问题是这个程序需要2GB的内存,因为它会将所有结果都记在内存中然后处理它.

我尝试设置Statement.setFetchSize(10)但它从操作系统获取完全相同的内存它没有任何区别.我正在使用Microsoft SQL Server 2005 JDBC驱动程序.

有没有办法以小块的形式读取结果,比如Oracle数据库驱动程序执行查询时只显示几行,当你向下滚动时会显示更多结果?

java sql-server jdbc

52
推荐指数
4
解决办法
9万
查看次数

Spark JDBC fetchsize 选项

我目前有一个应用程序,它应该连接到不同类型的数据库,使用 Spark 的 JDBC 选项在该数据库上运行特定查询,然后将生成的 DataFrame 写入 HDFS。

Oracle 的性能非常糟糕(没有检查所有这些)。原来这是因为fetchSizeOracle 的默认属性是 10 行。所以我将它增加到 1000,性能提升非常明显。然后,我将其更改为 10000,但随后一些表开始因执行程序中的内存不足问题而失败(6 个执行程序,每个 4G 内存,2G 驱动程序内存)。

我的问题是:

  • Spark 的 JDBC 获取的数据是否在每次运行时都保存在执行程序内存中?有什么办法可以在作业运行时取消持久化吗?

  • 我可以从哪里获得有关该fetchSize物业的更多信息?我猜它不会被所有 JDBC 驱动程序支持。

  • 是否还有其他与 JDBC 相关的事情需要注意以避免 OOM 错误?

jdbc apache-spark apache-spark-sql

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

jdbc ×2

apache-spark ×1

apache-spark-sql ×1

java ×1

sql-server ×1