OutOfMemoryError - bug or human error?

From: Fischer Krisztián <fischer(at)borganization(dot)com>
To: pgsql-jdbc <pgsql-jdbc(at)postgresql(dot)org>
Subject: OutOfMemoryError - bug or human error?
Date: 2004-01-26 11:47:20
Message-ID: 4014FE48.9000807@borganization.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Hi all!

I execute a select on a table which contains large rows. None the less i
use the setFetchSize() method i get an OutOfMemeoryError.
In my test I craeted a table with an 'int' and a 'text' column. The text
column - in each row - is filled with a string constructed of 65536
characters. The problem is there even if I use a fetch size of 2 rows!

In a real scenario, i never use such a big text field, but this test
shows, that the memory usage of the jdbc driver depends on the number of
rows in the (full) result even if I use a very small fetch size.

Maybe i overlook something? Previously i made the same tests with over 2
million rows - with significantly less text data - and everything worked
fine.

I'm afraid, if i get starting to store lot's of 'large objects' the same
problem could appear.

Could somebody explain how could i avoid this problem?

The problem is reproducible with the following code:

conn = DriverManager.getConnection("jdbc:postgresql://localhost/test",
props);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
conn.setAutoCommit(false);

st = conn.createStatement();
st.executeUpdate("CREATE TABLE foo ( x int, t text )");
st.close();

PreparedStatement st2 = conn.prepareStatement("INSERT INTO foo (x,t)
VALUES (?,?)");
String longString = _a string with 65 Kbyte characters_
for (int i = 0; i < 1500; i++) {
st2.setInt(1,i);
st2.setString(2,longString);
st2.executeUpdate();
}

st2.close();

st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st1.setFetchSize(2);
ResultSet rs = st1.executeQuery("select * from foo");

while (rs.next()) {
//...
}

rs.close();

st.executeUpdate("DROP TABLE foo");

st.close();
// conn.commit();
conn.close();

Thanks!

Chris
--
Fischer Krisztián <fischer(at)borganization(dot)com>
Tel: (+36)70/3843835, (+36)1/3360547
Borganization Kft.

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Fischer Krisztián 2004-01-26 11:54:39 OutOfMemoryError - bug or human error? - version info
Previous Message Oliver Jowett 2004-01-26 01:17:42 Re: Patch to readd documentation