You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Prathyush (Jira)" <ji...@apache.org> on 2026/10/09 09:21:00 UTC

[jira] [Created] (PHOENIX-8018) Disable global index read repair for ROW_SIZE() and RAW_ROW_SIZE() scans

Prathyush created PHOENIX-8018:
----------------------------------

             Summary: Disable global index read repair for ROW_SIZE() and RAW_ROW_SIZE() scans
                 Key: PHOENIX-8018
                 URL: https://issues.apache.org/jira/browse/PHOENIX-8018
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 5.3.2, 5.3.1
            Reporter: Prathyush


ROW_SIZE() and RAW_ROW_SIZE() are used to estimate how much storage a table or a tenant uses, e.g.:

SELECT /*+ NO_INDEX NO_CACHE */ SUM(RAW_ROW_SIZE()) FROM <COVERED_GLOBAL_INDEX>

When the target is a covered global index, ScanUtil.setScanAttributesForIndexReadRepair sets CHECK_VERIFY_COLUMN on the scan. Every unverified row the scan reads is then repaired:

ROW_SIZE() / RAW_ROW_SIZE()
-> CHECK_VERIFY_COLUMN set on the index scan
-> GlobalIndexChecker finds an unverified row
-> repairIndexRows scans the data table row
-> index row is rebuilt/deleted and re-scanned

Why this is a problem:
 # RAW_ROW_SIZE(): BaseResultIterators makes this a raw scan (setRaw(true), readAllVersions()). Index read repair is designed for regular scans, not raw scans that return delete markers and all versions.
 # ROW_SIZE(): the scan is not raw, so repair is semantically valid, but it adds the same cost. A size function should measure what is physically stored, unverified rows included, without changing the index.



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