[ 
https://issues.apache.org/jira/browse/DERBY-3843?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kathey Marsden updated DERBY-3843:
----------------------------------

    Component/s: Store

> enhance SYSCS_INPLACE_COMPRESS_TABLE to better handle overflow rows and 
> overflow columns
> ----------------------------------------------------------------------------------------
>
>                 Key: DERBY-3843
>                 URL: https://issues.apache.org/jira/browse/DERBY-3843
>             Project: Derby
>          Issue Type: Improvement
>          Components: Store
>    Affects Versions: 10.1.1.0
>            Reporter: Mike Matrigali
>
> Currently SYSCS_INPLACE_COMPRESS_TABLE code executes at the access level.  It 
> only interacts with "user" level head pages, moving
> those rows around during the defragment phase to try and free up pages at the 
> end of the file which then can be returned to the operatiing system.   Only 
> pages at the end of the file can be returned to the operating system.  
> It does not do anything with the "child" chained pages of either overflow 
> rows or overflow columns.  So if one of these rows exists at the 
> end of the file then space will not be returned to the OS.  The function will 
> reclaim all the deleted space and make it available for subsequent
> inserts into the existing table, but the space will not be returned to the OS.
> There are at least 2 challenges to implementing such a feature.  First the 
> current implementation just does not have access to the overflow chains.  So 
> the choice would be to transmit more info up from raw store to store or to 
> move the space stuff down into raw store.
> Second an implmentation that comes to mind is just to scan backward in the 
> file looking for these pieces.  But there are no "backward"
> pointers in an overflow chain so it is impossible to tell from a child piece 
> what it's parent is.  So code can't just move the child piece and 
> make a single pointer fixup.  Without a format change the work all has to be 
> top down.  
> All the following can result in a situation affected by this issue:
> o blob/clob column which is longer than a page
> o any row that is in total longer than a page
> o any row/column that is updated subsequent to insert and expands the space 
> of the row/column may cause this.  It depends on how
>     much is expanded and what the state of the existing page is, including 
> "reserved space".  As an example imagine a table with no
>    reserved space.  Derby will attempt to pack rows as tightly as possible on 
> a base page, and once on a base page it will not move the
>    head of the row off this page unless a normal compress is done (row level 
> locking depends on the head location not moving to use
>    as the locking key).  Then a subsequent update expands the row in some 
> way, the code will overflow this row which may in fact be
>    relatively short, to another page leaving the head on the original page.

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