[ 
http://issues.apache.org/jira/browse/DERBY-756?page=comments#action_12363928 ] 

Satheesh Bandaram commented on DERBY-756:
-----------------------------------------

My suggestion is to create a sub-task of this bug, to cover any other memory 
leak, if present. Current bug covers issue that is specific to Distinct and 
that seems to be fixed with Manish's patch. Once a sub-task is created, this 
can be closed.

> 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

Reply via email to