【发布时间】:2014-04-02 11:51:11
【问题描述】:
我在 Amazon Web Services EC2 上托管的 Tomcat 上运行 JNDI JDBC 连接池,与 Amazon Web Services PostgreSQL 关系数据库通信。
我有一个包含 40,000 行数据的表,我试图使用 JDBC PreparedStatement "SELECT * FROM tableName" 一次性收集这些数据。
当我在本地计算机(从本地 Tomcat)上运行 servlet 并让它通过 db-name.aws-rds-URL 与 RDS 对话时,这种组合完美地工作,收集了所有 40,000 行:5432,然而,当我在我的 AWS EC2 上运行相同的 servlet 并指示它与本地 vLAN 上的 RDS 通信时,它永远不会超过 30,000 行,结果集只有 2,000 行。每次我刷新它时,它都会产生一个新的、不同的但不完整的行数。
下面是我在 Tomcat 的全局 context.xml 中的条目(我在多个 servlet 中使用相同的数据源)。
< Resource
name="jdbc/postgres4"
auth="Container"
type="javax.sql.DataSource"
maxActive="8"
maxIdle="8"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://dn-name.aws-rds-URL:5432/SID"
username="db-username"
password="password" />
关于这里可能误入歧途的任何想法?
【问题讨论】:
-
可能获取大小?不确定,但也许亚马逊为您的查询设置了一些超时时间(弹性 = 没有什么可以花太长时间) - 请参阅 docs.aws.amazon.com/redshift/latest/dg/…
-
是的,我尝试使用 1,000; 10,000;和 40,000 fetchSize,无济于事:(
-
客户端大小的内存不足错误是我需要调查的问题,因为我目前使用的是微型 EC2 实例。
-
你的异常处理是什么?在我看来,您应该在这里看到一个错误,并抛出一个 SQLException。我想知道你是否在某个地方吞下了异常。
-
它不会抛出任何异常。我很确定我将所有 Postgresql/servlet 异常都写入日志文件,唯一的条目是我的调试条目:DB row nums: 13786 Servlet row nums: 13786, etc. 按照每一个正常的权利,它都有效完美无缺,但它只是没有完成这项工作......我尝试将 * 翻转为列名,以查看 JDBC 绑定是否也无济于事。我会继续努力的。
标签: java postgresql jdbc amazon-web-services amazon-ec2