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

Andrew Mashenkov updated IGNITE-9590:
-------------------------------------
    Description: 
When updating writer thread should iterate over the set of the last versions in 
order to find an appropriate version for its MVCC snapshot. During this 
iteration it collects invisible to anybody versions (their xid_max version is 
less than cleanup). When all outdated versions found, writer thread cleanups 
these rows - removes it from indexes and from pagestore.

It would be more efficient if writer thread does not cleanup old rows by 
itself, but rather delegate it to vacuum workers: instead of cleaning just put 
it to cleanup queue. 

in case of significant backpressure during active updates, when cleanup workers 
can't keep up with removing outdated rows and cleanup queue is too big, writer 
threads can cleanup this rows by itself to prevent memory and performance 
problems.

Upd: Also we can acquire checkpointReadLock for a fix-sized batch of cleaning 
versions Vacuum.cleanup() rather than for every single remove or rather than 
removing all outdated version at once. See TxLog.removeUntil() method.

  was:
When updating writer thread should iterate over the set of the last versions in 
order to find an appropriate version for its MVCC snapshot. During this 
iteration it collects invisible to anybody versions (their xid_max version is 
less than cleanup). When all outdated versions found, writer thread cleanups 
these rows - removes it from indexes and from pagestore.

It would be more efficient if writer thread does not cleanup old rows by 
itself, but rather delegate it to vacuum workers: instead of cleaning just put 
it to cleanup queue. 

in case of significant backpressure during active updates, when cleanup workers 
can't keep up with removing outdated rows and cleanup queue is too big, writer 
threads can cleanup this rows by itself to prevent memory and performance 
problems.


> MVCC: Cleanup old rows in the vacuum thread.
> --------------------------------------------
>
>                 Key: IGNITE-9590
>                 URL: https://issues.apache.org/jira/browse/IGNITE-9590
>             Project: Ignite
>          Issue Type: Improvement
>          Components: mvcc
>            Reporter: Roman Kondakov
>            Priority: Major
>              Labels: performance
>
> When updating writer thread should iterate over the set of the last versions 
> in order to find an appropriate version for its MVCC snapshot. During this 
> iteration it collects invisible to anybody versions (their xid_max version is 
> less than cleanup). When all outdated versions found, writer thread cleanups 
> these rows - removes it from indexes and from pagestore.
> It would be more efficient if writer thread does not cleanup old rows by 
> itself, but rather delegate it to vacuum workers: instead of cleaning just 
> put it to cleanup queue. 
> in case of significant backpressure during active updates, when cleanup 
> workers can't keep up with removing outdated rows and cleanup queue is too 
> big, writer threads can cleanup this rows by itself to prevent memory and 
> performance problems.
> Upd: Also we can acquire checkpointReadLock for a fix-sized batch of cleaning 
> versions Vacuum.cleanup() rather than for every single remove or rather than 
> removing all outdated version at once. See TxLog.removeUntil() method.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to