首页 > 解决方案 > oracle服务器使用jdbc setfetchsize时的内存使用情况

问题描述

例如,当我对 select 语句使用 setFetchSize() 方法时

从表名中选择 *

对于 oracle JDBC 驱动程序中的大表。它实际上限制了 JDBC 客户端中的内存使用。

但是,我很好奇的是,此语句是否会导致 oracle 服务器将所有行存储在服务器内存中,而忽略导致 Oracle 服务器上出现 OutOfMemory 错误的提取大小?

标签: oraclejdbc

解决方案


但是,我很好奇的是,此语句是否会导致 oracle 服务器将所有行存储在服务器内存中,而忽略导致 Oracle 服务器上出现 OutOfMemory 错误的提取大小?

不,处理游标(选择)的 Oracle 不会一次在内存中获取特定表的所有行。Oracle 拥有复杂而安全的架构。Oracle 有许多评估表的标准:“大”或“小”。

正常使用游标(sql引擎)时,服务器进程将无法获取OutOfMemory。

例如,如果你的服务器端代码通过pl/sql集合处理数据,你可以从你的服务器进程中获取数据而无需指定检索行的限制,如果服务器进程达到PGA限制(PGA_AGGREGATE_LIMIT),该进程将崩溃(在进程占用的所有资源将被释放之后)。

这个主题不简单,从一篇文章解释数据库机制的角度来看)

如果有兴趣更详细地了解,那么我认为以下链接可能有用。

附加链接:

SQL 处理

使用光标

Oracle 关系数据结构

Oracle 数据访问

Oracle 数据库存储结构

流程架构


推荐阅读