休眠可滚动结果立即获取 mysql 中的所有行
hibernate scrollable result fetch immediatelly all rows in mysql
我们的应用程序可能 运行 依赖于多个数据库,具体取决于客户的基础设施。
我们使用 Hibernate orm,因此我们可以在各种 RDBMS 上部署我们的应用程序。
我们注意到在所有使用 MySql 数据库的环境中内存消耗异常。
分析我们发现当我们使用可滚动结果时出现的问题。
与其他环境(SQL 服务器、Oracle、....)相反,它看起来像 MySql 中的可滚动结果会立即获取所有查询结果。
据我所知,我在 Oracle 和 SQL 服务器中看到,当您使用可滚动结果时,游标打开,并且仅当 next()
方法是时才从数据库服务器获取行叫。我们所有的游标都是`FORWARD_ONLY.
我认为原因是 MySql-jdbc-connector 没有正确处理可滚动结果。
那是对的吗?
我可以让滚动结果在 MySql 上正常工作吗?而且,如果是,如何?
在此先感谢任何人
是的,显然 MySQL 默认缓存 ResultSet 数据,因为这是最有效的方式
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-implementation-notes.html
By default, ResultSets are completely retrieved and stored in memory.
In most cases this is the most efficient way to operate and, due to
the design of the MySQL network protocol, is easier to implement.
您可以尝试:query.setFetchSize()
,它会给出关于您的要求的潜在 jdbc 提示。
但这完全取决于驱动程序,有些人实际上可能只是忽略它并继续获取所有内容
我们的应用程序可能 运行 依赖于多个数据库,具体取决于客户的基础设施。 我们使用 Hibernate orm,因此我们可以在各种 RDBMS 上部署我们的应用程序。
我们注意到在所有使用 MySql 数据库的环境中内存消耗异常。
分析我们发现当我们使用可滚动结果时出现的问题。 与其他环境(SQL 服务器、Oracle、....)相反,它看起来像 MySql 中的可滚动结果会立即获取所有查询结果。
据我所知,我在 Oracle 和 SQL 服务器中看到,当您使用可滚动结果时,游标打开,并且仅当 next()
方法是时才从数据库服务器获取行叫。我们所有的游标都是`FORWARD_ONLY.
我认为原因是 MySql-jdbc-connector 没有正确处理可滚动结果。 那是对的吗? 我可以让滚动结果在 MySql 上正常工作吗?而且,如果是,如何? 在此先感谢任何人
是的,显然 MySQL 默认缓存 ResultSet 数据,因为这是最有效的方式 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-implementation-notes.html
By default, ResultSets are completely retrieved and stored in memory. In most cases this is the most efficient way to operate and, due to the design of the MySQL network protocol, is easier to implement.
您可以尝试:query.setFetchSize()
,它会给出关于您的要求的潜在 jdbc 提示。
但这完全取决于驱动程序,有些人实际上可能只是忽略它并继续获取所有内容