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

Pavel Pereslegin commented on IGNITE-26067:
-------------------------------------------

[~korlov], please take a look at the proposed changes.

> Add modification counter to partition
> -------------------------------------
>
>                 Key: IGNITE-26067
>                 URL: https://issues.apache.org/jira/browse/IGNITE-26067
>             Project: Ignite
>          Issue Type: Improvement
>          Components: tables ai3
>            Reporter: Konstantin Orlov
>            Assignee: Pavel Pereslegin
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> To implement staleness check for query plan auto-reoptimization, it's 
> proposed to introduce modification counter on per-partition basis. We don’t 
> really need a fair modification counter, but rather a timestamp when we 
> detected staleness for the last time. Hence, for every partition we need to 
> maintain a triplet of volatile attributes *{{(modificationCounter, 
> nextMilestone, lastMilestoneReachedTs)}}*. This triplet should be initialized 
> at the start of the partition with values *{{(0, 
> computeNextMilestone(currentPartitionSize), HybridClock.now())}}*. To 
> implement *{{computeNextMilestone}}*, we need to introduce 2 new 
> configuration parameters:
> {code:java}
> sql.statistics.staleRowsFraction = 0.2 (default) // fraction of table 
> required to be modified to trigger statistics recollection, i.e. currentSize 
> * staleRowsFraction to compute actual number of rows required
> sql.statistics.minStaleRowsCount = 500 (default) // minimal number of updates 
> required to trigger statistics recollection
>  {code}
> These are cluster wide parameters, later we will introduce overrides on a 
> per-table basis.
> A *{{modificationCounter}}* should be incremented by 1 per any RowId from 
> update command, i.e. it should be incremented by 1 for *{{UpdateCommand}}*, 
> and by *{{size(batch)}}* for *{{UpdateAllCommand}}*.
> When *{{modificationCounter}}* exceeds *{{nextMilestone}}*, a new milestone 
> should be computed, and *{{lastMilestoneReachedTs}}* is set with 
> *{{commitTs}}*.
> The counters should be exposed as metrics



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

Reply via email to