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.
On this page
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).
Information Schema Views
This update adds the following information schema views and columns:
-
Added the
MV_
andCOLUMNSTORE_ ACTIVE_ MERGE_ PLANS LMV_
information schema views that show internal details on currently running merge plans.COLUMNSTORE_ ACTIVE_ MERGE_ PLANS -
Added the
MV_
andTABLE_ COUNTERS LMV_
information schema views which show cumulative per-table metrics, i.TABLE_ COUNTERS e. , the amount of work performed by the background merger. -
Added the
UPLOAD_
column to theBLOB_ LEAD_ PAGES MV_
information schema view that ensures that uploading log chunks to the remote storage does not keep falling behind.BOTTOMLESS_ SUMMARY -
Added the
VECTOR_
information schema view which shows the amount of memory and disk used by each vector index.INDEX -
Added more metrics to the
MV_
andCLOUD_ PER_ COMPUTE_ REMOTE_ STATS MV_
information schema views for tracking retention log chunks and snapshots.CLOUD_ PER_ STORAGE_ REMOTE_ STATS
General
This update introduces a range of improvements and fixes for system performance, reliability, and operational flexibility.
Enhancements
-
Added the
disk_
engine variable that specifies the number of seconds to cache detached table modules before eviction from disk.plan_ gc_ pause_ minutes_ for_ detached_ tables -
Added events to indicate the start and end of asynchronous upgrades.
-
Added the
ENSURE_
clause to theONLINE_ NODES REBALANCE ALL DATABASES
andREBALANCE 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_
from Bottle Service to improve debugging.PROCESSLIST -
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_
engine variable that allows non-privileged users to view the rows inschema_ show_ null_ dbs *_
information schema views where associated database name isBOTTOMLESS_ * NULL
. -
Users with database visibility can now query the
*_
information schema views in the respective database.BOTTOMLESS_ * 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_
engine variable can now be configured at runtime.plancache_ worker_ threads -
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 theLOAD_
information schema view.DATA_ ERRORS
-
Added support for delimited batch sets in external functions.
-
Added support for the
LIMIT
clause in prepared statements. -
Added the
disk_
engine variable that disables disk plan garbage collection on startup.plan_ gc_ pause_ seconds_ on_ startup This variable prevents hot plans from being unintentionally disk garbage collected. -
Computed column definitions now support the
SPLIT
function. -
Added the
scheduler_
engine variable that specifies the threshold for triggering the verbose logging of scheduler thread timing.slow_ threshold_ seconds -
The
DROP
andALTER 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 .
command.. . filename -
Added the following engine variables:
Note: Only use the following under the guidance of or as directed by SingleStore Support.
-
repl_
: Limits the number of page descriptors in the page map that a 'ReplLog' can use before stalling new transactions.page_ desc_ limit_ before_ stall -
repl_
: Limits the number of IO buffers that a 'ReplLog' can use before stalling new transactions.io_ buffer_ limit -
[dr_
: Replication tries to set both send and receive buffer sizes to reduce waits on TCP ACK packets.]repl_ network_ buffer_ size Can be set for both DR and non-DR replicas. -
[dr_
: When sending logs or snapshots to a replica, limit the chunk size to this value.]repl_ max_ chunk_ size
-
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 theIN
-list.
Search
Recent changes include several enhancements and bug fixes for Full-Text Search (FTS) and vector indexes.
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_
for custom analyzers for full-text version 2.filter -
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_
information schema view which shows the amount of memory and disk used by each vector index.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_
toindex_ fallback_ non_ index_ scan FALSE
.
-
Extended the
VECTOR_
aggregate function to support theSUM 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_
clause to thename> 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 theCREATE
statement for the specified link. -
Added support for
TIME(0)
,TIME(6)
,DATETIME(0)
, andDATETIME(6)
types for theCAST
command for use with computed columns and theSET
clause for use with pipelines andLOAD DATA
. -
Added the
CREATE_
andUSER ALTER_
columns to theUSER 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_
builtin function escapes characters.PRETTY -
Fixed a bug that caused
JSON_
join queries to return wrong results where the quotes on strings were removed incorrectly.TO_ ARRAY
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_
engine variable that enables audit logging for only the root user.root_ only -
Added
activity_
field in activity structure to track the resource consumption by pipelines.tracking_ id -
Updated the default values of
enable_
andauto_ profile auto_
engine variable toprofile_ type ON
andSMART
, respectively. -
Added the
SHOW BOTTOMLESS_
command that returns observability metrics for the distributed plancache.PLANCACHE STATUS
-
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_
which tracks certain per-connection allocations that were previously tracked using the standard allocator.connection_ context -
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_
tracing.completion
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
=
andAND
. -
Enabled the use of the
MATCH_
tokenizer option with underscore in multi-value index settings.ANY -
Extended predicate pushdowns to identify more cases.
-
Extended rewrite for
EXISTS
subselects to handle arbitrarily nestedEXISTS
subselects underAND
orOR
. -
Fixed a wrong result in
ORDER BY <sort key> LIMIT
query that skipped rows withNULL
values in the sort key. -
Added support for the
IF NOT EXISTS
clause to theCREATE VIEW
command. -
Added support for table-level collations.
-
Improved optimization speed of parameterized
IN
-lists by limiting traversal depth. -
OPTIMIZE TABLE .
is now more responsive to. . INDEX 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_
engine variable.expiration_ mode When set to LIMITED_
, users are allowed to log in even after password expiration and run password update commands, such asACCESS ALTER USER
orSET 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