[
https://issues.apache.org/jira/browse/DERBY-3882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12758770#action_12758770
]
Bryan Pendleton commented on DERBY-3882:
----------------------------------------
Thanks very much for the thorough and clear explanation; it is quite helpful to
understand
why this optimization works in this case.
I agree that we should proceed with the current proposal.
> Expensive cursor name lookup in network server
> ----------------------------------------------
>
> Key: DERBY-3882
> URL: https://issues.apache.org/jira/browse/DERBY-3882
> Project: Derby
> Issue Type: Improvement
> Components: Network Server, SQL
> Affects Versions: 10.4.2.0
> Reporter: Knut Anders Hatlen
> Assignee: Knut Anders Hatlen
> Priority: Minor
> Attachments: check_hash.diff, Cursors.java
>
>
> I have sometimes seen in a profiler that an unreasonably high amount of the
> CPU time is spent in
> GenericLanguageConnectionContext.lookupCursorActivation() when the network
> server is running. That method is used to check that there is no active
> statement in the current transaction with the same cursor name as the
> statement currently being executed, and it is normally only used if the
> executing statement has a cursor name. None of the client-side statements had
> a cursor name when I saw this.
> The method is always called when the network server executes a statement
> because the network server assigns a cursor name to each statement even if no
> cursor name has been set on the client side. If the list of open statements
> is short, the method is relatively cheap. If one uses
> ClientConnectionPoolDataSource with the JDBC statement cache, the list of
> open statements can however be quite long, and lookupCursorActivation() needs
> to spend a fair amount of time iterating over the list and comparing strings.
> The time spent looking for duplicate names in lookupCursorActivation() is
> actually wasted time when it is called from the network server, since the
> network server assigns unique names to the statements it executes, even when
> there are duplicate names on the client. It would be good if we could reduce
> the cost of this operation, or perhaps eliminate it completely when the
> client doesn't use cursor names.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.