[ 
https://issues.apache.org/jira/browse/DERBY-2380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12479610
 ] 

Mamta A. Satoor commented on DERBY-2380:
----------------------------------------

Dan, one of the checkins that went for this Jira entry is 516286 and it says 
that there is no such state as a closed cursor, only open or non-existent. Does 
that mean that we don't need the SQLState XCL07 (Cursor '{0}' is closed. Verify 
that autocommit is OFF.) anymore? 


> A statement plan holds onto resources such as its generated class even after 
> it has been invalidated.
> -----------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2380
>                 URL: https://issues.apache.org/jira/browse/DERBY-2380
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.0.2.0, 10.0.2.1, 10.1.1.0, 10.1.2.1, 10.1.3.1, 
> 10.2.1.6, 10.2.2.0, 10.3.0.0
>            Reporter: Daniel John Debrunner
>         Assigned To: Daniel John Debrunner
>
> An internal plan (instance of GenericPreparedStatement) can be invalidated by 
> other SQL operations such as DROP TABLE or DROP INDEX.
> When this happens the references to objects that are no longer useful such as 
> the generated class and saved objects are held onto and thus use memory.
> If the statement is re-compiled then these objects will be handled by garbage 
> collection.
> If the statement is not recompiled though, then these objects will remain 
> until the plan (GenericPreparedStatement) is garbage collected.
> The plan being garbage collected can be held up for two reasons:
>    1) The plan is in the statement cache. Note that only in some cases does 
> it make sense to remove an invalid plan from the statement cache, e.g. a DROP 
> TABLE should remove any plan that uses that table, but a DROP TRIGGER should 
> not remove an INSERT from the cache, as it is likely the plan will be re-used 
> and re-compiled. This  is a separate issue given that the memory usage can 
> occur even if the plan is not in the cache.
>    2) The application holds onto a JDBC PreparedStatement that uses the plan.
> Given an application should not be able to affect memory usage like this then 
> the GenericPreparedStatement.makeInvalid() call should null out fields that 
> hold references to objects that have become invalid.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to