Skip to content
Opensource internals
  • Posts

Datafusion

The Arrow Row Format: How DataFusion Packs a Multi-Column Sort Key Into One Comparable Byte String

Oct 21, 2026 11 min read Jay Hubbert

Arrow’s RowConverter encodes each key column into a byte layout where lexicographic row order equals byte order, turning a multi-column sort key comparison into a single memcmp.

DatafusionArrowPerformanceInternals

Read more →

A Memory Ordering Bug in DataFusion's Hash Join, Found by Model Checking Rather Than Testing

Oct 21, 2026 9 min read Jay Hubbert

DataFusion’s hash join probe partitions coordinate through a single AcqRel counter decrement; a subtle ordering bug was found with loom’s model checker and cannot be reproduced by …

DatafusionJoinsConcurrencyMemory orderingInternals

Read more →

Coalesce Batches, Don't Shrink Them: How DataFusion Rebuilds 8K-Row Batches Out of 3-Row Ones

Oct 21, 2026 12 min read Jay Hubbert

Tiny batches destroy vectorized throughput; DataFusion merges them with arrow-rs BatchCoalescer, wrapped in a LIMIT-aware coalescer that slices instead of copying, and fused into …

DatafusionRuntimePerformanceInternals

Read more →

Multi-Level Merge: How DataFusion Sorts More Data Than It Can Hold, One Pass at a Time

Oct 21, 2026 8 min read Jay Hubbert

DataFusion’s multi-level merge merges the sorted runs it can afford, spills the merged result back to disk, and repeats until one pass remains, re-spilling skewed runs whose widest …

DatafusionSortingSpillingPerformanceInternals

Read more →

EXPLAIN ANALYZE Without the Overhead: How DataFusion Times Every Operator While the Query Runs

Oct 21, 2026 11 min read Jay Hubbert

DataFusion records cheap atomic metrics per operator partition, measures only the time spent inside poll(), and renders the annotated plan after the query finishes — so EXPLAIN …

DatafusionRuntimePerformanceInternals

Read more →

← Newer Page 9 of 15 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·