⚠️ Warning
SingleStore 9.0 allows you to preview, evaluate, and provide feedback on new and upcoming features before their general availability. In the meantime, SingleStore 8.9 is recommended for production workloads, which can later be upgraded to SingleStore 9.0.
Engine
Distributed 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 that provide cumulative per-table metrics, i.e., the amount of work performed by the background merger.TABLE_ COUNTERS -
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 DATABASESandREBALANCE PARTITIONScommands that allow rebalancing to run only if all the leaf nodes are online. -
Allowed background merger to run while
OPTIMIZE TABLEis running. -
For deployments with a 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 the autostats file on recovery.
-
Added support for spilling if input data has
NULLrows. -
Aggregators now periodically synchronize query plans across the deployment.
-
DROP RESOURCE POOLcommand cannot delete the current resource pool anymore. -
SingleStore now waits until asynchronous upgrade steps complete before taking a snapshot.
-
Added support for
NULLtype in Wasm UDF return types and parameters. -
Added support for expressions, built-in functions, and user-defined variables in addition to hex literals in the Multi-Value index for BSON.
Refer to Multi-Value Hash Index (BSON) for more information. -
Extended redundant
GROUP BYdetection of 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 the associated database name isBOTTOMLESS_ * NULL. -
Users with database visibility can now query the
*_information schema views in the respective database.BOTTOMLESS_ * CLUSTERpermissions 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
INclauses for which the left-hand expression is not a table column. -
Improved the error message returned when the invalid key is specified in the
CONFIG/CREDENTIALSJSON. -
Improved the error message for parameter count mismatch during query parsing.
-
Users with
SHOW METADATAprivilege can now access theLOAD_information schema view.DATA_ ERRORS
-
Added support for delimited batch sets in external functions.
-
Added support for the
LIMITclause 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
SPLITfunction. -
Added the
scheduler_engine variable that specifies the threshold for triggering the verbose logging of scheduler thread timing.slow_ threshold_ seconds -
The
DROPandALTER TABLEcommands 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 that 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 the autostats file to 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 the 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 TABLEqueries ignored foreign keys. -
Fixed a rare deadlock related to temporary tables.
-
Fixed a crash in
SHOW PROCESSLISTin a rare race condition scenario. -
Fixed a bug in CTE rewrites.
-
Fixed a leak in a rare scenario.
-
Fixed a bug in the parser.
-
Fixed a crash in a shallow copy of a table with a pending
ALTERoperation. -
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
WHEREclause. -
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
BM25function 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 fallback mechanism so that when the engine detects that an indexed vector search followed by filters yields fewer than
LIMITrows, 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_toindex_ fallback_ non_ index_ scan FALSE.
-
Extended the
VECTOR_aggregate function to support theSUM VECTORdata 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 PROFILEcommand which allows you to view profile information for the specified pipeline. -
Added a
HEADER DETECTION ON/OFFclause to control inference from CSV files.For more information, refer to Schema and Pipeline Inference. -
Added support for inferring Parquet files with the
INFER PIPELINEcommand.For more information, refer to Schema and Pipeline Inference. -
Added support for inferring Iceberg files with the
INFER PIPELINEcommand.For more information, refer to Schema and Pipeline Inference. -
Added
SHOW CREATE LINKcommand that allows you to view theCREATEstatement for the specified link. -
Added support for
TIME(0),TIME(6),DATETIME(0), andDATETIME(6)types for theCASTcommand for use with computed columns and theSETclause for use with pipelines andLOAD DATA. -
Added the
CREATE_andUSER ALTER_columns to theUSER PIPELINESinformation 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 PIPELINEstatements.
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
assumeRolefor 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_ function.ARRAY -
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_built-in 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 ONandSMART, 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_that 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 NULLfilter. -
Added the
CONVERT TOclause to theALTER TABLEcommand that allows converting the character set and collation of a table. -
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 SELECTqueries 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
EXISTSsubselects to handle arbitrarily nestedEXISTSsubselects underANDorOR. -
Fixed a wrong result in
ORDER BY <sort key> LIMITquery that skipped rows withNULLvalues in the sort key. -
Added support for the
IF NOT EXISTSclause to theCREATE VIEWcommand. -
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 QUERYstatements.
Bugfixes
-
Fixed an issue where concurrent DDL and
PROMOTE AGGREGATOR TO MASTERstatements 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
memsqldengine. -
Added support for manual password activation and expiration to the
ALTER USERcommand. -
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 USERorSET 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.