Emmanuel Cecchet wrote:
Hi Kristian,

I used the default heap size for Sun JRE 1.6.0 update 7 for Windows.
I did tests with -Xmx1g and the problem persists but it takes much longer (hours).

The table is pretty simple, only INT, BIGINT and VARCHAR(16), but it is very large (100 million rows). Note that the table has no index. To reproduce the problem, just insert 100 million rows (might work with less), execute 'select count(*)' on the table (takes about 15 minutes) and then 'delete from table' will crash after about 1h30minutes with an OOM (but the data will be deleted). The size of the Derby folder on disk with the full table is approximately 16GB.

I think that even if this is not a bug, there could be an optimization similar to truncate in other databases that detects if you are going to drop all tuples. I think that for now doing a drop/create table would be much faster than a delete on such large table. I will keep investigating if I hit more issues with DELETE when I don't delete all tuples but a large portion of them.

As far as I can see, Derby schedules a post-commit work item for each page where a record is deleted. These work items are stored in a list, which grows dynamically.
The basic workarounds when using DELETE are:
o allocate a larger heap (memory tradeoff)
o delete parts of the table and commit in between (time/processing tradeoff)
o drop table instead of using DELETE

You could vote for and comment on https://issues.apache.org/jira/browse/DERBY-268 (truncate table), in hope that somebody picks it up. Another idea would be to report the problem through Jira [1] , so that we can better track the issue.


Regards,
--
Kristian

[1] https://issues.apache.org/jira/browse/DERBY


Thanks for your help,
Emmanuel


Do you know the maximum allowed size of the heap and the page cache size used when the OOME occurred? Also, have you overridden the page size, or are you using Blob/Clob in your tables? I'm not saying this is caused by a maximum heap size that is too low, it may still be a Derby bug. Knowing the values of the properties above, may help us analyze the problem.

FYI, others have seen this problem as well, for instance:
http://www.nabble.com/Derby-DB---How-to-increase-Heap-Size---asadmin-start-database-td18958939.html


Regards,



Reply via email to