# 9.0 Release Notes

> **📝 Note**: - To deploy a SingleStore 9.0 cluster, refer to the [Deploy SingleStore Guide](https://docs.singlestore.com/db/v9.1/deploy.md).
> - To make a backup of a database in this release or to restore a database backup to this release, follow [this guide](https://docs.singlestore.com/db/v9.1/manage-data/back-up-and-restore-data.md).
> - New deployments of SingleStore 9.0 require a 64-bit version of RHEL/AlmaLinux 7 or later, or Debian 8 or later, with kernel 3.10 or later and `glibc` 2.17 or later. Refer to the [System Requirements and Recommendations](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/cluster-configuration/system-requirements-and-recommendations.md) for additional information.

## Release Highlights

Feature: **Sequences** - The addition of a `SEQUENCE` modifier for `AUTO_INCREMENT` ensures that a unique sequence of numbers is generated, while greatly reducing the difference between the generated numbers. Additionally, the `SEQUENCE` modifier allows you to set the column type for `AUTO_INCREMENT` columns to other integer types and specify custom starting values. Refer to [AUTO\_INCREMENT AS SEQUENCE](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-definition-language-ddl/create-table/#section-idm234966854099799.md) for more information.

Feature: **Automatic Query Reoptimization with Feedback** - This feature, also referred to as [Feedback Reoptimization](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/feedback-reoptimization.md) (FR), uses statistics from previous query runs to improve query plans and performance. FR reoptimizes queries using statistics collected during query execution so the query optimizer can generate plans based on actual runtime data instead of estimates.

Feature: **Multi-value Index for JSON** - The new [multi-value hash index](https://docs.singlestore.com/db/v9.1/create-a-database/multi-value-hash-index-json.md) enables 100x faster analytics performance on JSON arrays. By indexing each value in arrays in JSON documents, the new index avoids scanning large JSON collections and improves query performance for `JSON_MATCH_ANY` queries.

Enhancement: **Enhanced Query History** - The updated [Query History](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/query-history.md) feature provides users with a powerful tool for monitoring and optimizing SQL query performance. This feature enables high-frequency event tracing, allowing users to identify which queries consume substantial resources or fail during execution and then trace and debug those query executions. Enhanced metrics like CPU time, disk time, network time, various lock times, and more are now included.

Preview Feature: **Distributed Plancache (DPC)**  - The [Distributed Plancache](https://docs.singlestore.com/db/v9.1/user-and-cluster-administration/maintain-your-cluster/managing-memory/distributed-plancache.md) adds a third layer to the plancache, supplementing the existing in-memory plancache and on-disk persistent plancache (PPC). The DPC allows nodes to share plans. Nodes newly added to the cluster will start with a warm plancache instead of building one from scratch. The DPC improves query performance and reduces CPU usage after operations like scaling or rebalance. Plans compiled on one aggregator will be asynchronously synced to other aggregators so that plans do not need to be compiled separately on each aggregator.

* Enabled synchronous Distributed Plancache lookup during query execution.
* Distributed Plancache pool size adjustment fails gracefully.
* Prevented the drop of Distributed Plancache files on regular Persistent Plancache GC.

## Changes in Default Behavior

## Collation Change

The default collation for new (9.0+) clusters has been changed to `utf8mb4_bin` from `utf8mb4_general_ci` to improve default performance of string comparisons, which can substantially improve query speed. The `utf8mb4_bin` collation is not case sensitive and provides performance advantages when case sensitivity is not required.

* For existing clusters that are upgraded to 9.0+, the collation is not changed.
* For new (9.0+) clusters, the default collation will be `utf8mb4_bin`.
* The default collation for the `utf8` and `utf8mb4` charsets has been changed. If a charset, e.g. `utf8mb4` is used in new (9.0+) clusters without an explicit collation, the default collation will be `utf8mb4_bin` instead of `utf8mb4_general_ci`.
* Refer to [Specifying Character Set and Collation for Clusters](https://docs.singlestore.com/db/v9.1/reference/sql-reference/character-encoding/specifying-character-set-and-collation-for-clusters.md) for additional information.

## Enhancements

## Full-text Search

* Added full-text pushdown optimization that works with any filter in the `WHERE` clause.
* Added a new metadata table to track full-text search indexes eligible for merging.
* Added support for custom stopword lists for [full-text search version 2](https://docs.singlestore.com/db/v9.1/developer-resources/functional-extensions/working-with-full-text-search.md).
* Added new nori (Korean) analyzer customizations for full-text search version 2.

## Iceberg

* Implemented support for automatically generated column mappings (for primitive data types and structures) as part of Iceberg schema inference.
* Added support for file filtering based on the WHERE clause in the pipeline declaration. Refer to [Iceberg Ingest](https://docs.singlestore.com/db/v9.1/load-data/data-sources/iceberg-ingest.md) for more information.

## JSON

* Introduced [Multi-Value Hash Index](https://docs.singlestore.com/db/v9.1/create-a-database/multi-value-hash-index-json.md) for JSON columns. This index optimizes key-path and array-value lookups in JSON columns.
* Extended a rewrite to allow merging derived tables with JSON functions.
* Added a new [JSON\_BUILD\_ARRAY](https://docs.singlestore.com/db/v9.1/reference/sql-reference/json-functions/json-build-array.md) function.
* Added support for JSON arrays in pipelines loading JSON files. Each JSON record in the array is loaded as a separate row.
* Enabled the use of the `MATCH_ANY` tokenizer option with underscore in multi-value index settings.
* Added charset validation for JSON type values in external functions.
* Added support for the JSON data type in external functions.

## Observability

* Improved performance of profiled query plans by introducing a new profile codegen mode.
* Included aggregator activity statistics in Query\_completion event traces.
* Added the `auditlog_root_only` engine variable that enables audit logging for only the root user.
* Added `activity_tracking_id` field in activity structure to track the resource consumption by pipelines.
* Updated the default values of `enable_auto_profile` and `auto_profile_type` engine variable to `ON` and `SMART`, respectively.
* Added the `SHOW BOTTOMLESS_PLANCACHE STATUS` command that returns observability metrics for the distributed plancache.
* Added estimates for query memory usage based on static row count and row size estimates to improve Workload Manager (WM) memory management.
* Added an internal allocator `Alloc_connection_context` which tracks certain per-connection allocations that were previously tracked using the standard allocator.
* Added an option to run queries that failed asynchronous compilation, allowing users to introspect the compilation results.
* Added logging for LRU compiled unit eviction.

## Pipelines

* Added support for the `PIPELINE <pipeline_name>` clause to the [SHOW PROFILE](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-manipulation-language-dml/profile.md) command which allows you to view profile information for the specified pipeline.
* Added support for `SHOW PROFILE PIPELINE` on Helios.
* Added the `CREATE_USER` and `ALTER_USER` fields in the `PIPELINES` information schema view. For more information, refer to [PIPELINES](https://docs.singlestore.com/db/v9.1/reference/information-schema-reference/data-ingest/pipelines.md).
* Added a `HEADER DETECTION` `ON`/`OFF` clause to control inference from CSV files. For more information, refer to [Schema and Pipeline Inference](https://docs.singlestore.com/db/v9.1/load-data/about-singlestore-pipelines/pipeline-concepts/schema-and-pipeline-inference.md).
* Added support for inferring Parquet files with the `INFER PIPELINE` command. For more information, refer to [Schema and Pipeline Inference](https://docs.singlestore.com/db/v9.1/load-data/about-singlestore-pipelines/pipeline-concepts/schema-and-pipeline-inference.md).
* Added support for inferring Iceberg schemas automatically on pipeline creation with the `INFER PIPELINE` command. For more information, refer to [Schema and Pipeline Inference](https://docs.singlestore.com/db/v9.1/load-data/about-singlestore-pipelines/pipeline-concepts/schema-and-pipeline-inference.md).
* Added `SHOW CREATE LINK` command that allows you to view the `CREATE` statement for the specified link.
* Added support for `TIME(0)`, `TIME(6)`, `DATETIME(0)`, and `DATETIME(6)` types for the `CAST` command for use with computed columns and the `SET` clause for use with pipelines and `LOAD DATA`.
* Added support to infer CSV files with a single column when the file contains no field terminators in any record.
* Implemented exponential backoff sleep between batch retries.
* Added support for metadata garbage collection for Azure pipelines.

## Query Execution

* Added Join Memory Reduction Optimization. This optimization is a new query optimization feature designed to help prevent memory overflow (spilling) during hash joins on large datasets. When enabled, it automatically rewrites qualifying joins into smaller, manageable pieces—reducing memory pressure and the risk of out-of-memory (OOM) errors. This feature is especially useful when joining large tables on high-cardinality columns, where traditional hash joins could exceed memory limits. Added engine variables `cardinality_threshold_for_join_split_rewrite` and `target_group_size_for_join_split_rewrite` to control the behavior of this optimization. Refer to [Join Memory Reduction Optimization](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/join-memory-reduction-optimization.md) for details. 
* Added segment metadata that allows the engine to determine if columns are fully enclosed in (or pass) a filter and allows the engine to do segment elimination on queries with an `IS NULL` filter.
* Added the `CHARACTER SET <charset>` and `COLLATE <collation>` clauses to the `ALTER TABLE` command that allows converting the character set and collation of a table, respectively.
* Added support for parameterized `IN`-lists in BSON multi-value index optimization enabling improved performance for queries with same-type constant literals and single-argument built-in expressions. Previously limited to hex literals.
* Disabled the pushdown of `INSERT SELECT` queries to leaf nodes for shard key affecting columns.
* Enabled expression pushdown from join into hash builds on materialized CTEs.
* Enabled the rewriting of correlated subselects that depend on more than one outer table with correlation conditions other than `=` and `AND`.
* Extended predicate pushdowns to identify more cases.
* Extended rewrite for `EXISTS` subselects to handle arbitrarily nested `EXISTS` subselects under `AND` or `OR`.
* Added the ability to ignore join selectivity estimates of zero.

## Security

* Enabled mutual TLS authentication between the client and server.
* Added support for manual password activation and expiration to the `ALTER USER` command.
* Added the `password_expiration_mode` engine variable. When set to `LIMITED_ACCESS`, users are allowed to log in even after password expiration and run password update commands, such as `ALTER USER` or `SET PASSWORD`.
* Internal roles and groups cannot be deleted anymore.
* Passwords are now masked in extractor subprocess logs.
* A warning is now raised for every query if the user's password is expiring soon.

## Vector Search

* Added the `VECTOR_INDEX` information schema view which shows the amount of memory and disk used by each vector index.
* Added a fallback mechanism so that when the engine detects that an indexed vector search followed by filters yields fewer than `LIMIT` rows, the engine falls back to a full table scan to ensure sufficient rows are produced. The fallback mechanism can be disabled by setting the engine variable `vector_index_fallback_non_index_scan` to FALSE.
* Extended the `VECTOR_SUM` aggregate function to support the `VECTOR` data type.
* Added a vector index cache to limit the amount of memory used by vector indexes. Refer to [Vector Indexing](https://docs.singlestore.com/db/v9.1/reference/sql-reference/vector-functions/vector-indexing.md) for details.

## General Updates

* Added events to indicate the start and end of asynchronous upgrades.
* Added the `ENSURE_ONLINE_NODES` clause to the `REBALANCE ALL DATABASES` and `REBALANCE PARTITIONS` commands which allows rebalancing to run only if all the leaf nodes are online.
* Allowed background merger to run while `OPTIMIZE TABLE` is running.
* For deployments with small cache size, changed the default blob cache size to 75% of the disk. Refer to [Setting the Blob Cache](https://docs.singlestore.com/db/v9.1/manage-data/setting-the-blob-cache.md) for details.
* Connected the distributed plancache to the plancache manager.
* Disabled unnecessary collection of block statistics.
* All distributed plancache operations are now asynchronous.
* Added support for reusing autostats file on recovery.
* Added support for spilling if input data has NULL rows.
* Aggregators now periodically synchronize query plans across the deployment.
* `DROP RESOURCE POOL` command cannot delete the current resource pool anymore.
* The engine now waits until asynchronous upgrade steps complete before taking a snapshot.
* Added support for NULL type in Wasm UDF return types and parameters.
* Added support for expressions, builtin functions, and user-defined variables in addition to hex literals in Multi-Value index for BSON. Refer to [Multi-Value Hash Index (BSON)](https://docs.singlestore.com/db/v9.1/reference/sql-reference/bson-functions/multi-value-hash-index-bson.md) for more information.
* Extended redundant `GROUP BY` detection to outer join predicates.
* Users with database visibility can now query the `*_BOTTOMLESS_*` information schema views in the respective database. `CLUSTER` permissions are no longer enforced for querying these views.
* Columns with extended types now use the correct default table collation.
* Enabled correlating fields in subselects to reference outer selects more than one level up.
* Enabled skipping of non-alterable tables from asynchronous DDL queries.
* Updated to use a consistent snapshot while performing a shallow table copy.
* Disabled segment elimination for `IN` clauses for which the left-hand expression is not a table column.
* Improved the error message returned when invalid key is specified in the CONFIG/CREDENTIALS JSON.
* Improved the error message for parameter count mismatch during query parsing.
* Users with `SHOW METADATA` privilege can now access the `LOAD_DATA_ERRORS` information schema view.
* Added support for delimited batch sets in external functions.
* Added support for the `LIMIT` clause in prepared statements.
* Computed column definitions now support the `SPLIT` function.
* The `DROP` and `ALTER TABLE` commands no longer have to wait for the plan garbage collector.
* Added support for updated Standard and Enterprise licenses.
* Improved the garbage collection behavior for plancache.
* Introduced support for placeholders for partition ID and timestamp in the `SELECT INTO ... filename` command.
* Added Lucene logs to the cluster report.
* Added statistics related to AWS S3 lookup latency.
* Added knob to disable cardinality estimates on JSON/BSON columns during analyze.

## Engine Variables

This update adds the following new engine variables:

* `auditlog_root_only`: Enables audit logging for only the root user.
* `disk_plan_gc_pause_seconds_on_startup`: Disables disk plan garbage collection on startup. This variable prevents hot plans from being unintentionally disk garbage collected.
* `disk_plan_gc_pause_minutes_for_detached_tables`: Specifies the number of seconds to cache detached table modules before eviction from disk.
* `enable_gc_events`: Enables reporting of garbage collection events. Gates the `MV_GC_EVENTS` information schema view that provides visibility into garbage collection passes.
* `info_schema_show_null_dbs`: Allows non-privileged users to view the rows in `*_BOTTOMLESS_*` information schema views where associated database name is NULL.
* `managed_functions_max_connections`: Specifies the maximum number of HTTP connections per node for managed external functions, such as Python User Defined Function (UDF)s.
* `optimizer_disable_analyze_cardinality_on_json`: Controls if the cardinality of JSON columns is collected by autostats in `PERIODIC` mode.
* `optimizer_max_table_row_count_as_default_cardinality`: Controls the maximum estimated table row count to be used as the per column cardinality when no column-level statistics exists.
* `password_expiration_mode`: When set to `LIMITED_ACCESS`, users are allowed to log in even after password expiration and run password update commands, such as `ALTER USER` or `SET PASSWORD`.
* `regexp_error_handling_level`: Controls the behavior of error handling for regexp operations.
* `scheduler_slow_loop_seconds`: Specifies the threshold for triggering the verbose logging of scheduler thread timing.
* `ssl_ca_for_client_cert`: Support for client certification.
* `suppress_dml_warnings`: Suppresses all DML query warnings.
* `vector_index_fallback_non_index_scan`: Controls a fallback mechanism so that when the engine detects that an indexed vector search followed by filters yields fewer than `LIMIT` rows, the engine falls back to a full table scan to ensure sufficient rows are produced. 
* [Distributed Plan Cache](https://docs.singlestore.com/db/v9.1/user-and-cluster-administration/maintain-your-cluster/managing-memory/distributed-plancache.md): Added the following engine variables to control this feature: `enable_distributed_plancache`, `distributed_plancache_worker_threads`, `distributed_plancache_max_download_plans`, `distributed_plancache_agg_sync_s`, `enable_periodic_distributed_plancache_agg_sync`, `enable_synchronous_dpc_lookup`.
* [Join Memory Reduction Optimization](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/join-memory-reduction-optimization.md) : Added `cardinality_threshold_for_join_split_rewrite` and `target_group_size_for_join_split_rewrite` to control the behavior of this optimization.
* Replication: Note: Only use the following under the guidance of, or as directed by, SingleStore Support.

  * `repl_page_desc_limit_before_stall`: Limits the number of page descriptors in the page map that a 'ReplLog' can use before stalling new transactions.
  * `repl_io_buffer_limit`: Limits the number of IO buffers that a 'ReplLog' can use before stalling new transactions.\[dr\_]
  * `repl_network_buffer_size`: Replication tries to set both send and receive buffer sizes to reduce waits on TCP ACK packets. Can be set for both DR and non-DR replicas.\[dr\_]
  * `repl_max_chunk_size`: When sending logs or snapshots to a replica, limit the chunk size to this value

## Information Schema

This update adds the following information schema views and columns:

* `MV_ACTIVE_METADATA_VERSIONS`. Provides visibility into active metadata transaction read versions.
* `MV_COLUMNSTORE_ACTIVE_MERGE_PLANS` and `LMV_COLUMNSTORE_ACTIVE_MERGE_PLANS`. Show internal details on currently running merge plans.
* `MV_GC_EVENTS`. Provides visibility into garbage collection passes. This view is gated behind the preview feature and engine variable `enable_gc_events`.
* `MV_TABLE_COUNTERS` and `LMV_TABLE_COUNTERS`. Show cumulative per-table metrics, i.e., the amount of work performed by the background merger.
* `VECTOR_INDEX`. Shows the amount of memory and cache used by each vector index.
* Added the `UPLOAD_BLOB_LEAD_PAGES` column to `information_schema.MV_BOTTOMLESS_SUMMARY`. Ensures that uploading log chunks to the remote storage does not keep falling behind.
* Added more metrics to `information_schema.MV_CLOUD_PER_COMPUTE_REMOTE_STATS` and `information_schema.MV_CLOUD_PER_STORAGE_REMOTE_STATS`. Tracks retention log chunks and snapshots.
* Added the `ATTACH DATABASE`, `DETACH DATABASE`, `CREATE DATABASE`, and `DROP DATABASE` columns to `information_schema.MV_EVENTS`.
* Added the `CREATE_USER` and `ALTER_USER` fields to `information_schema.PIPELINES`.
* `source_type` is now included as part of the `config_json` in `information_schema.pipelines`.

## Bug Fixes

* Fixed a case where long running background work was blocking in-memory garbage collection of database metadata.
* Fixed a memory allocation bug during query compilation.
* Limited the number of retries on plan compilation errors; this fix limits resource usage.
* Fixed a deadlock in result table creation during reshuffle with the always-false filter.
* Fixed a crash when a `BM25` function in a subselect referenced a table in the outer select.
* Fixed a crash during replay when a table uses an FTS index with JSON options.
* Fixed a potential replay failure on a table that uses full-text search version 2.
* Fixed how `JSON_PRETTY` builtin function escapes characters.
* Fixed a bug that caused `JSON_TO_ARRAY` join queries to return wrong results where the quotes on strings were removed incorrectly.
* Fixed using delimited batch sets with JSON format.
* Fixed performance regression for queries involving JSON string extraction (e.g. `JSON_EXTRACT_STRING` and `JSON_ARRAY_CONTAINS_STRING`) in situations where there are a large number of JSON values.
* Fixed incorrect aggregation of leaf query stats in Query\_completion tracing.
* Fixed an issue that caused an error if column names had trailing spaces in `CREATE PIPELINE` statements.
* Fixed an issue where monitoring pipelines would sometimes fail to produce data for large source clusters.
* Fixed a wrong result in `ORDER BY <sort key> LIMIT` query that skipped rows with NULL values in the sort key.
* Added support for the `IF NOT EXISTS` clause to the `CREATE VIEW` command.
* Added support for table-level collations.
* Improved optimization speed of parameterized `IN`-lists by limiting traversal depth.
* `OPTIMIZE TABLE ... INDEX` is now more responsive to `KILL QUERY` statements.
* Enabled using the estimated table row count as default column cardinality for better join estimation.
* Added support for PSQL ARRAY type arguments to the `TO_JSON` built-in function.
* Removed the `CAST` operator if a redundant cast is performed.
* Improved error handling for regular expressions: errors are now properly raised instead of returning SQL NULL. To avoid breaking existing apps the `regexp_error_handling_level` engine variable was added. This variable controls the behavior of error handling for regexp operations.
* Fixed an issue where concurrent DDL and `PROMOTE AGGREGATOR TO MASTER` statements were not forwarded to the Master Aggregator.
* Fixed the projection DDL output in the debug profile.
* Fixed an error named `ER_BAD_TABLE_ERROR` on `UPDATE` or `DELETE` queries with a specific shape.
* Fixed an issue in CTE query rewrites caused when a CTE referenced a recursive CTE.
* Fixed the predicate pushdown logic for materialized common table expressions.
* Fixed query performance issue caused by heuristic estimate selectivity being overwritten.
* Fixed row count estimation for union subquery containing Materialized Common Table Expression (MCTE)s.
* Resolved an issue where the regular expression engine would return SQL NULL when hitting the memory limit during execution. It now raises an appropriate error instead.
* Fixed resource pool and workload management CPU limiting.
* Fixed a locking bug related to table module eviction during recovery.
* Fixed a deadlock in a rare scenario related to low memory conditions.
* Fixed a rare race condition which caused a node to get stuck in offline mode after recovery.
* Fixed an issue that led to undefined behavior if a node failed concurrently with the computation of the replication distribution tree.
* Fixed a race condition that caused autostats file leak while reprovisioning.
* Fixed incorrect autostats in a rare failover case during asynchronous replication.
* Fixed a race condition in autostats between table refresh and table deletion.
* Fixed a race condition that could cause shutdown to hang.
* Fixed a rare crash in synchronized variables initialization.
* Fixed a bug in the deadlock avoidance algorithm that could lead to deadlocks.
* Fixed a bug that caused nodes to crash when `ALTER TABLE` queries ignored foreign keys.
* Fixed a rare deadlock related to temporary tables.
* Fixed a crash in `SHOW PROCESSLIST` in a rare race condition scenario.
* Fixed a bug in CTE rewrites.
* Fixed a leak in a rare scenario.
* Fixed a bug in parser.
* Fixed a crash in a shallow copy of a table with a pending ALTER operation.
* Fixed an issue where IN-list factorization did not work with newline characters around the IN-list.
* Fixed an issue where periodic autostats was disabled when it should not have been.
* Fixed a crash in lockfree hashtable when the engine is under high memory pressure. Reports an "out of memory" error instead.
* Fixed a bug in lateral join.
* Updated third party libraries to fix security vulnerabilities.
* Increased the \_bt timeout from 60 seconds to 180 seconds.
* Implemented shallow copy of a table with a dropped index, the shallow copy now includes the in-memory segment.
* Fixed incorrect aggregation of leaf query stats in Query\_completion tracing.
* Fixed an issue where certain commands (e.g. DROP TABLE) could hang due to aborted queries caused by stuck collocated services triggered by external functions.
* Fixed a bug in the detection of shard key matches in the window function partition by list.
* Fixed an error in backup subprocess and enhanced subprocess tracing to use structured logging.

## Release Log

## 2026-06-10 Version 9.0.33

## Enhancements

* Improved Kafka pipelines caching to use a per-partition, per-pipeline scope. This reduces resource contention across pipelines.
* Added support for tracing DDL activity, allowing users to audit recent DDL statements across the cluster via Query History and the `MV_TRACE_EVENTS` information schema view. Refer to [Query History](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/query-history.md) for more information.
* Improved `IN`-subselect rewrite handling by not adding `ISNULL()` checks for non-nullable columns.

## Bug Fixes

* Fixed a crash that occurred when a subselect is used in the `WHERE` predicate of a `LOAD DATA` query.
* Fixed a crash when writing to a view if the column names are cased differently from the column name in the view definition.
* For invalid, NULL, or empty UDF names, DML queries are now routed to the default resource pool.
* Fixed incorrect results for correlated `EXISTS` subqueries that contain `TABLE(SPLIT)`.
* Updated third-party dependencies to address multiple Common Vulnerabilities and Exposures (CVEs), including fixes for the Go standard library, Netty, Python 3, glibc, OpenSSL, Kerberos, systemd, Apache Commons Configuration, and Apache Thrift.

## 2026-05-12 Version 9.0.32

## Bug Fixes

* Fixed a bug that may lead to a crash or undefined behavior during query execution.
* Fixed a bug that may cause asynchronous LLVM compilation to fail.
* Fixed a bug that prevented the table creator from querying it.
* Fixed an overflow issue in materialized views that occured when computing `AVG` aggregates on `DECIMAL` values.
* Fixed a bug in materialized views that caused incorrect aggregation of `FLOAT` and `DOUBLE` type columns.
* Fixed a bug in materialized views with the `DIV` operator in the view definition.

## 2026-05-06 Version 9.0.31

## Enhancements

* Improved query plan printing efficiency, lowering query compilation overhead.

## Bug Fixes

* Fixed a bug that potentially caused queries using the `BM25_GLOBAL()` function Global Full-Text statistics.
* Updated to Temurin OpenJDK 11 JRE 11.0.31+11 to fix CVEs in OpenJDK.

## 2026-04-28 Version 9.0.30

## Enhancements

* Log detailed, step-by-step timings for each operation within `BATCH_PARTITION_TIME`. This behavior is enabled with the `pipelines_extractor_debug_logging` engine variable.
* Update Golang to version 1.26.2.

## Bug Fixes

* Prevent messages with multiple nested "Leaf Error"s. Added the `allow_nested_leaf_errors` engine variable which disables the new behavior and reverts to prior behavior allowing nested "Leaf Error" messages.
* Fix CVE vulnerabilities in Java third-party packages.

## 2026-04-15 Version 9.0.28

## Enhancements

* Added proper refresh handling for STS tokens during long-running operations.
* Allowed Out-of-Memory (OOM) threads to exit early when waiting for the garbage collection mechanism to provide memory buffers.
* Added the ability for an optimizer rewrite to merge a derived table with subselects; unwrapping a derived table with subselects is now configurable.

## Bug Fixes

* Fixed a bug where an optimization on `GROUP BY` fields was incorrectly applied when grouping by a typecast expression.
* Improved optimizer handling of Out-of-Memory (OOM) conditions.

## 2026-04-08 Version 9.0.27

> **📝 Note**: SingleStore versions 9.0.22, 9.0.23, and 9.0.24 have been deprecated due to an issue with `JSON_EXTRACT_BIGINT`. Refer to the Known Issues section in each version's release notes for more information. If you are currently running any of these versions, SingleStore recommends upgrading to version 9.0.27 or later.

## Enhancements

* Upgraded librdkafka to version 2.13.2.
* Improved join selectivity estimation for predicates of the form `col1 = IFNULL(col2, col3)` by leveraging column cardinality statistics.
* Added the ability to avoid group by placement rewrites when grouped tables have no join predicates, improving query plan stability for multi-table aggregates.

## Bugfixes

* Reverted a change to the `JSON_EXTRACT_BIGINT` function that could cause incorrect results or system crashes. 
* Allowed Out-of-Memory (OOM) threads to exit early when waiting for the garbage collection mechanism to provide memory buffers.
* Fixed a filesystem (FS) pipeline error that occurred when files were deleted while the pipeline was still running.
* Fixed an issue where query-time variables (QTVs) referenced in common table expressions (CTEs) caused a "no such table" error.
* Fixed a nullability issue in result table columns of an outer join that may lead to a leaf crash.
* Fixed an issue where the `PIPELINES_ICEBERG_FILES` view crashed if pre-upgrade partitions were present in the metadata.

## 2026-03-24 Version 9.0.24

**Note:** This version has been deprecated due to an issue with `JSON_EXTRACT_BIGINT`. Refer to Known Issues for more information. For clusters running this version, SingleStore recommends upgrading to version 9.0.27 or later.

## Enhancements

* Added support for `DROP MATERIALIZED VIEW`.
* Added support for the `IF EXISTS` option in the `DROP PROJECTION` command.

## Bug Fixes

* Fixed a correctness bug in Materialized Views with time-related types.
* Fixed an issue that caused duplicate repartition on join between derived table and reference table.
* Fixed an issue where `SHOW GRANTS` no longer displayed `REQUIRE SSL` status after upgrade.
* Fixed an issue where the `ADD AGGREGATOR` command failed for node IDs greater than 16384.

## Known Issues

* Queries using the `JSON_EXTRACT_BIGINT` function may cause incorrect results or system crashes. If your workload uses `JSON_EXTRACT_BIGINT`, do not upgrade to this version. If you have already upgraded to this version, upgrade to 9.0.27, which contains a fix.

  Workloads that do not use `JSON_EXTRACT_BIGINT` are not affected. The issue is triggered by the use of `JSON_EXTRACT_BIGINT` in `GROUP BY`, aggregation, and `WHERE` expressions on columnstore tables, especially with JSON booleans. As a workaround, change `JSON_EXTRACT_BIGINT(<column>, <field>)` to `JSON_EXTRACT_JSON(<column>, <field>) :> BIGINT` or `JSON_EXTRACT_JSON(<column>, <field>) = ‘true’` to avoid the problem.

## 2026-03-10 Version 9.0.23

**Note:** This version has been deprecated due to an issue with `JSON_EXTRACT_BIGINT`. Refer to Known Issues for more information. For clusters running this version, SingleStore recommends upgrading to version 9.0.27 or later.

## Enhancements

* Extended the range of values for the `row_count` hint to allow values up to the maximum float value.
* Added engine variable `skip_sharding_warmup_query`. This variable disables sending single-partition queries to all leaves to warmup.

## Bugfixes

* Fixed vulnerabilities in aircompressor, jackson-core, and avro.

## Known Issues

* Queries using the `JSON_EXTRACT_BIGINT` function may cause incorrect results or system crashes. If your workload uses `JSON_EXTRACT_BIGINT`, do not upgrade to this version. If you have already upgraded to this version, upgrade to 9.0.27, which contains a fix.

  Workloads that do not use `JSON_EXTRACT_BIGINT` are not affected. The issue is triggered by the use of `JSON_EXTRACT_BIGINT` in `GROUP BY`, aggregation, and `WHERE` expressions on columnstore tables, especially with JSON booleans. As a workaround, change `JSON_EXTRACT_BIGINT(<column>, <field>)` to `JSON_EXTRACT_JSON(<column>, <field>) :> BIGINT` or `JSON_EXTRACT_JSON(<column>, <field>) = ‘true’` to avoid the problem.

## 2026-03-05 Version 9.0.22

**Note:** This version has been deprecated due to an issue with `JSON_EXTRACT_BIGINT`. Refer to Known Issues for more information. For clusters running this version, SingleStore recommends upgrading to version 9.0.27 or later.

## Enhancements

* Added `SNAPSHOT_ID` and `SNAPSHOT_TIMESTAMP` to `PIPELINES_ICEBERG_FILES` information schema view.
* Updated the `MV_COLUMNAR_SEGMENT_INDEX` information schema view to return the correct `INDEX_NAME` for multi-value hash indexes on JSON/BSON columns enabling accurate per-index size reporting.
* Added column `ACTIVITY_TRACKING_ID` in the `MV_ACTIVITIES`, `MV_ACTIVITIES_CUMULATIVE`, `MV_ACTIVITIES_EXTENDED`, and `MV_ACTIVITIES_EXTENDED_CUMULATIVE` information schema views.
* Updated the `KILLED_QUERIES` counter in Resource Governor pools to include queries terminated due to exceeding `QUERY_MEMORY_PERCENTAGE`.
* Improved performance of queries on `information_schema.MV_CLUSTER_STATUS` through RPC parallelization.
* Improved `JSON_EXTRACT_BIGINT` performance by performing encoding-level extraction instead of full JSON decoding.
* Updated materialized views to use `GROUP BY` columns as the default shard key when no shard key is specified.
* Improved CDC pipeline error reporting. Multiple parsing errors now display detailed messages, including the associated DDL statement.

## Bug Fixes

* Fixed an issue where the system allowed creation of semantically identical multi-value indexes on the same column or JSON path.
* Fixed an issue where `json_collation` was not synchronized with `character_set_server` after upgrading from version 8.5 or earlier to version 8.7 or later.
* Removed password validation for `ALTER USER` statements that do not modify the password.
* Fixed an issue where security built-in functions like `CURRENT_SECURITY_ROLES()` and `CURRENT_SECURITY_GROUPS()` returned incorrect results when used within a `CREATE TABLE AS SELECT` (CTAS) statement .
* Fixed missing value for `Type` column in `information_schema.USERS` view.
* Fixed a crash where one process queried the `MV_PROCESSLIST` view while another updated the status being collected.

## Known Issues

* In this release, existing Iceberg pipelines created before the upgrade may cause queries against the `PIPELINES_ICEBERG_FILES` information schema view to fail. To avoid this issue, stop, drop, re-create, and restart any Iceberg pipelines that were created prior to the upgrade.
* Queries using the `JSON_EXTRACT_BIGINT` function may cause incorrect results or system crashes. If your workload uses `JSON_EXTRACT_BIGINT`, do not upgrade to this version. If you have already upgraded to this version, upgrade to 9.0.27, which contains a fix.

  Workloads that do not use `JSON_EXTRACT_BIGINT` are not affected. The issue is triggered by the use of `JSON_EXTRACT_BIGINT` in `GROUP BY`, aggregation, and `WHERE` expressions on columnstore tables, especially with JSON booleans. As a workaround, change `JSON_EXTRACT_BIGINT(<column>, <field>)` to `JSON_EXTRACT_JSON(<column>, <field>) :> BIGINT` or `JSON_EXTRACT_JSON(<column>, <field>) = ‘true’` to avoid the problem.

## 2026-02-02 Version 9.0.19

## Enhancements

* Result tables now explicitly set table-level collation.

## Bug Fixes

* Fixed a crash that occurred when using `PERCENTILE_CONT()` with a constant `ORDER BY` clause.

## 2026-01-21 Version 9.0.18

## Enhancements

* Backfilled index type and index size of vector index metadata during information schema queries.
* Introduced background IO submission thread for sync durability and batching multiple IO requests.
* Disabled prewritten ingest transformations by default.

## 2026-01-12 Version 9.0.17

## Enhancements

* Added support for an alter node port.
* Extended the `TABLE()` function to have an ordinality column when used with `WITH ORDINALITY` clause.
* Added new column `INDEX_NAME` to the `VECTOR_INDEX` information schema view.

## Bug Fixes

* Fixed a crash when pipelines insert data into writable views.
* Fixed a bug that caused stack overflow errors when executing complex queries with multiple joins in `compile_lite` and `compile_lite_first` interpreter mode.
* Fixed an internal query conversion issue that caused a mismatch in vector join decisions between the aggregator and leaf nodes.
* Updated Golang dependencies to address known Common Vulnerabilities and Exposures (CVEs) in container images and related components.
* Fixed double accounting of memory via buffer allocators (`Alloc_spill`, `Alloc_arena`). Now, if memory is used from cache memory, total server memory remains unused.
* Fixed a bug that caused a crash when a built-in Table-Valued Function (TVF) table is joined with a table with a join condition involving `JSON_ARRAY_CONTAINS_<type>`.

## 2025-12-17 Version 9.0.16

## Enhancements

* Added the `FUNCTION_NAME` column to the `MV_PROCESSLIST` information schema view. When a query is invoked from a stored procedure, this column will display the stored procedure name.

## Bug Fixes

* Fixed a bug in parsing when `LATERAL JOIN` is used with a Table-Valued Function (TVF) with a recursive Common Table Expression (CTE).

## 2025-12-09 Version 9.0.15

## Enhancements

* Added support for vended credentials in Iceberg pipelines with S3 storage.
* Added display of original line number when re-raising exceptions with `RAISE` statement in stored procedures.
* Disabled `critical_diagnostics` by default.
* Engine now displays NULL for vector index size and type for vector indexes created in versions older than 9.0.

## Bug Fixes

* Fixed an issue in stored procedures where the callstack is incomplete for nested `RAISE` statements and only displays the last frame instead of all the `RAISE` statement frames.
* Fixed a Common Table Expression (CTE) preprocessing bug involving nested CTEs within `INTERSECT` and `EXCEPT` queries.
* Fixed the affected row count for `SELECT .. FROM .. into FS/S3 ...` queries when row count is greater than 32-bit integer limits.
* Fixed a stack corruption bug exposed in very large queries.
* Fixed an issue where memory allocated during the spilling phase was not following resource governor memory limits.

## 2025-11-25 Version 9.0.14

## Bug Fixes

* Resolved a crash that could occur when reading the `VECTOR_INDEX` information schema view.

## 2025-11-19 Version 9.0.13

## Enhancements

* Added the ability to skip heuristic checks when using projection for JSON documents for `ORDER BY` self join rewrites.
* Added support for increasing the length of variable-length string type columns using `ALTER TABLE MODIFY COLUMN` on columnstore tables.
* Allowed users that do not require X509 (mTLS) to connect regardless of the `ssl_ca_for_client_cert` value and presence of the file it points to (if set).
* Updated vector index and search to use internal memory allocator instead of malloc.

## Bug Fixes

* Fixed an issue with lateral join.
* Fixed vulnerabilities in Netty and OpenJDK CVEs.
* Fixed charset UI to show `*_bin` as default collation rather than `*_general_ci`.
* Fixed an issue in `ORDER BY` self-join rewrite.

## 2025-11-04 Version 9.0.12

## Enhancements

* Added an optimizer rewrite to push `LIMIT`s below external User Defined Functions (UDFs). This optimization can be turned off with the engine variable: `optimizer_disable_limit_pushdown_below_external_udf`.
* Added a check to `CREATE` or `ALTER USER` that verifies that the Subject in the client certificate provided during a mutual Transport Layer Security (mTLS) connection matches the subject specified in the `REQUIRE SUBJECT` clause.

## Bug Fixes

* Fixed Transport Layer Security (TLS) connectivity issue when using .NET connection pool.
* Fixed an issue with JSON attribute validation for mutual Transport Layer Security (mTLS) in `ALTER USER`.

## 2025-10-28 Version 9.0.11

## Enhancements

* Added support for `COUNT()` in aggregated views.
* Enabled the use of column names from the base table for materialized view column names.
* Limited the vector index cache size to keep it from getting to close to the maximum server memory.
* Added the TLS cipher and application name to the auditlog.
* Improved phonehome security by adding remote endpoint verification.
* Upgraded the Almalinux version to Almalinux 10.
* Added `ssl_system_capath` engine variable that defines the system path to the certificate directory.

## Bug Fixes

* Disabled the optimize JSON computed column feature.
* Fixed an aggregated view crash caused by aliases.
* Fixed an issue where unsuccessful distributed transactions could lead to increased memory usage on aggregators.
* Fixed `RESTORE DATABASE` in highly-available master aggregator deployments.
* Fixed an issue where `information_schema.MV_CLUSTER_STATUS` queries would be recursively forwarded to the master aggregator.
* Updated the zookeeper version.
* Resolved a crash that could occur when a `TABLE(<constant>)` function appeared inside a subquery that was part of an `OR` or `AND` condition (for example nested `IN` and `EXISTS` clauses).

## 2025-10-15 Version 9.0.10

## Enhancements

* Added collection of enhanced query stats from kill query Recursive Common Table Expressions (RCTE) writer statistics and sorted iterator error cases.
* Added Unix timestamp versions of `start_time` and `event_time` fields in event trace samples exposed by monitoring exporter.
* Added option to merge credentials with external secret storage.
* Made Resource Governance aware of cgroup limits in Kubernetes clusters. The minimum of host cores and cgroup cores is now used as the CPU limit for governing resource pools.
* Modified ingestion to skip `NULL` records while using `SKIP ALL ERRORS` and `SKIP PARSER ERRORS` in kafka pipelines.
* Added a new `BLOB_COMPUTE_ID` column for `COLUMNAR_SEGMENTS` and `MV_COLUMSTORE_FILES` information schema views.
* Added a new column `MEMORY_USAGE_BYTES` to `LMV_RESOURCE_POOL_STATUS` and `MV_RESOURCE_POOL_STATUS` information schema views.

## Bug Fixes

* Fixed incorrect aggregation of leaf query stats in Query\_completion tracing.
* Fixed results for `NOT IN` subselects when the left input table has NULL values.
* Fixed a bug with some `NOT IN` subselect query shapes.
* Fixed logic for `NOT IN` subselects when nested under `OR`s.
* Fixed an issue that caused a stalled cluster in the presence of many concurrent `DROP TEMPORARY TABLE` commands.
* Fixed memory tracking for some queries which were not being tracked properly, result tables to be specific.
* Fix correctness when using `NOT IN` for some query shapes.

* *Release Candidates*

  > **📝 Note**: The following release candidates have been deprecated with the release of SingleStore v9.0.9. These release candidates can no longer be used for deployments or upgrades.For production deployments, use SingleStore v9.0.9 and later.The following enhancements and bug fixes are also reflected in SingleStore v9.0.9.## 2025-09-18 Version 9.0.8 RC- **Enhancement**: Enabled using the estimated table row count as default column cardinality for better join estimation. Added session variable `optimizer_max_table_row_count_as_default_cardinality` which controls the maximum estimated table row count to be used as the per column cardinality.
  - **Enhancement**: Added support for PSQL `ARRAY` type arguments to the `TO_JSON` built-in function.
  - **Enhancement**: Removed the `CAST` operator if a redundant cast is performed.
  - **Enhancement**: Added a `suppress_dml_warnings` global engine variable to suppress all DML query warnings.
  - **Enhancement**: Added `ATTACH DATABASE`, `DETACH DATABASE`, `CREATE DATABASE`, and `DROP DATABASE` to `information_schema.MV_EVENTS`.
  - **Enhancement**: Added the `managed_functions_max_connections` engine variable which specifies the maximum number of HTTP connections per node for managed external functions, such as Python User Defined Function (UDF)s.
  - **Bugfix**: Fixed a bug in the detection of shard key matches in the window function partition by list.
  - **Bugfix**: Fixed using delimited batch sets with JSON format.
  - **Bugfix**: Fixed an error in backup subprocess and enhanced subprocess tracing to use structured logging.
  - **Bugfix**: Fixed performance regression for queries involving JSON (like `JSON_EXTRACT_<type>` builtins).## 2025-08-20 Version 9.0.7 RC- **Enhancement**: Changed the approach for delimited batch sets. Delimited batch sets now return and accept original rowIDs.
  - **Enhancement**: Improved performance of full-text index.
  - **Enhancement**: Added support for metadata garbage collection for Azure pipelines.
  - **Enhancement**: Improved error handling for regular expressions: errors are now properly raised instead of returning SQL `NULL`. To avoid breaking existing apps the `regexp_error_handling_level` engine variable was added. This variable controls the behaviour of error handling for regexp operations.
  - **Enhancement**: Added a new engine variable, `ssl_ca_for_client_cert`, for client certification.
  - **Enhancement**: Added knob to disable cardinality estimates on JSON/BSON columns during analyze.
  - **Enhancement**: Added the `MV_ACTIVE_METADATA_VERSIONS` information schema view that provides visbiility into active metadata transaction read versions.
  - **Enhancement**: Added the `MV_GC_EVENTS` information schema view that provides visibility into garbage collection passes. This view is gated behind the preview feature and engine variable `enable_gc_events`.
  - **Bugfix**: Fixed query performance issue caused by heuristic estimate selectivity being overwritten.
  - **Bugfix**: Fixed an issue where monitoring pipelines would sometimes fail to produce data for large source clusters.
  - **Bugfix**: Fixed row count estimation for union subquery containing Materialized Common Table Expression(MCTE)s.
  - **Bugfix**: Updated third party libraries to fix security vulnerabilities.
  - **Bugfix**: Bumped the \_bt timeout from 60 seconds to 180 seconds.
  - **Bugfix**: Fixed incorrect aggregation of leaf query stats in Query\_completion tracing.
  - **Bugfix**: Fixed an issue where certain commands (e.g. `DROP TABLE`) could hang due to aborted queries caused by stuck collocated services triggered by external functions.
  - **Bugfix**: Resolved an issue where the regular expression engine would return SQL `NULL` when hitting the memory limit during execution. It now raises an appropriate error instead.
  - **Bugfix**: Implemented shallow copy of a table with a dropped index, the shallow copy now includes the in-memory segment.## 2025-06-24 Version 9.0.6 RC- **Enhancement**: Enabled synchronous Distributed Plancache lookup during query execution.
  - **Enhancement**: Added Lucene logs to the cluster report.
  - **Enhancement**: Added statistics related to AWS S3 lookup latency.
  - **Bugfix**: Prevented the drop of Distributed Plancache files on regular Persistent Plancache GC.
  - **Bugfix**: Fixed a bug in lateral join.## 2025-06-18 Version 9.0.5 RC- **Enhancement**: Distributed Plancache pool size adjustment fails gracefully.
  - **Enhancement**: Changed the default collation from `utf8mb4_general_ci` to `utf8mb4_bin`.
  - **Bugfix**: Fixed an issue where periodic autostats was disabled when it should not have been.
  - **Bugfix**: Fixed a crash in lockfree hashtable when the engine is under high memory pressure. Reports an "out of memory" error instead.
  - **Bugfix**: Fixed an issue in CTE query rewrites caused when a CTE referenced a recursive CTE.
  - **Bugfix**: Fixed the predicate pushdown logic for materialized common table expressions.## 2025-06-13 Version 9.0.4 RC- **Enhancement:** Added the `SEQUENCE` modifier for `AUTO_INCREMENT`. Refer to [AUTO\_INCREMENT AS SEQUENCE](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-definition-language-ddl/create-table/#section-idm234966854099799.md) for more information.## 2025-06-12 Version 9.0.3 RC- **Enhancement**: Added support for file filtering based on the `WHERE` clause in the pipeline declaration. For more details, refer to [Iceberg Ingest](https://docs.singlestore.com/db/v9.1/load-data/data-sources/iceberg-ingest.md).
  - **Bugfix**: Fixed an error named `ER_BAD_TABLE_ERROR` on `UPDATE` or `DELETE` queries with a specific shape.

***

Modified at: June 12, 2026

Source: [/db/v9.1/release-notes/singlestore-memsql/9-0-release-notes/](https://docs.singlestore.com/db/v9.1/release-notes/singlestore-memsql/9-0-release-notes/)

(An index of the documentation is available at /llms.txt)
