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