Skip to content

Performance degradation 28.9.0+ #4804

Activity

  1. sanikolaev commented on Sep 11, 2026

    @sanikolaev
    Collaborator

    May be still actual

    Image

    @klirichek pls check like you did recently in a similar issue.

  2. klirichek commented on Oct 2, 2026

    @klirichek
    Contributor

    Iterator_INT_T::Get() runs once per accessed row. SetCurBlock() runs only when moving to another 64K block, but FORCE_INLINE forces its large reader and header-decoding path into Get(). So, a large, rarely executed path was forced into a per-row function.

    After the reader templating change, introduced in manticoresoftware/columnar@dbc40aa this caused:

    • A much larger hot function.
    • A larger stack frame and stack-canary handling.
    • Approximately 468 million additional retired branches per query.
    • Additional instructions and register pressure on every row.

    Removing single FORCE_INLINE lets compiler (both GCC and Clang) correctly keep SetCurBlock() out of line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions