On 7/25/2012 11:00 AM, Tony Brusseau (JIRA) wrote:

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

Tony Brusseau commented on DERBY-5881:
--------------------------------------

do you have the derby.log from when the error happened.

I just started another test run which overwrote the derby.log file, woops! I'll 
try to get it as soon as the next run fails. I'm updating reserved space to 
100%. Guess I'll try to start that again with a smaller reserved space size.
see below, I don't expect any change in pageReservedSpace to help with this issue.

Is it likely that one of the rows that you are loading has index key that is 
longer than 10k?
It is quite possible. One of the tables has an indexed VARCHAR(32600) column. 
Are you saying that the max indexed VARCHAR should be 10k or less for a 32k 
page size?
The doc says 1/2 the page size. I usually say 1/3 to be safe, as then you don't worry about the internal overheads per page, per row and per column. The arch reason for this is for a btree tree to work it must have at least 2 rows per page so that it can branch at least once, but much better if it can branch many times. btree rows never "overflow" they must always fit on the page.

It is documented here:
http://db.apache.org/derby/docs/dev/ref/rrefsqlj20937.html

Allowing indexes on large varchar fields is a problem for DERBY. probably the best feature if anyone was interested would be to only index the first "n" characters of a varchar field no matter how long it
is.  This is what other systems do.  I believe a JIRA exists for this
but don't know it.

What is the ddl for the index that you are believe is failing.
Note that it is the page size of the index, not the base table that is 
affecting this issue. You can use the space table vti to verify that the
base table and indexes have the page size you expect.
Sorry, but can you give more explicit directions for this?
http://db.apache.org/derby/javadoc/engine/org/apache/derby/diag/SpaceTable.html

For indexes you should be reducing the reserved space rather than increasing it 
to work around this problem.
Ah, I didn't know this, I'll try playing with a smaller reserved size.
Actually I just checked the code, pageReservedSpace does not do anything for indexes. It is explicitly set to 0 for indexes and any user setting is ignored. The error message should be updated.

This is subtlely documented in link below, if you feel it could be better documented file a JIRA:
http://db.apache.org/derby/docs/dev/ref/rrefproper28026.html

about the only reason I can see to set it to non-zero for indexes is to provide 
very very slight concurrency increase
  as page latch would affect less rows - i would not recommend it.
How would you set the reserved size separately for indexes vs table data?
the parameters affect ddl while they are set either in environment or at db level. So it depends on the ddl you use to create the table, which is why I asked for it. If you use separate statements to create indexes then you could have different properties for the base table and indexes. If you just do one create statement with primary key and/or unique constraint clauses then all tables and indexes will share same size.


Limitation: Record of a btree secondary index cannot be updated or inserted due 
to lack of space on the page.
-------------------------------------------------------------------------------------------------------------

                 Key: DERBY-5881
                 URL: https://issues.apache.org/jira/browse/DERBY-5881
             Project: Derby
          Issue Type: Bug
          Components: Store
    Affects Versions: 10.8.2.2, 10.9.1.0
         Environment: Red Hat Enterprise Linux Server release 6.1 (Santiago) 
-x86_64
and
OpenSuse 11.3 -x86_64
            Reporter: Tony Brusseau
            Priority: Blocker

I'm trying to load a large database. After about 18 million inserts I always 
get the following error:
  Exception: java.sql.BatchUpdateException: Limitation: Record of a btree 
secondary index cannot be updated or inserted due to lack of space on the page. 
 Use the parameters derby.storage.pageSize and/or 
derby.storage.pageReservedSpace to work around this limitation.
Error Code: 20000
I'm already using the maximum pageSize as stated in the documentation (32768) 
and I've bumped up the reserved space to 25%. I've also gotten rid of every 
non-essential index for loading so this is probably related to a primary key 
index (I had to leave most of them around). Our loading process is very 
non-trivial and batched so I'm not even sure which insert/index is causing the 
problem.
Problems:
1. The error message doesn't give any information about which 
tables/columns/indexes are causing this problem so I have no way of knowing if 
i can work around this problem somehow.
2.The database shouldn't die saying to adjust some magic numbers with no 
guidance on how to adjust them and by how much. Even if I do adjust them, what 
is to guarantee I won't get the same error at a later date...maybe even 
sometime during production which would be extremely bad. I believe an automated 
correction to this limitation needs to be created.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira




Reply via email to