You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Denis Chudov (Jira)" <ji...@apache.org> on 2023/03/17 09:19:00 UTC

[jira] [Updated] (IGNITE-18767) Reuse deleted rowIds and version chains

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

Denis Chudov updated IGNITE-18767:
----------------------------------
    Description: 
*Motivation*
New RowId is generated every time when row insert happens. Old rowIds point to tombstones and are cleared only on vacuum. This leads to the garbage stockpiling in index storages and version chains, necessity for scanning multiple rows even for unique indexes and possibility of having multiple write intents for single key within one transaction. We can reuse tombstone rows for inserts.

*Definition of done*
New rowIds are generated only for new rows when there are no tombstones to reuse.

*Implementation notes*
For tx rollbacks, we should also remove index entries for write intents that are to be aborted, but only in case when version chain's tail is write intent (i.e. in case of abortion of this write intent there will be no entry in versioned storage on which the index entry could point).

  was:
*Motivation*
New RowId is generated every time when row insert happens. Old rowIds point to tombstones and are cleared only on vacuum. This leads to the garbage stockpiling in index storages and version chains, necessity for scanning multiple rows even for unique indexes and possibility of having multiple write intents for single key within one transaction. We can reuse tombstone rows for inserts.

*Definition of done*
New rowIds are generated only for new rows when there are now tombstones to reuse.

*Implementation notes*
For tx rollbacks, we should also remove index entries for write intents that are to be aborted, but only in case when version chain's tail is write intent (i.e. in case of abortion of this write intent there will be no entry in versioned storage on which the index entry could point).


> Reuse deleted rowIds and version chains
> ---------------------------------------
>
>                 Key: IGNITE-18767
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18767
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Denis Chudov
>            Assignee: Alexander Lapin
>            Priority: Major
>              Labels: ignite-3
>
> *Motivation*
> New RowId is generated every time when row insert happens. Old rowIds point to tombstones and are cleared only on vacuum. This leads to the garbage stockpiling in index storages and version chains, necessity for scanning multiple rows even for unique indexes and possibility of having multiple write intents for single key within one transaction. We can reuse tombstone rows for inserts.
> *Definition of done*
> New rowIds are generated only for new rows when there are no tombstones to reuse.
> *Implementation notes*
> For tx rollbacks, we should also remove index entries for write intents that are to be aborted, but only in case when version chain's tail is write intent (i.e. in case of abortion of this write intent there will be no entry in versioned storage on which the index entry could point).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)