Use RowIdxLayoutReader only when #row_idx is referenced - #9190
Conversation
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
Merging this PR will not alter performance
Comparing Footnotes
|
1a53628 to
92bf395
Compare
|
Where does this show up? I think we should ensure that the row idx layout reader is fast in this case? |
Clickbench queries mostly. I think main goal is to do as little work as possible and not initialize an extra layout reader if we can |
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 0.974x ➖ datafusion / vortex-file-compressed / ns (0.974x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.973x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.994x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed / ns (1.026x ➖, 0↑ 2↓)
duckdb / parquet / ns (0.995x ➖, 1↑ 0↓)
File Size Changes (9 files changed, -43.9% overall, 0↑ 9↓)
Totals:
|
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.007x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.078x ➖, 0↑ 3↓)
duckdb / parquet / ns (0.991x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -46.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.987x ➖, 2↑ 1↓)
datafusion / parquet / ns (0.997x ➖, 2↑ 1↓)
duckdb / vortex-file-compressed / ns (0.994x ➖, 4↑ 3↓)
duckdb / parquet / ns (1.001x ➖, 3↑ 5↓)
File Size Changes (25 files changed, -43.5% overall, 0↑ 25↓)
Totals:
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.936x ➖, 2↑ 0↓)
datafusion / parquet / ns (1.025x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed / ns (1.020x ➖, 1↑ 1↓)
duckdb / parquet / ns (0.974x ➖, 0↑ 0↓)
File Size Changes (201 files changed, -42.8% overall, 48↑ 153↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.988x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.995x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.013x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.973x ➖, 1↑ 0↓)
File Size Changes (9 files changed, -44.0% overall, 0↑ 9↓)
Totals:
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.998x ➖, 3↑ 2↓)
datafusion / parquet / ns (1.010x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed / ns (0.994x ➖, 4↑ 3↓)
duckdb / parquet / ns (0.999x ➖, 1↑ 0↓)
File Size Changes (101 files changed, -39.2% overall, 0↑ 101↓)
Totals:
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (0.950x ➖, 3↑ 1↓)
duckdb / parquet / ns (0.992x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -32.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.979x ➖, 1↑ 2↓)
datafusion / parquet / ns (1.012x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.930x ➖, 2↑ 0↓)
duckdb / parquet / ns (0.983x ➖, 0↑ 1↓)
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.166x ➖, 0↑ 2↓)
datafusion / parquet / ns (0.867x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.971x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.798x ➖, 1↑ 0↓)
|
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
Currently we wrap layout readers with RowIdxLayoutReader even if it's not used.
This increases CPU usage on requests that don't use it (i.e. clickbench).
The cost of recursive expression iteration is lower than runtime of
RowIdxLayoutReader so it's a net benefit.
Add expression.contains() method which checks expression has another expression inside.