9.0 Release Notes

Warning

SingleStore 9.0 gives you the opportunity to preview, evaluate, and provide feedback on new and upcoming features prior to their general availability. In the interim, SingleStore 8.9 is recommended for production workloads, which can later be upgraded to SingleStore 9.0.

Release Log

Engine

Bottomless Plancache

The Bottomless Plancache (BPC) adds a third layer to the plancache, supplementing the existing in-memory plancache and on-disk persistent plancache (PPC).  The BPC allows cluster nodes to share plans. Nodes newly added to the cluster will start with a warm plancache instead of building one from scratch. The BPC 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.

Information Schema Views

This update adds the following information schema views and columns:

  • Added the MV_COLUMNSTORE_ACTIVE_MERGE_PLANS and LMV_COLUMNSTORE_ACTIVE_MERGE_PLANS information schema views that show internal details on currently running merge plans.

  • Added the MV_TABLE_COUNTERS and LMV_TABLE_COUNTERS information schema views which show cumulative per-table metrics, i.e., the amount of work performed by the background merger.

  • Added the UPLOAD_BLOB_LEAD_PAGES column to the MV_BOTTOMLESS_SUMMARY information schema view that ensures that uploading log chunks to the remote storage does not keep falling behind.

  • Added the VECTOR_INDEX information schema view which shows the amount of memory and disk used by each vector index.

  • Added more metrics to the MV_CLOUD_PER_COMPUTE_REMOTE_STATS and MV_CLOUD_PER_STORAGE_REMOTE_STATS information schema views for tracking retention log chunks and snapshots.

General

This update introduces a range of improvements and fixes for system performance, reliability, and operational flexibility. These changes collectively enhance manageability, resource control, and system robustness.

Enhancements

  • Added the disk_plan_gc_pause_minutes_for_detached_tables engine variable that specifies the number of seconds to cache detached table modules before eviction from disk.

  • 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 disk size, changed the default blob cache size to 75% of the disk.

  • Connected the distributed plancache to the plancache manager.

  • Disabled unnecessary collection of block statistics.

  • Added functionality to periodically output MV_PROCESSLIST from Bottle Service to improve debugging.

  • Implemented exponential backoff sleep between batch retries.

  • Added support for heartbeat for bottle service while creating a bottle service link.

  • 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.

  • SingleStore 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) for more information.

  • Extended redundant GROUP BY detection to outer join predicates.

  • Added the info_schema_show_null_dbs engine variable that allows non-privileged users to view the rows in *_BOTTOMLESS_* information schema views where associated database name is NULL.

  • 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.

  • The bottomless_plancache_worker_threads engine variable can now be configured at runtime.

  • 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.

  • Added the disk_plan_gc_pause_seconds_on_startup engine variable that disables disk plan garbage collection on startup. This variable prevents hot plans from being unintentionally disk garbage collected.

  • Computed column definitions now support the SPLIT function.

  • Added the scheduler_slow_threshold_seconds engine variable that specifies the threshold for triggering the verbose logging of scheduler thread timing.

  • 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 the following engine variables:

    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.

Bugfixes

  • 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.

Recent changes include several enhancements and bug fixes for Full-Text Search (FTS) and vector indexes. These changes improve query performance, system stability, and transparency in index operations.

Full-Text

Enhancements

  • Added full-text pushdown optimization that works with any filter in the WHERE clause.

  • Added a new metadata table to track FTS indexes eligible for merging.

  • Added support for stopword token_filter for custom analyzers for full-text version 2.

  • Added new nori (Korean) analyzer customizations for full-text version 2.

  • Added Korean language analyzer for full-text version 2.

Bugfixes

  • 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 version 2.

Vector

Enhancements

  • Added the VECTOR_INDEX information schema view which shows the amount of memory and disk used by each vector index.

  • Added a fall back 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 fall back 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 for details.

Ingest

Pipelines

Enhancements

  • Added support for the PIPELINE <pipeline_name> clause to the SHOW PROFILE command which allows you to view profile information for the specified pipeline.

  • Added a HEADER DETECTION ON/OFF clause to control inference from CSV files. For more information, refer to Schema and Pipeline Inference.

  • Added support for inferring Parquet files with the INFER PIPELINE command. For more information, refer to Schema and Pipeline Inference .

  • Added support for inferring Iceberg files with the INFER PIPELINE command. For more information, refer to Schema and Pipeline Inference.

  • 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 the CREATE_USER and ALTER_USER columns to the PIPELINES information schema view.

  • Added support to infer CSV files with a single column when the file contains no field terminators in any record.

Bugfixes

  • Fixed an issue that caused an error if column names had trailing spaces in CREATE PIPELINE statements.

Iceberg

Enhancements

  • Implemented support for automatically generated column mappings (for primitive data types and structures) as part of iceberg schema inference.

  • Added support for EKS IRSA with assumeRole for Iceberg pipeline authorization.

JSON

Enhancements

  • Introduced Multi-Value Hash Index 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 function.

  • Added support for JSON arrays in pipelines loading JSON files. Each JSON record in the array is loaded as a separate row.

Bugfixes

  • 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.

Observability

These updates enhance observability, resource tracking, auditing, and performance analysis.

Enhancements

  • 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.

Bugfixes

  • Fixed incorrect aggregation of leaf query stats in Query_completion tracing.

Query Execution

Enhancements

  • Added support for fully enclosed optimization on nullable columns and segment elimination on IS NULL filter.

  • 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.

  • Enabled the use of the MATCH_ANY tokenizer option with underscore in multi-value index settings.

  • Extended predicate pushdowns to identify more cases.

  • Extended rewrite for EXISTS subselects to handle arbitrarily nested EXISTS subselects under AND or OR.

  • 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.

Bugfixes

  • 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.

Security

Enhancements

  • Enabled mutual authentication between the client and server in the memsqld engine.

  • 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.

Last modified: June 6, 2025

Was this article helpful?

Verification instructions

Note: You must install cosign to verify the authenticity of the SingleStore file.

Use the following steps to verify the authenticity of singlestoredb-server, singlestoredb-toolbox, singlestoredb-studio, and singlestore-client SingleStore files that have been downloaded.

You may perform the following steps on any computer that can run cosign, such as the main deployment host of the cluster.

  1. (Optional) Run the following command to view the associated signature files.

    curl undefined
  2. Download the signature file from the SingleStore release server.

    • Option 1: Click the Download Signature button next to the SingleStore file.

    • Option 2: Copy and paste the following URL into the address bar of your browser and save the signature file.

    • Option 3: Run the following command to download the signature file.

      curl -O undefined
  3. After the signature file has been downloaded, run the following command to verify the authenticity of the SingleStore file.

    echo -n undefined |
    cosign verify-blob --certificate-oidc-issuer https://oidc.eks.us-east-1.amazonaws.com/id/CCDCDBA1379A5596AB5B2E46DCA385BC \
    --certificate-identity https://kubernetes.io/namespaces/freya-production/serviceaccounts/job-worker \
    --bundle undefined \
    --new-bundle-format -
    Verified OK