Repository navigation
Compare timestamp parts without evaluating each comparison twice - #10684
Conversation
Merging this PR will regress 5 benchmarks3 warnings, 1 note
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
cad4215 to
84d8584
Compare
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: TPC-H SF=10 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.989x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.992x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.993x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.995x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on S3 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.082x ➖, 0↑ 4↓)
datafusion / parquet / ns (1.004x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (1.009x ➖, 1↑ 1↓)
duckdb / parquet / ns (1.013x ➖, 0↑ 0↓)
|
Benchmarks: PolarSignals Profiling 📖Commits: PR datafusion / vortex-file-compressed / ns (1.004x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.002x ➖, 0↑ 0↓)
No file size changes detected. |
The DateTimeParts compare kernel asked the min and max statistics of each lazy part comparison whether it decides the result. That evaluated the comparison, ran the min-max and sum aggregates over it, and dropped the result, which the caller then evaluated again. Profiles of a TopK filter on ClickBench EventTime spent 43% of their CPU there. Each part comparison is now evaluated once, and a population count of its valid rows answers whether it decides the result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
`valid_rows_all` wrapped the comparison bits in a mask and intersected it with the validity mask. It now intersects the two bit buffers, and reads the comparison count directly when every row is valid. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
84d8584 to
d3bd237
Compare
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
Uh oh!
There was an error while loading. Please reload this page.