# 9.1 Release Notes

## Release Highlights

Feature: **F16 Vectors** - Added support for float16 (16-bit) vectors. A new element type, F16, has been added to the [VECTOR type](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-types/vector-type.md) as well as support for [Approximate Nearest Neighbor (ANN) indexes](https://docs.singlestore.com/db/v9.1/reference/sql-reference/vector-functions/vector-indexing.md) on F16 vectors. Compared to F32 vectors, F16 vectors use approximately half the storage space of F32 vectors, while providing similar search performance (speed and recall) on machine learning use cases.

Feature: **Amazon Kinesis Pipelines** - Added support for Amazon Kinesis using the Kafka Connect extensibility framework.

Feature: **Mutual TLS** - Added support for mutual TLS (mTLS) enabling secure two-way authentication between SingleStore and Kafka brokers.

Feature: **UPDATE ... RETURNING** - Updates rows in a table and, in the same statement, returns a `SELECT`‑like result set containing all or specified columns from the updated rows. This avoids an extra `SELECT` and duplicate table scans, which improves performance and simplifies application logic. Refer to [UPDATE ... RETURNING](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-manipulation-language-dml/update-returning.md) page for more information.

Feature: **DELETE ... RETURNING** - Deletes rows from a table and simultaneously returns all or specified columns from the deleted rows in a single statement. Unlike a regular `DELETE`, where a separate `SELECT` within a transaction is required to see what was deleted; it uses a single statement and table scan, which improves performance and simplifies application logic. Refer to [DELETE ... RETURNING](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-manipulation-language-dml/delete-returning.md) page for more information.

Preview Feature: **Overloaded Functions and Stored Procedures** - Overloaded user-defined functions and stored procedures are now supported. Multiple functions (or stored procedures) that have the same name, but with different input arguments, can be created.

## Changes in Default Behavior

> **📝 Note**: These changes affect systems using Java-based features, including full-text search and CDC-in.

**New Java Path**: SingleStore is moving towards a universal Java path, and away from per-feature Java paths.

* A new global variable `java_path` has been introduced. The variable `fts2_java_path` is deprecated and is superseded by `java_path`.
* Additional per-feature Java path variables will be migrated to use `java_path` in the future.

**JRE 25 Requirement**: The required Java runtime version is updated to JRE 25.

**Upgrade Process**:

* Toolbox will attempt to install JRE 25 when upgrading to version 9.1. If the install succeeds, Toolbox will set `java_path` and update the other Java path variables. No additional actions are required.
* If the automatic installation of JRE fails, install JRE 25 manually and retry the upgrade.

## Enhancements

## Full-text Search

* Observability

  * Added the [SHOW FULLTEXT INDEX STATUS](https://docs.singlestore.com/db/v9.1/reference/sql-reference/show-commands/show-fulltext-index-status.md) command and the [MV\_FULLTEXT\_INDEX\_STATUS](https://docs.singlestore.com/db/v9.1/reference/information-schema-reference/query-performance-workload-management-and-statistics/mv-fulltext-index-status.md) information schema view that show partition-level information about the status of full-text indexes.
  * Added the [ANALYZE FULLTEXT](https://docs.singlestore.com/db/v9.1/reference/sql-reference/full-text-search-functions/analyze-fulltext.md) command that displays tokens that would be generated by a Lucene analyzer for a specified string.
* Performance

  * Added a full-text index merger which combines per-segment full-text indexes to create a cross-segment full-text index which improves the performance of full-text search queries by reducing the number of indexes that must be examined.

## Iceberg

* Added Hive and REST catalog support for Iceberg external tables.

## JSON

* Added support for JSON extract shorthand operators (`::`, `::%`, and `::$`) to the result of UDFs, which enables key-path access directly to UDF output, for example `udf('a')::key`.
* Performance improvements for certain queries that use JSON builtins for filtering.
* Added support for the JSON data type in external functions.

## Observability

* Full-text performance and observability were enhanced by the addition of the the [SHOW FULLTEXT INDEX STATUS](https://docs.singlestore.com/db/v9.1/reference/sql-reference/show-commands/show-fulltext-index-status.md) command, the [MV\_FULLTEXT\_INDEX\_STATUS](https://docs.singlestore.com/db/v9.1/reference/information-schema-reference/query-performance-workload-management-and-statistics/mv-fulltext-index-status.md) information schema view information schema view, and the [ANALYZE FULLTEXT](https://docs.singlestore.com/db/v9.1/reference/sql-reference/full-text-search-functions/analyze-fulltext.md) command.
* Improved Memory Observability: The new `MV_MEMORY_USAGE` information schema view provides users a simple way to obtain high level memory usage metrics and a practical way to identify the set of most significant memory consumers on the system. Refer to [Identifying and Reducing Memory Usage](https://docs.singlestore.com/db/v9.1/reference/troubleshooting-reference/identifying-and-reducing-memory-usage.md) for more information.
* 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.
* Enhanced logging for DPC operations.
* Added an in-memory cross query stats and sampling cache on aggregator nodes that reuses runtime rowcount statistics and sampling results across related queries to improve cardinality estimates and reduce optimization overhead; time-based invalidation and memory limits are controlled by engine variables.
* Added the `DROP ALL FROM cross_query_stats_cache,` `DROP SAMPLE FROM cross_query_stats_cache`, and `SHOW cross_query_stats_cache STATUS` commands to manage and monitor the cross query stats cache.

* Added statistics related to AWS S3 lookup latency.
* Added the TLS cipher and application name to the auditlog.
* Added collection of enhanced query stats from kill query Recursive Common Table Expressions (RCTE) writer statistics and sorted iterator error cases.

## Pipelines

* Added the `pipeline_source_metadata()` built-in function to expose source file metadata when loading data through pipelines.
* Introduced support for tracking pipeline vCPU and memory usage using the `activity_tracking_id` column.
* Enhanced S3 pipeline glob pattern support to include `?` (single-character match), `[abc]` (character set), `[a-z]` (character range), and `[^abc]` (negated set), in addition to the existing `*` wildcard.
* Added the `CONFIG` column to the output of `SHOW LINKS` and the `LINKS` information schema view to display connection link configurations in JSON format.
* Added `CREATE OR REPLACE LINK` syntax to update existing connection links without dropping and recreating pipelines.
* Added support for loading Parquet nested types (`LIST`, `MAP`, and `GROUP`) into JSON or BSON columns.
* Added support for the `OPTIONS 'compact'` parameter in `INFER PIPELINE` for Parquet files for loading Parquet groups and nested types (`LIST` and `MAP`).
* Improved error reporting for CDC pipelines with detailed messages on multiple parsing errors.
* Added support for skipping `NULL` records when using Kafka properties, skip all errors, or skip parser errors in the Kafka pipeline definition.
* Improved memory management for pipelines.
* Blocked non-CDC sources in `CREATE {TABLE|TABLES} AS INFER PIPELINE` queries.
* Added the filename to the error message returned by an `INFER PIPELINE` statement when an incorrect file format is detected.
* Locked down `ALTER PIPELINE` queries for `KAFKACONNECT` source.
* Long running batches no longer block `CREATE OR REPLACE PIPELINE` queries. If running, the current batch exits gracefully and the pipeline is replaced.
* Enabled support for ingestion of parquet repeated and grouped fields, such as lists, maps, or groups, as SingleStore JSON type.

* Added support for `SHOW PROFILE PIPELINE`.
* Added support for vended credentials in Iceberg pipelines with S3 storage.
* Added support for metadata garbage collection for Azure pipelines.

## Query Execution

* The [Distributed Plancache](https://docs.singlestore.com/db/v9.1/user-and-cluster-administration/maintain-your-cluster/managing-memory/distributed-plancache.md) (DPC) preview feature has been enhanced with a Plancache Manager (PCM) and asynchronous lookup in hot path execution. These features improve the DPC's usefulness in Fast Scale and Suspend & Resume.
* Added support for `DROP MATERIALIZED VIEW`.
* Added support for correlated `EXISTS` subqueries with `HAVING` clause on single aggregate.
* Added an `ALTER TABLE ... UNDO POPULATION` command that enables cancellation of an ongoing columnstore alter operation.
* Added the `ALTER LINK` command that enables updates to the `CONFIG` and `CREDENTIALS` clauses of an existing link.
* Added support for subselects and joins in a [writable view](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-definition-language-ddl/create-view/#section-id235461160410095.md) definition. Added support for writing to nested views.
* Updated the permissions required for querying writable views that contain joins.
* If a selectivity optimization source is normalization in an `EXPLAIN` or `PROFILE` query, the output now displays the source of normalization.
* Improved the query optimizer's handling of out-of-memory issues.
* Improved the performance of queries on `MV_CLUSTER_STATUS` information schema view.
* Added support for collecting target table DDL for `INSERT` queries in error reproduction.
* `KILLED_QUERIES` counter now includes queries killed due to exceeding `QUERY_MEMORY_PERCENTAGE`.
* Added support for `BEGIN`, `COMMIT`, and `ROLLBACK` statements in DML forwarding when performing writes to reference tables in multi-statement transactions.
* Added support for the `IF EXISTS` option in the `DROP PROJECTION` command.
* Extended the [TABLE()](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-manipulation-language-dml/table.md) function to have an ordinality column when used with `WITH ORDINALITY` clause.
* Added support for returning either all columns (`RETURNING *`) or a selected subset of columns in `UPDATE ... RETURNING`; stored procedures, CTEs, multi-table updates (joins/subselects), and column expressions are not supported in the `RETURNING` clause.
* Enhanced JSON handling to correctly process emoji and surrogate pair representations.
* Improved query performance by executing eligible operations directly on encoded columnstore data.
* `SHOW PROFILE PIPELINE` queries now support pipelines with a `.` in the pipeline name.
* Added the `REQUIRE SUBJECT` clause to the [CREATE USER](https://docs.singlestore.com/db/v9.1/reference/sql-reference/security-management-commands/create-user.md) command.

* Added the ability to skip heuristic checks when using projection for JSON documents for `ORDER BY` self join rewrites.
* Added support for an alter node port.
* Enabled the use of column names from the base table for materialized view column names.
* Enabled synchronous Distributed Plancache lookup during query execution.
* Enabled using estimated table row count as default column cardinality for better join estimation.
* Distributed Plancache pool size adjustment fails gracefully.
* Removed the `CAST` operator if a redundant cast is performed.
* Added support for increasing the length of variable-length string type columns using `ALTER TABLE MODIFY COLUMN` on columnstore tables.
* Added support for `COUNT()` in aggregated views.
* Added display of original line number when re-raising exceptions with `RAISE` statement in stored procedures.
* Added support for PSQL `ARRAY` type arguments to the `TO_JSON` built-in function.
* Disabled prewritten ingest transformations by default.
* Added an optimizer rewrite to push `LIMIT` below external User Defined Functions (UDFs). This optimization can be turned off with the `optimizer_disable_limit_pushdown_below_external_udf` engine variable.
* Improved `JSON_EXTRACT_BIGINT` performance by performing encoding-level extraction instead of full JSON decoding.
* Added functionality to copy the rowstore segment by default when a shallow copy of a table is created.
* Updated `character_set_client` to display the correct character set value in `SHOW CREATE` queries.

## Security

* Added support for mutual TLS (mTLS) authentication in Kafka pipelines that enables secure two-way authentication between SingleStore and Kafka brokers.

## Vector Search

* Added support for SIMD implementations of `DOT_PRODUCT` and `EUCLIDEAN_DISTANCE` builtins for the `VECTOR` `F16` type.
* Added compaction steps to FTS index merger.
* Added support for typecasts between `VECTOR` `F32` and `VECTOR` `F16` types.

* Added Lucene logs to the cluster report.
* Backfilled index type and index size of vector index metadata during information schema queries.
* Improved performance of full-text index.
* 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.
* Updated vector index and search to use internal memory allocator instead of malloc.

## General Updates

* Added support for displaying the collation for `JSON`, `ENUM`, or `SET` data types in information schema views.
* Engine gRPC calls to the plancache manager now include more information.
* For invalid, `NULL`, or empty UDF names, DML queries are now routed to the default pool.
* Made Resource Governance aware of cgroup CPU limits in Kubernetes clusters. The minimum of host cores and cgroup cores is now used as the CPU limit for governing resource pools.
* The engine now waits for the plancache manager during uploads.
* Added support for considering cgroup cores if they are less than host core count in the resource governor.
* Improved the error message returned when removing a leaf fails during rebalance.
* Setting a resource pool inside a stored procedure does not take effect immediately, and the change is applied only after the stored procedure finishes executing.
* Increased the maximum number of user-defined resource group pools to 50.
* New users created without an explicit resource pool are now automatically assigned the `default_pool` resource pool.
* Added information on bucket parameters to gRPC request to the plancache manager.
* Removed password validation for `ALTER USER` queries that do not modify the password.
* CPU resource governance now works for clusters of all sizes.
* If a shard key is not specified, it is added by default on the group by columns.
* 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).
* Added the ability to ignore join selectivity estimates of zero.

* Added charset validation for JSON type values in external functions.
* Changed the default collation from `utf8mb4_general_ci` to `utf8mb4_bin`.
* Delimited batch sets now return and accept original rowIDs.
* 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.
* Introduced background IO submission thread for sync durability and batching multiple IO requests.
* Result tables now explicitly set table-level collation.
* Upgraded the Almalinux version to Almalinux 10.
* Added option to merge credentials with external secret storage.
* Improved error handling for regular expressions; errors are now properly raised instead of returning SQL NULL.

## Engine Variables

This update adds the following new engine variables:

* `max_user_rg_pools`: Allows a user to create a maximum number of 50 resource pools from the default of 10. Refer to [Set Resource Limits](https://docs.singlestore.com/db/v9.1/user-and-cluster-administration/use-the-workload-manager-and-set-resource-limits/set-resource-limits.md).
* `remove_leaf_force_remove_online_leaf`: Controls the behavior of the `REMOVE LEAF ... FORCE` command when `leaf_failure_detection` is `OFF`. When enabled, the `REMOVE LEAF ... FORCE` command forcefully removes the target leaf node from the cluster even if it is online.

* `suppress_dml_warnings`: Suppresses all DML query warnings.
* `ssl_ca_for_client_cert`: Specifies the Certificate Authority (CA) to use for client certification.
* `regexp_error_handling_level`: Controls the behaviour of error handling for regular expression functions.
* Distributed Plan Cache: 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`.
* `enable_overloaded_functions`: Enables or disables the ability to overload functions and stored procedures.
* Added the following engine variables to control cross query stats and sampling cache: `cross_query_stats_collection_strategy`, `cross_query_stats_max_wait_ms`, `cross_query_stats_sampling_valid_time_min`, `cross_query_stats_expiration_minutes`, `cross_query_stats_max_mb`, `enable_cross_query_stats_store_query_text`, `enable_cross_query_stats_for_sampling`, `optimizer_use_cross_query_feedback_stats.`

Updates to existing engine variables:

* Increased the maximum value of `pipelines_max_concurrent` to `4096`.
* Updated the default value of `cardinality_threshold_for_join_split_rewrite` to `9223372036854775807` (LLONG\_MAX).

## Information Schema

This update adds the following information schema views and columns:

* `PIPELINES_SOURCE_OFFSETS`:Tracks source offset information for KafkaConnect pipelines in the new pipeline extensibility framework.
* `MV_SEQUENCES`: Displays status, statistics, and cache metrics for `AUTO_INCREMENT AS SEQUENCE` columns, including pre-fetch counts, cache misses, and owner leaf information for performance monitoring.

* `MV_ACTIVE_METADATA_VERSIONS`: Provides visibility into active metadata transaction read versions.
* `MV_GC_EVENTS`. Provides visibility into garbage collection passes. This view is gated behind the preview feature and engine variable enable\_gc\_events.
* Added `ATTACH DATABASE`, `DETACH DATABASE`, `CREATE DATABASE`, and `DROP DATABASE` to `MV_EVENTS` information schema view.
* Added the `INDEX_NAME` column to the `VECTOR_INDEX` information schema view.
* 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.
* Increased the `MV_BT` timeout from 60 seconds to 180 seconds.
* Added a new `BLOB_COMPUTE_ID` column for `COLUMNAR_SEGMENTS` and `MV_COLUMSTORE_FILES` information schema views.
* `source_type` is now included as part of the `config_json` in the `PIPELINES` information schema view.

* Added the `PLAN_SOURCE` column to the `PLANCACHE` information schema view that displays the source of a query plan.
* Added the `CONFIG` column to the `LINKS` information schema view to display connection link configurations in JSON format.
* Added the `ACTIVITY_TRACKING_ID` column the specifies the ID that can be used to identify the activities associated with a session to the `MV_ACTIVITIES`, `MV_ACTIVITIES_CUMULATIVE`, `MV_ACTIVITIES_EXTENDED`, and `MV_ACTIVITIES_EXTENDED_CUMLATIVE` information schema views.
* `CROSS_QUERY_STATS_CACHE`: Contains metadata about cross query stats cache entries for the connected aggregator, including hash keys, rowcounts, hit counts, and timing information.
* `MV_CROSS_QUERY_STATS_CACHE`: Managed view that aggregates cross query stats cache entries across all aggregators in the cluster, including node-level identifiers and cache metrics.

Updates to existing information schema views:

* Added information on projections to the `COLUMNAR_SEGMENTS`, `COLUMNS`, `MV_COLUMNAR_SEGMENT_INDEX`, `MV_COLUMNSTORE_FILES`, `TABLES`, `JSON_COLUMN_SCHEMA`, `MV_COLUMNSTORE_MERGE_STATUS`, `STATISTICS`, `TABLE_CONSTRAINTS`, and `OPTIMIZER_STATISTICS` information schema views.

## Bug Fixes

* Fixed a crash when `REDUCE()` contained `REDUCE_VALUE()` by disabling query rewrite.
* Fixed an issue where the security built-in functions like `CURRENT_SECURITY_ROLES()` and `CURRENT_SECURITY_GROUPS()` returned incorrect results when used within a `CREATE TABLE AS SELECT` statement.
* Fixed an issue where the `CHARACTER_SET_NAME` column displayed incorrect character set in information schema views.
* Fixed the row count for `SELECT INTO OUTFILE` queries with `LIMIT` or `OFFSET` clause.
* Fixed an issue where `SHOW ROLES` and `SHOW GROUPS` returned empty results for users who had the `SHOW METADATA` permission but not `GRANT`.
* Fixed a concurrency issue between the `CREATE DATABASE` command and automatic MA failover.
* Fixed a crash in specific `INTERSECT` or `EXCEPT` query shapes.
* Fixed an issue where `CREATE DATABASE` returned an error even if it succeeded when there is a concurrent MA failover.
* Fixed a bug in specific nested set operation query shapes.
* Fixed a crash when a query only contained aggregates in the `HAVING` clause for some query shapes.
* Fixed a crash that occurred when setting the `bottomless_plancache_worker_threads` engine variable during startup.
* Fixed incorrect lockout on `GROUP_CONCAT` function with `ORDER BY` clause for some query shapes.
* Fixed an issue with some query shapes where a lateral join is used in the same join block as a right join.
* Fixed a race condition between query plan dropping and plan execution.
* Fixed an unsafe asynchronous compile manager handle constructor signature.
* Fixed a bug in the DPC gRPC handler.
* Fixed an issue where creating a database with the same name as a recently dropped database fails following a MA failover, even if the command completes successfully.
* Fixed a crash when a scalar subselect was used exclusively in the `WHERE` clause when writing to a view.
* Fixed an issue with vending credentials in Iceberg pipelines.
* Fixed stack overflow issue in `compile_lite` and `compile_lite_first` interpreter modes.
* Fixed a potential null pointer dereference.
* Fixed a crash when dropping temporary tables.
* Fixed an issue with subselect to join and complex join query rewrites.
* Fixed an issue where FTS blobs were being incorrectly read from the blob cache during FTS index merging.
* Fixed a possible crash when `MV_BT` information schema view was called under heavy load scenarios.
* Fixed an issue where `LOAD DATA` errors did not show proper table names and skipped some errors.
* Fixed a bug to correctly lockdown query shapes containing a lateral join and table-valued function (TVF), which is not supported in SingleStore.
* Fixed an issue that included the cluster ID twice (duplication) in DPC object path.
* Fixed a crash during hot-path lookups.
* Fixed an issue with table counts in Feedback Reoptimization.
* Fixed the value of the `TYPE` column in the `USERS` information schema view.
* Prevented a system crash when collecting a process' status for `MV_PROCESSLIST` information schema view while the process is concurrently updating the same information.
* Fixed a TLS connectivity issue when using the .NET connection pool.
* Fixed an issue where the `ADD AGGREGATOR` command failed for node IDs greater than 16384.

***

Modified at: May 7, 2026

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

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