May 24, 2021
- For a comprehensive summary of features in v21.1, see the v21.1 GA release notes.
- To upgrade to v21.1, see Upgrade to CockroachDB v21.1.
Get future release notes emailed to you:
Downloads
Warning:
The CockroachDB executable for Windows is experimental and not suitable for production deployments. Windows 8 or higher is required.
Docker image
$ docker pull cockroachdb/cockroach:v21.1.1
General changes
- Disabled read-triggered compactions to avoid instances where the storage engine would compact excessively. #65345
SQL language changes
- Fixed Julian date parsing logic for wrong formats. #63540
- The error payload returned to the client when a
DATE
/TIME
conversion fails now contains more details about the difference between the values provided and the values that are expected. #63540 - Introduced
ALTER TABLE ... ALTER COLUMN SET [VISIBLE|NOT VISIBLE]
, which marks columns as visible/not visible. #63881 - When using
ALTER TABLE ... LOCALITY REGIONAL BY ROW
, we would previously verify uniqueness of the new table, which was an unnecessary operation. This verification has been removed, improving the performance of updating localities to or fromREGIONAL BY ROW
. #63880 - Improved cancellation behavior for DistSQL flows. #65047
ST_EstimatedExtent
now always returnsNULL
. This allows GeoServer to make progress in certain cases, and is a valid default return value for the function. #65098- Implemented
ST_Envelope
forBox2D
. #65098 - Implemented a subset of variants for
ST_AsTWKB
, which encodes a geometry into aTWKB
format. This allows the use of GeoServer with CRDB if the user selects "PreserveTopology" for their "Method used to simplify geometries" option on the "Store" page. #65098 - Implemented
ST_Simplify
withpreserveCollapsed
support. This unblocks the use of GeoServer with the default settings. #65098 - Lookup joins on indexes with computed columns which are also either constrained by
CHECK
constraints or use anENUM
data type may now choose a more optimal plan. #65361 - Floating point infinity values are now formatted as
Infinity
(or-Infinity
if negative). This is for compatibility with PostgresSQL. #65334 INSERT INTO ... ON CONFLICT ... DO UPDATE SET
statements without predicates now acquire locks using theFOR UPDATE
locking mode during their initial row scan, which improves performance for contended workloads. This behavior is configurable using theenable_implicit_select_for_update
session variable and thesql.defaults.implicit_select_for_update.enabled
cluster setting. #65363ST_GeomFromGeoJSON(string)
is now marked as the preferred overload, meaning it will resolve correctly in more contexts. #65442
Operational changes
- Replica garbage collection now checks replicas against the range descriptor every 12 hours (down from 10 days) to see if they should be removed. Replicas that fail to notice they have been removed from a range will therefore linger for at most 12 hours rather than 10 days. #64589
Command-line changes
- The
--help
text for--log
now references the fact that the flag accepts YAML syntax and also points to thecockroach debug check-log-config
command. #64948 - The new parameter
--log-config-file
simplifies the process of loading the logging configuration from a YAML file. Instead of passing the content of the file via the--log
flag (e.g.,--log=$(cat file.yaml)
), it is now possible to pass the path to the file using--log-config-file=file.yaml
.
Note: Each occurrence of--log
and--log-config-file
on the command line overrides the configuration set from previous occurrences. #64948 - The prefixes displayed before connection URLs when
cockroach demo
starts up have been updated to better align with the output ofcockroach start
. #63535 - The flag
--empty
forcockroach demo
has been renamed to--no-example-database
.--empty
is still recognized but is marked as deprecated. Additionally, the user can now set the environment variableCOCKROACH_NO_EXAMPLE_DATABASE
to obtain this behavior automatically in every new demo session. #63535 - CockroachDB no longer supports the
\demo add
and\demo shutdown
commands forcockroach demo
in--global
configurations. #63535 - Added a note when starting up a
--global
demo cluster that the--global
configuration is experimental. #63535 - The SQL shell (
cockroach demo
,cockroach sql
) now attempts to better format values that are akin to time/date values, as well as floating-point numbers. #63541 cockroach debug zip
now attempts to pull data from multiple nodes concurrently, up to 15 nodes at a time. This change is meant to accelerate the data collection when a cluster contains multiple nodes. This behavior can be changed with the new command-line flag--concurrency
. #64705- The format of the informational messages printed by
cockroach debug zip
, when concurrent execution is enabled. #64705 - The new command
cockroach debug list-files
show the list of files that can be retrieved via thecockroach debug zip
command. It supports the--nodes
and--exclude-nodes
parameters in the same way ascockroach debug zip
. #64705 - It is now possible to fine-tune which files get retrieved from the server nodes by the
cockroach debug zip
command, using the new flag--include-files
and--exclude-files
. These flags take glob patterns that are applied to the file names server-side. For example, to include only log files, use--include-files='*.log'
. The commandcockroach debug list-files
also accepts these flags and can thus be used to experiment with the new flags before running thecockroach debug zip
command. #64705 - The
cockroach debug zip
command now retrieves only the log files, goroutine dumps and heap profiles pertaining to the last 48 hours prior to the command invocation. This behavior is supported entirely client-side, which means that it is not necessary to upgrade the server nodes to put these newly-configurable limits in place. The other data items retrieved bycockroach debug zip
are not affected by this time limit. This behavior can be customized by the two new flags--files-from
and--files-until
. Both are optional. See the command-line help text for details. The two new flags are also supported bycockroach debug list-files
. It is advised to experiment withlist-files
prior to issuing adebug zip
command that may retrieve a large amount of data. #64705
DB Console changes
- A new metric for the average number of runnable goroutines per CPU is now present in the runtime graphs. #64750
- The Console now uses a new library for line graphs that renders metrics more efficiently. Customers with large clusters can now load and interact with metrics much faster than before. #64479
- Placed a legend under charts on metrics page, if more than 10 series are being displayed #64479
Bug fixes
- Fixed a bug in the artificial latencies introduced by the
--global
flag tocockroach demo
. #63535 - Fixed a bug where multiple concurrent invocations of
cockroach debug zip
could yield cluster instability. This bug had been present since CockroachDB v20.1. #64083 - When a
STRING
value is converted toTIME
/DATE
/TIMESTAMP
, and theSTRING
value contains invalid entries, the error messages reported now more clearly report which fields are missing or undesired. #63540 - Fixed a bug where view expressions created using an
ARRAY
ENUM
without a name for the column could cause failures when dropping unrelatedENUM
values. #64272 - Fixed a bug causing an internal error in rare circumstances when executing queries via the vectorized engine that operate on columns of
BOOL
,BYTES
,INT
, andFLOAT
types that have a mix ofNULL
and non-NULL
values. #62915 - Fixed a bug causing CockroachDB to either return an error or crash when comparing an infinite
DATE
coming from a subquery against aTIMESTAMP
. #64074 - CockroachDB now should crash less often due to out-of-memory conditions caused by the subqueries returning multiple rows of large size. #64727
- Previously, the session trace could contain entries that corresponded to the previous trace (i.e.,
SET TRACING=ON
didn't properly reset the trace). Now this is fixed. #64945 - Previously, CockroachDB could incorrectly cast integers of larger widths to integers of smaller widths (e.g.,
INT8
toINT2
) when the former was out of range for the latter. Now this is fixed. #65035 - Fixed a race condition where read-write requests during replica removal (e.g., during range merges or rebalancing) could be evaluated on the removed replica. #64598
BACKUP
no longer resolves intents one-by-one. This eliminates the need to run a high-priority query to cleanup intents to unblockBACKUP
in the case of intent buildup. #64881- Fixed an internal error that could occur during planning when a query used the output of an
UPDATE
'sRETURNING
clause, and one or more of the columns in theRETURNING
clause were from a table specified in theFROM
clause of theUPDATE
(i.e., not from the table being updated). #62960 - Fixed an index-out-of-range error that could occur when
crdb_internal_mvcc_timestamp
was selected as part of aview
. It is now possible to selectcrdb_internal_mvcc_timestamp
as part of a view as long as it is aliased with a different name. #63632 - Fixed a bug in the application of environment variables to populate defaults for certain command-line flags, for example
COCKROACH_URL
for--url
, has been fixed. #63539 - Fixed a stack overflow that can happen in some corner cases involving partial indexes with predicates containing
(x IS NOT NULL)
. #64738 - Providing a constant value as an
ORDER BY
value in an ordered-set aggregate, such aspercentile_dist
orpercentile_cont
, no longer returns an error. This bug has been present since order-set aggregates were added in version 20.2. #64902 - Queries that reference tables with
GEOMETRY
orGEOGRAPHY
inverted indexes and that call geospatial functions with constantNULL
values cast to a type, likeNULL::GEOMETRY
orNULL::FLOAT8
, no longer error. This bug was present since 20.2. #63003 - Fixed a bug causing CockroachDB to incorrectly calculate the latency from the remote nodes when the latency info was shown on the
EXPLAIN ANALYZE (DISTSQL)
diagrams. #63089 - Fixed a bug causing the
ZONECONFIG
privilege on tables and databases to be incorrectly interpreted asUSAGE
, which could corrupt a table and/or database becauseUSAGE
is an invalid privilege for tables and databases. #65160 - Fixed a bug which could cause a panic when running an
EXECUTE
of a previously-prepared statement with aREGCLASS
orREGTYPE
parameter or a user-defined type argument after runningBEGIN AS OF SYSTEM TIME
with an invalid timestamp. #65150 - Fixed a bug which could cause a panic when issuing a query referencing a user-defined type as a placeholder. #65150
- Fixed a bug introduced in 20.2 that caused rows to be incorrectly de-duplicated from a scan with a non-unique index. #65284
- Fixed a bug where interval math on a
TIMESTAMPTZ
value on a DST boundary would incorrectly add or subtract an extra hour. #65095 - Fixed a bug where
date_trunc
on aTIME
value on a DST boundary could switch timezones and produce the incorrect result. #65095 - Improved memory utilization under some write-heavy workloads, added better logging to storage engine to surface compaction type, and persisted previously-missing Pebble options in
OPTIONS
file. #65308 - Fixed a bug causing
revision_history
cluster backups to not include dropped databases. This means that, previously, dropped databases could not be restored from backups that were taken after the database was dropped. #65314 - Fixed a bug causing
SHOW CREATE TABLE
output to not display the zone configurations of a table or index if there were no partitions, even if there were zone configurations on the index or table. #65176 - Previously, concatenating a non-
STRING
value with aSTRING
value would not use the normalSTRING
representation of the non-STRING
value. Now it does, sotrue || 'string'
returnstruestring
instead oftstring
. #65331 - Large
SELECT FOR UPDATE
scans will no longer prevent the memory associated with their entire result set from being reclaimed by the Go garbage collector for the lifetime of the locks that they acquire. #65359 - Fixed a rare race that could lead to a 3-second stall before a Raft leader was elected on a Range immediately after it was split off from its left-hand neighbor. #65356
- Fixed a bug where
SHOW CREATE TABLE
would show the zone configurations of a table of the same name from a different schema. #65368 BACKUP
,RESTORE
, andIMPORT
are now more resilient to node failures and will retry automatically. #65391- Previously, replica rebalancing could sometimes rebalance to stores on dead nodes. This bug is now fixed. #65428
Performance improvements
- The optimizer now always prefers to plan a locality-optimized scan over a regular scan when possible. This may enable the execution engine to avoid communicating with remote nodes, thus reducing query latency. #65088
- The optimizer will now try to plan anti lookup joins using "locality-optimized search". This optimization applies for anti lookup joins into
REGIONAL BY ROW
tables (i.e., the right side of the join is aREGIONAL BY ROW
table), and if enabled, it means that the execution engine will first search locally for matching rows before searching remote nodes. If a matching row is found in a local node, remote nodes will not be searched. This optimization may improve the performance of foreign key checks when rows are inserted or updated in a table that references a foreign key in aREGIONAL BY ROW
table. #63118 - Certain queries containing
<tuple> IN (<subquery>)
conditions now run faster. #63866 - Improved intent cleanup performance for aborted transactions. #64588
- Adjusted the estimated cost of locality-optimized anti joins in the optimizer so that they are always chosen over non-locality-optimized anti joins when possible. This makes it more likely that queries involving anti joins (such as inserts with foreign key checks) can avoid visiting remote regions. This results in lower latency. #65131
- The optimizer can now avoid full table scans for queries with a
LIMIT
andORDER BY
clause, where theORDER BY
columns form a prefix on an index in aREGIONAL BY ROW
table (excluding the hiddencrdb_region
column). Instead of a full table scan, at mostLIMIT
rows are scanned per region. #65287
Contributors
This release includes 100 merged PRs by 33 authors. We would like to thank the following contributors from the CockroachDB community:
- Kumar Akshay
- Mohammad Aziz (first-time contributor)
- kurokochin (first-time contributor)