You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2026/09/04 14:08:01 UTC
[XL] Change in asterixdb[master]: [NO ISSUE][STO] WIP: speed up columnar random sampling
From Ritik Raj <ri...@couchbase.com>:
Attention is currently required from: Ritik Raj.
Hello Anon. E. Moose #1000171, Jenkins,
I'd like you to reexamine a change. Please visit
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21579?usp=email
to look at the new patch set (#3).
The following approvals got outdated and were removed:
Integration-Tests+1 by Jenkins
Change subject: [NO ISSUE][STO] WIP: speed up columnar random sampling
......................................................................
[NO ISSUE][STO] WIP: speed up columnar random sampling
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Work in progress, pushed for visibility rather than review. It builds
on the two ASTERIXDB-3802 changes below it in this stack.
- Random ANALYZE on a mutated columnar collection was far slower than a
full scan. This collapses several passes of that work into one change:
a benchmark harness, the cursor changes it justified, and the
uniformity guards that keep the sample honest while the cursor gets
faster.
- ColumnBtreeSampleCursor: fix a spatially biased sample caused by
truncating a sorted draw batch at the target, draw intra-page slots
without replacement, and share one primary key pass across all draws
that land on the same page.
- Make the newer-component liveness probe existence-only: a zero-column
projection through a new ColumnBTreeExistencePointSearchCursor and
LSMColumnSampleLivenessSearchCursor, wired only where the sample
collector builds its cursor so the query path is untouched. The cloud
read context pins only what that projection needs.
- SampleCursorStats records a disjoint per-phase cost breakdown
(liveness, primary key seek, materialization) so a change can be
attributed rather than guessed at.
- Clamp columnar samples-per-page to 1: drawing several tuples from one
page clusters the sample and moves chi-square well past its critical
value.
Tests:
- ColumnSampleBenchHarness is the first in-tree column LSM sampling
harness. It enforces its own cache-residency and disk-budget
contracts, so a run that silently stopped measuring disk cost fails
instead of reporting a fast number.
- Chi-square uniformity guards for both column and row sampling, each
demonstrated to fail when the corresponding bias is reintroduced.
- Cost baseline, liveness wiring and shape, cloud pinning, and
samples-per-page clamp tests.
Ext-ref: MB-73172
Co-Authored-By: Claude Opus 4.8 <no...@anthropic.com>
Change-Id: I531e3a4be1b5d91379319130463846b9ec8ee1bf
---
M asterixdb/asterix-column/pom.xml
M asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/lsm/merge/MergeColumnReadMetadata.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/CloudExistenceProjectionPinningTest.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleBenchHarness.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleBenchHarnessResidencyTest.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleBenchHarnessTest.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleCostBaselineTest.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleLivenessWiringTest.java
A asterixdb/asterix-column/src/test/java/org/apache/asterix/column/test/sample/ColumnSampleUniformityTest.java
M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/StorageProperties.java
A asterixdb/asterix-common/src/test/java/org/apache/asterix/common/config/ColumnSamplesPerPageClampTest.java
M hyracks-fullstack/hyracks/hyracks-storage-am-btree/src/main/java/org/apache/hyracks/storage/am/btree/impls/DiskBTreeSampleCursor.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/ColumnProjectorType.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/projection/IColumnProjectionInfo.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/CloudColumnIndexDiskCacheManager.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTree.java
A hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBTreeExistencePointSearchCursor.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/ColumnBtreeSampleCursor.java
A hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/btree/SampleCursorStats.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTree.java
A hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnSampleLivenessSearchCursor.java
M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTree.java
M hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/pom.xml
A hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/DiskBTreeSampleUniformityTest.java
A hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/SampleCursorStatsTest.java
27 files changed, 3,628 insertions(+), 227 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/79/21579/3
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21579?usp=email
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I531e3a4be1b5d91379319130463846b9ec8ee1bf
Gerrit-Change-Number: 21579
Gerrit-PatchSet: 3
Gerrit-Owner: Ritik Raj <ri...@couchbase.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Attention: Ritik Raj <ri...@couchbase.com>