[ 
https://issues.apache.org/jira/browse/DERBY-4620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12858543#action_12858543
 ] 

Chris Wilson commented on DERBY-4620:
-------------------------------------

I don't think it's the wrong dump, I just copied it from my Subversion checkout 
directory, bunzipped it, and opened it in Eclipse. The file I opened was:

$ md5sum /tmp/java_pid32345.hprof 
a493898efa0834726b163f126422bf02  /tmp/java_pid32345.hprof

I see the same counts for some objects as in your histogram, e.g.

Class Name                            | Objects | Shallow Heap | Retained Heap 

------------------------------------------------------------------------------

org.apache.derby.iapi.types.SQLVarchar| 233,173 |    9,326,920 | >= 13,057,688 

org.apache.derby.iapi.types.DataValueDescriptor[]| 100,376 |    7,641,528 | >= 
48,864,896 

char[][]  | 365,401 |    5,847,240 |  >= 5,850,664 

--------------------------------------------------


I don't see all the classes that you see, and I see some that you don't. Could 
it be due to a filter in your Eclipse?

Re: What was the max heap size set to when you got this OOME? it was the 
default for Sun Java 1.6.0_17, which behaves the same way if it's set to 
-Xmx64m, although I can't promise you that it was actually that value as I 
don't normally specify it.

Re: What was the Derby page cache size set to? (looks like maybe the default of 
1000?) I haven't changed it from the default.

Re: If this is a JVM bug, it will be hard to - and maybe not predictable - to 
make a work-around for it in Derby. I understand that it would be difficult to 
regression-test it without bundling a separate copy of Java along with the test.

However once we understand the bug we can probably write a test case that would 
use ridiculously large amounts of memory, e.g. joining a table to itself 
thousands of times in a way that forces a hash join. This should cause a very 
quick failure if the JVM problem reoccurs, or if something else triggers an 
increase in the memory used by such joins.

> Query optimizer causes OOM error on a complex query
> ---------------------------------------------------
>
>                 Key: DERBY-4620
>                 URL: https://issues.apache.org/jira/browse/DERBY-4620
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.5.3.0
>         Environment: java version "1.6.0_17"
> Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
> Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
> Linux rocio.xxx 2.6.24-27-generic #1 SMP Fri Mar 12 01:10:31 UTC 2010 i686 
> GNU/Linux
>            Reporter: Chris Wilson
>         Attachments: query-plan.txt
>
>
> I have a query that generates about 2,000 rows in a summary table. It runs 
> fast enough (~30 seconds) on MySQL. The same query on Derby runs for about 10 
> minutes and then fails with an OutOfMemoryError.
> I have created a test case to reproduce the problem. It's not minimal because 
> it relies on a rather large dataset to reproduce it, and it's not trivial, 
> but I don't mind doing a bit of work trimming it if someone can point me in 
> the necessary direction.
> You can check out the test case from our Subversion server here:
>   http://rita.wfplogistics.org/svn/trackrita/rita/doc/derby-oom-slow-query
> which includes a pre-built Derby database in "testdb.derby". If this database 
> is deleted, "test.sh" will recreate it, but that takes about 10-15 minutes.
> Just modify the script "test.sh" to point to your Derby libraries, and run it 
> (or just execute the commands in "movement_complete.sql") to demonstrate the 
> problem. You can view the source of that file online here:
>   http://rita.wfplogistics.org/trac/browser/rita/conf/movement_complete.sql
> The first "insert into movement_complete" (starting around line 4) takes 
> about 15 seconds to complete and inserts 5890 rows. The second, starting 
> around line 54, does not complete in reasonable time on Derby. On MySQL, it 
> runs in 28 seconds and inserts 2038 rows. On Derby, after 10 minutes I get:
> JAVA ERROR: java.lang.OutOfMemoryError: Java heap space
> ij> ERROR X0Y67: Cannot issue rollback in a nested connection when there 
> is a pending operation in the parent connection.
> (process exits)
> It does not output the query plan in this case.
> Following the suggestion of Bryan Pendleton, I tried increasing the JVM 
> memory limit from the default to 1024m, and this allows the query to finish 
> executing quite quickly. I guess that means that the optimiser is just taking 
> a lot of memory to 
> optimise the query, and it spends forever in GC before finally hitting OOM 
> and giving up when using the default settings.

-- 
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