Skip to content
Opensource internals
  • Posts

Performance

ClickHouse Merges Columns One at a Time: A Byte per Row Caps Merges at 127 Parts

Oct 16, 2026 20 min read Jay Hubbert

ClickHouse’s vertical merge splits a merge into two stages: merge the key and record where each output row came from (one byte per row), then gather each payload column…

ClickhousePerformanceInternalsMerge treeStorage engine

Read more →

ClickHouse's Hash Table Marks Empty Cells With Zero Bytes: No Tombstone, and Floats Compare Bitwise

Oct 16, 2026 24 min read Jay Hubbert

ClickHouse’s hash table has no occupancy bit, no tombstone, and no sentinel pointer.

ClickhouseInternalsHash tablePerformanceMemory

Read more →

ClickHouse's Query Result Cache Never Invalidates: A Hash of the AST and a TTL

Oct 16, 2026 25 min read Jay Hubbert

ClickHouse caches query results by hashing the parsed query, not the text you typed, plus the settings and database that could change the answer.

ClickhousePerformanceInternalsCaching

Read more →

ClickHouse JIT-Compiles Scalar Expressions with LLVM: From ActionsDAG to an RX Page

Oct 16, 2026 17 min read Jay Hubbert

ClickHouse compiles hot scalar expressions to native code with LLVM.

ClickhousePerformanceInternalsJitLlvm

Read more →

tmux Parses Escape Sequences Fast: Four Boring Optimisations That Matter

Oct 11, 2026 11 min read Jay Hubbert

tmux’s parser has no clever trick in it. It’s a state machine with a transition cache, a bsearch(), a trie, and a width cache — four small optimisations, each of which swaps an…

TmuxPerformanceInternalsInput

Read more →

← Newer Page 18 of 23 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·