v26.2 Changelog for Cloud

### Deduplication[​](#deduplication-improvements "Direct link to Deduplication")

- Reworked the `insert_select_deduplicate` setting to add backward compatibility options. [#92951](https://github.com/ClickHouse/ClickHouse/pull/92951) ([Sema Checherinda](https://github.com/CheSema)).
- Deduplication with async inserts is now allowed when materialized views are involved. [#93957](https://github.com/ClickHouse/ClickHouse/pull/93957) ([Sema Checherinda](https://github.com/CheSema)).

### Other improvements[​](#other-improvements "Direct link to Other improvements")

- Improved the UX of `SYSTEM INSTRUMENT ADD/REMOVE`: string literals are now used for function names, all matching functions are patched, and `function_name` is supported in `REMOVE`. [#93345](https://github.com/ClickHouse/ClickHouse/pull/93345) ([Pablo Marcos](https://github.com/pamarcos)).
- Added `SYSTEM NOTIFY FAILPOINT` for pausable failpoints and `SYSTEM WAIT FAILPOINT` for PAUSE/RESUME. [#92368](https://github.com/ClickHouse/ClickHouse/pull/92368) ([Shaohua Wang](https://github.com/tiandiwonder)).
- C++ function names in `system.trace_log`, `system.symbols`, and the `demangle` function are now displayed correctly. [#93075](https://github.com/ClickHouse/ClickHouse/pull/93075) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- jemalloc profiles are now written with symbols, eliminating the need for a binary during heap profile generation. [#93099](https://github.com/ClickHouse/ClickHouse/pull/93099) ([Azat Khuzhin](https://github.com/azat)).
- Fixed crash when attaching a table to a `MaterializedPostgreSQL` database if `dropReplicationSlot` throws during stack unwinding. [#96871](https://github.com/ClickHouse/ClickHouse/pull/96871) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
- Fixed leaving possible leftovers when `CREATE TABLE` fails. [#94174](https://github.com/ClickHouse/ClickHouse/pull/94174) ([Azat Khuzhin](https://github.com/azat)).
- Fixed uninitialized memory access when a password-protected TLS key is used. [#94182](https://github.com/ClickHouse/ClickHouse/pull/94182) ([Konstantin Bogdanov](https://github.com/thevar1able)).
- When `alter table ... modify setting ...` times out while acquiring a lock, it now returns a timeout error instead of a logical error. [#93856](https://github.com/ClickHouse/ClickHouse/pull/93856) ([Han Fei](https://github.com/hanfei1991)).
- Improved CPU and real-time profiler interoperability with socket timeouts. [#96601](https://github.com/ClickHouse/ClickHouse/pull/96601) ([Sergei Trifonov](https://github.com/serxa)).
- Enabled fast libcxx hardening for release builds (primarily out-of-bounds checks) with no noticeable performance impact. [#94757](https://github.com/ClickHouse/ClickHouse/pull/94757) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)).

## Performance Improvements[​](#performance-improvements "Direct link to Performance Improvements")

### JOIN performance[​](#join-performance "Direct link to JOIN performance")

- Sped up some hash join operations by implementing dynamic dispatch for `ColumnVector::replicate`. [#79573](https://github.com/ClickHouse/ClickHouse/pull/79573) ([Raúl Marín](https://github.com/Algunenano)).
- More filters are now pushed down into JOINs. [#85556](https://github.com/ClickHouse/ClickHouse/pull/85556) ([Nikita Taranov](https://github.com/nickitat)).
- Extended filter push-down from JOIN `ON` conditions for `ANY`, `SEMI`, and `ANTI` joins when the filter uses inputs from only one side. [#92584](https://github.com/ClickHouse/ClickHouse/pull/92584) ([Dmitry Novik](https://github.com/novikd)).
- Equivalent sets can now be used to push down filters for `SEMI JOIN`. [#92837](https://github.com/ClickHouse/ClickHouse/pull/92837) ([Dmitry Novik](https://github.com/novikd)).
- Parallelized processing of non-joined rows in `ParallelHashJoin` for complex predicates, controlled by the `parallel_non_joined_rows_processing` setting (enabled by default). [#92068](https://github.com/ClickHouse/ClickHouse/pull/92068) ([Yarik Briukhovetskyi](https://github.com/yariks5s)).
- Hash join now skips reading the left side entirely when the right side is empty, avoiding unnecessary work from heavy filtering or aggregation. [#94062](https://github.com/ClickHouse/ClickHouse/pull/94062) ([Alexander Gololobov](https://github.com/davenger)).
- JOIN runtime filters are now supported for `RIGHT OUTER` JOINs. [#96183](https://github.com/ClickHouse/ClickHouse/pull/96183) ([Hechem Selmi](https://github.com/m-selmi)).
- PREWHERE optimization is now postponed until after JOIN runtime filter optimization, allowing runtime filters to also be pushed to PREWHERE. [#95838](https://github.com/ClickHouse/ClickHouse/pull/95838) ([Alexander Gololobov](https://github.com/davenger)).

### Query optimization[​](#query-optimization "Direct link to Query optimization")

- Disabled sort order optimization for window functions when the partition key matches or is a prefix of the sorting key, improving parallel execution performance. [#87299](https://github.com/ClickHouse/ClickHouse/pull/87299) ([Nikita Taranov](https://github.com/nickitat)).
- Outer filters are now pushed down into views, allowing PREWHERE to be applied on both local and remote nodes. [#88316](https://github.com/ClickHouse/ClickHouse/pull/88316) ([Igor Nikonov](https://github.com/devcrafter)).
- Optimized performance and memory usage for fractional `LIMIT` and `OFFSET`. [#91167](https://github.com/ClickHouse/ClickHouse/pull/91167) ([Ahmed Gouda](https://github.com/0xgouda)).
- Constant filters on virtual columns are no longer evaluated redundantly. [#91588](https://github.com/ClickHouse/ClickHouse/pull/91588) ([c-end](https://github.com/c-end)).
- Any deterministic expression in the primary key (e.g. `ORDER BY cityHash64(user_id)`) can now be used for data skipping. ClickHouse applies the expression to query constants and uses the result for primary key index lookups with `=`, `IN`, and `has`. For injective expressions, negated forms (`!=`, `NOT IN`, `NOT has`) are also supported. [#92952](https://github.com/ClickHouse/ClickHouse/pull/92952) ([Nihal Z. Miaji](https://github.com/nihalzp)).
- The read-in-order optimization now recognizes when `ORDER BY` columns are constant due to `WHERE` conditions, enabling efficient reverse-order reads. This benefits multi-tenant queries like `WHERE tenant='42' ORDER BY tenant, event_time DESC`. [#94103](https://github.com/ClickHouse/ClickHouse/pull/94103) ([matanper](https://github.com/matanper)).
- For `FINAL` queries using a primary key condition followed by skip indexes, the `PrimaryKeyExpand` step now only checks the initially shortlisted primary key ranges. [#94903](https://github.com/ClickHouse/ClickHouse/pull/94903) ([Shankar Iyer](https://github.com/shankar-iyer)).
- Lazy materialization optimization is now applied to all branches of a `UNION ALL` query, not just the first one, reducing I/O for queries that combine multiple sorted and limited reads from different MergeTree tables. [#96832](https://github.com/ClickHouse/ClickHouse/pull/96832) ([Federico Ginosa](https://github.com/menxit)).

### Function and aggregation performance[​](#function-and-aggregation-performance "Direct link to Function and aggregation performance")