You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Manish Khettry (JIRA)" <de...@db.apache.org> on 2006/01/19 07:19:45 UTC
[jira] Updated: (DERBY-756) OutOfMemory Error on continous
execution of select statement using COUNT() and DISTINCT on same connection
[ http://issues.apache.org/jira/browse/DERBY-756?page=all ]
Manish Khettry updated DERBY-756:
---------------------------------
Attachment: mem_leak.diff
Ran derbylang. Fix is simple enough I think-- I also removed some unused imports.
> OutOfMemory Error on continous execution of select statement using COUNT() and DISTINCT on same connection
> ----------------------------------------------------------------------------------------------------------
>
> Key: DERBY-756
> URL: http://issues.apache.org/jira/browse/DERBY-756
> Project: Derby
> Type: Bug
> Components: Demos/Scripts, JDBC, Network Client, Network Server, SQL
> Versions: 10.0.2.1, 10.1.2.1
> Environment: Windows XP, Java 1.5.0_05, Derby network server 10.0.2.1, 10.1.2.1, Derby heapsize 128m, IBM Universal JDBC driver
> Reporter: Bill Chen
> Assignee: Manish Khettry
> Priority: Critical
> Attachments: mem_leak.diff
>
> The OutOfMemory is thrown when I continously execute a sql statement on an openned JDBC connection. A PreparedStatement and ResultSet is created on the connection everytime and close after each execution. I suspect that the bug is related to function COUNT() with keyword DISTINCT. For example, "select count(distinct ID) from TEST where FLAG <> 2". It will be fine if DISTINCT is not used, or select count(*) is used.
> The exception like "Exception in thread "DRDAConnThread_2" java.lang.OutOfMemoryError: Java heap space" could be thrown on Derby side, or sometimes on client side.
> Please find the test code and schema I used for testing:
> create table:
> CREATE TABLE Test
> (
> ID BIGINT NOT NULL,
> NAME VARCHAR(512) NOT NULL,
> FLAG int,
> CONSTRAINT PK_ID PRIMARY KEY (ID)
> );
> insert data:
> insert into TEST values (0, 'name0', 0);
> insert into TEST values (1, 'name1', 1);
> insert into TEST values (2, 'name2', 2);
> Java client:
> import java.sql.Connection;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.DriverManager;
> import java.sql.SQLException;
> public class DerbyTest
> {
> static public void main(String args[]) throws Exception
> {
> Class.forName("com.ibm.db2.jcc.DB2Driver");
> Connection conn = null;
> try
> {
> conn = DriverManager.getConnection("jdbc:derby:net://localhost:1527/testDB", "admin", "admin");
> for (int i = 0; i < 10000000; i++)
> {
> System.out.println("Query "+i);
> String sql = "select count(distinct ID) from TEST where FLAG <> 2";
> PreparedStatement pStmt = null;
> ResultSet rs = null;
> try
> {
> pStmt = conn.prepareStatement(sql);
> rs = pStmt.executeQuery();
> if (rs.next())
> {
> rs.getInt(1);
> }
> }
> catch (SQLException e)
> {
> e.printStackTrace();
> }
> finally
> {
> if (rs != null)
> rs.close();
> if (pStmt != null)
> pStmt.close();
> }
> }
> }
> finally
> {
> if (conn != null)
> conn.close();
> }
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira