java - 连接到 MSSQL 消耗过多内存

标签 java sql-server jdbc mssql-jdbc

我使用版本 6.4.0-jre8 的 mssql-jdbc 驱动程序。 我执行一个简单的 SELECT * 查询,该查询可能返回数百万行。为了避免 OOM 错误,我定义了 responseBuffering=adaptivefetchSize=10000。我还确保 ResultSettype_fetch_onlyconcur_read_only。尽管如此,我仍然收到 OOM 错误。堆大小立即飙升至 XMX 限制。

下面您可以找到内存转储分析。我想知道为什么 TDSPackets 没有尽早释放?

enter image description here

如果有任何关于如何避免 OOM 错误的建议,我将不胜感激。谢谢!

最佳答案

问题是我在同一个连接上同时执行多个查询。

根据官方文档:https://learn.microsoft.com/en-us/sql/connect/jdbc/using-adaptive-buffering?view=sql-server-2017#guidelines-for-using-adaptive-buffering

Avoid executing more than one statement on the same connection simultaneously. Executing another statement before processing the results of the previous statement may cause the unprocessed results to be buffered into the application memory.

关于java - 连接到 MSSQL 消耗过多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56491983/

相关文章:

java - 基于选择结果的基本锁定

Java:如何让 File.listOfFiles 在 Linux 上非递归工作?

java - 自定义对话框的宽度和高度

mysql - 从sql中获取响应,将其存储在对象中并使用条件?

java - 无法部署 JDBC 驱动程序

java - 为什么我不断收到这个该死的 SQL*Plus 无效标识符错误?

java - 如何使用 CDI 注入(inject)到 3rd 方实例化的对象中

java - 从 Java 代码中获取 "No query executer factory registered for the ' plsql' 语言“异常

c# - System.Data.SqlClient代码是托管代码吗?

java - Sybase:以编程方式关闭外键检查