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)