What's New in v20.1.0-beta.3

This version of CockroachDB is no longer supported. For more details, see the Release Support Policy.

March 25, 2020


A denial-of-service (DoS) vulnerability is present in CockroachDB v20.1.0 - v20.1.10 due to a bug in protobuf. This is resolved in CockroachDB v20.1.11 and later releases. When upgrading is not an option, users should audit their network configuration to verify that the CockroachDB HTTP port is not available to untrusted clients. We recommend blocking the HTTP port behind a firewall.

For more information, including other affected versions, see Technical Advisory 58932.

In addition to various updates, enhancements, and bug fixes, this beta release includes the following major highlights:

  • SELECT FOR UPDATE: CockroachDB now supports SELECT FOR UPDATE for ordering transactions. Use SELECT FOR UPDATE to lock the rows returned by a selection query, to control concurrent access to one or more rows of a table.
  • SQL savepoints: CockroachDB now fully supports SQL savepoints. New syntax for savepoints includes SAVEPOINT <foo>, RELEASE SAVEPOINT <foo>, and ROLLBACK TO SAVEPOINT <foo>. To inspect the current stack of active savepoints, use SHOW SAVEPOINT STATUS.
  • Hash-sharded indexes: CockroachDB now supports new syntax for defining hash-sharded indexes. Hash-sharded indexes improve write performance to indexes on sequential keys. To define a hash-sharded index, use CREATE INDEX ... USING HASH WITH BUCKET_COUNT = <number of buckets>.
  • RBAC now under BSL: All role-based access control (RBAC) features (CREATE ROLE, ALTER ROLE, DROP ROLE, GRANT ROLE, REVOKE ROLE) are now BSL features and available to non-enterprise users.
  • Improved vectorized execution: Vectorized execution now supports hash joins, merge joins, and most window functions. By default, the vectorized session variable is set to auto, which uses vectorized execution for all queries except those including unordered DISTINCT clauses or calls to the percent_rank or cume_dist window functions. To turn vectorized execution on for all operations, set vectorized to on.
  • Statement tracing in the Admin UI: Statement diagnostic information is now available in the Admin UI. When viewing a statement fingerprint in the Admin UI, you can now trigger a trace on the next query execution matching that statement fingerprint.

Get future release notes emailed to you:


Docker image

$ docker pull cockroachdb/cockroach-unstable:v20.1.0-beta.3

Backward-incompatible changes

  • The GRANT and REVOKE statements now require that the requesting user already have the target privileges themselves. For example, GRANT SELECT ON t TO foo requires that the requesting user already have the SELECT privilege on t. #45697
  • During the upgrade process from 19.2 to 20.1, almost all schema changes will now be disallowed on 20.1 nodes until the upgrade has been finalized, as part of ensuring consistency while the cluster undergoes a significant, backward-incompatible change in how schema changes are executed. Attempting these schema changes will return an error to the client. #45990
  • To ensure consistency for schema changes throughout the upgrade process to 20.1, schema changes initiated in 19.2 now cannot be adopted, paused, or resumed from 20.1 nodes until an internal migration is run. #46214

Security updates

Identity management changes

  • All role-based access control (RBAC) features (CREATE ROLE, [ALTER ROLE], DROP ROLE, GRANT ROLE, REVOKE ROLE) are now available to non-enterprise users. All RBAC features are now BSL features. #46042
  • USERs and ROLEs are now the same (which is PostgreSQL behavior). This means CREATE/ALTER/DROP ROLE/USER can be used interchangeably. #44968
  • The validation rule for principal names was extended to support periods and thus allow domain name-like principals. For reference, the validation rule is currently the regular expression ^[\p{Ll}0-9_][---\p{Ll}0-9_.]*$, and limited to a size of 63 UTF-8 bytes (larger usernames are rejected with an error); for comparison, PostgreSQL allows many more characters and truncates at 63 characters silently. #45575
  • Usernames can now contain periods, for compatibility with certificate managers that require domain names to be used as usernames. #45575
  • User and role principals can now be prevented from logging in using the NOLOGIN attribute, which can be set using the CREATE USER/ROLE or ALTER USER/ROLE. When using the CREATE ROLE syntax, NOLOGIN is enabled by default whereas when using CREATE USER, it is not. #45541
  • The CREATEROLE option can now be granted to users/roles using CREATE USER/ROLE or ALTER USER/ROLE. This delegates the permission to create additional roles. #44232
  • Any role created prior to v20.1 will be able to log into clusters started with --insecure, unless/until they are given the NOLOGIN attribute. For secure clusters, roles cannot log in by virtue of not having a password nor a client certificate. #45541

Authentication changes

  • CockroachDB now offers the ability to SQL client connection events (connection established and connection terminated) and SQL client authentication events (authentication method selection, authentication method application, authentication method result, and session termination) to a distinct cockroach-auth.log file in each node's main log directory. To enable SQL client connection logging, set the server.auth_log.sql_connections.enabled cluster setting. To enable SQL client authentication event logging, set the new server.auth_log.sql_sessions.enabled cluster setting cluster setting. Note that this feature is experimental; as such, the interface and output are subject to change. #45193
  • The password field (used exclusively for password-based authentication) can now be configured to have an expiration date using the VALID UNTIL attribute, which can be set with ALTER USER/ROLE. Note that the attribute sets an expiration date for the password, not the user account. This is consistent with PostgreSQL. #45541
  • Client and node certificates are now allowed to specify the principal in either the SubjectCommonName field or the SubjectAlternateNames field. Previously, the principal could only be specified in the SubjectCommonName field. This facilitates the use of Amazon Certificate Manager (ACM) and other Cloud-based certificate management tools. #45819

Authorization changes

  • Admin users can now grant ZONECONFIG to non-admin users on specific SQL objects (databases/tables). When set, the user is authorized to modify that object's zone configuration and decide data placement on specific nodes or groups thereof. #45201
  • The GRANT statement has been changed to be more like a capability-based system: it can only propagate privileges that the requesting user already has. Previously, it could be used to grant any other bit to any user, even to the requesting user. Note that the pseudo-privilege ALL includes GRANT, so GRANT ALL, in effect, preserves the previous behavior: it grants GRANT and every over privileges, so all privileges can be re-granted transitively. #45697
  • It is now possible for operators to disable the use of implicit credentials when accessing external cloud storage services for various bulk operations (e.g, BACKUP, IMPORT, etc). The use of implicit credentials can be disabled by using the --external-io-disable-implicit-credentials flag. #45969

Security bug fixes

  • All users can now view any comments on any object (bypassing other privileges), but modifying comments require write privilege on the target object. Previously, any user could modify any database/table/view/index comment via direct SQL updates to system.comments. This was unintended and a form of privilege escalation, and is now prevented. The privileges required for the COMMENT statement, pg_description, col_description(), obj_description(), and shobj_description() are operating as in PostgreSQL and are unaffected by this change.#45712
  • The --external-io-dir=disabled now applies to nodelocal upload requests. #45858
  • The non-authenticated /health HTTP endpoint was previously exposing the private IP address of the node, which can be privileged information in some deployments. This has been corrected. Deployments using automation to retrieve a node build details and address details should use /_status/details/local instead and use a valid admin authentication cookie. #45119

Enterprise edition changes

  • CDC to cloud-storage sinks now supports optional gzip compression. #45326
  • BACKUP can be re-run with the same destination path to automatically append an incremental backup to that path. #45255
  • RESTORE now allows using AS OF SYSTEM TIME to pick a target backup from a larger list of incremental backups. #45368
  • Changefeeds now have new options to control the types of schema change events the changefeed should respond to (schema_change_events), and the behavior to take when such an event occurs (schema_change_policy). This functionality allows users to halt changefeeds upon schema changes or skip over the logical backfill that is performed by default. #45652
  • Two new CHANGEFEED options, initial_scan and no_initial_scan, have been added. The initial_scan can be used only if no cursor had been specified (indicating the desire to start the CHANGEFEED from now()). The new options allow clients to override this default behavior and create changefeeds from the present without an initial scan, or from a point in time with one. You cannot specify both options simultaneously. #45663
  • BACKUP will no longer fail if the GC window for a table is exceeded while backing the table up. #45859
  • Incremental BACKUP can quickly skip unchanged data, making frequent incremental backups 10-100x faster, depending on data size and frequency. #46108

Storage changes

  • Improved the ability of garbage collection to process ranges exhibiting abnormally large numbers of transaction records and/or abort span entries. #45444
  • Improved a debug message that is printed when a range is unavailable (i.e., unable to accept writes). #45580
  • The timing of garbage collection for historical data is defined by the gc.ttlseconds variable in the applicable zone configuration. However, in practice, data is not garbage collected immediately after the TTL passes. The new kv.gc_ttl.strict_enforcement cluster setting makes sure that AS OF SYSTEM TIME queries older than the TTL, but before GC has happened, return an error. #45826
  • A bug in the range metrics collection would fail to correctly identify a range that had lost quorum, causing it to not be reported via the "unavailable ranges" metric. This is now fixed. #45253
  • Range garbage collection will now trigger based on a large abort span, adding defense-in-depth against ranges growing large (and eventually unstable). #45573
  • Fixed a bug that could cause requests to a quiesced range to hang in the KV replication layer. This bug would cause the message "have been waiting ... for proposing" to appear. even though no loss of quorum occurred. #46045

SQL changes

SQL language additions

  • CockroachDB now supports string and byte array literals using the dollar-quoted notation, as documented here. #44130
  • CockroachDB now supports expanding all columns of a tuple using the .* notation, for example: SELECT (t).* FROM (SELECT (1,'b',2.3) AS t). This is a CockroachDB-specific extension. #45609
  • CockroachDB now supports accessing the Nth column in a column with tuple type using the syntax (...).@N, for example: SELECT (t).@2 FROM (SELECT (1,'b',2.3) AS t). This is a CockroachDB-specific extension. #45609
  • Duplicate rows in the input to an INSERT..ON CONFLICT DO NOTHING statement will now be ignored rather than triggering an error. #45443
  • SQL savepoints are now supported. SAVEPOINT <foo>, RELEASE SAVEPOINT <foo>, and ROLLBACK TO SAVEPOINT <foo> now work. SHOW SAVEPOINT STATUS can be used to inspect the current stack of active savepoints. #45566
  • CockroachDB still considers the name cockroach_restart special in SAVEPOINTs. A savepoint defined with the name cockroach_restart is a "restart savepoint" and has different semantics than standard savepoints:

    1. Restart savepoints must be opened immediately when the transaction starts. Opening a restart savepoint after other statements have been executed is not allowed. In contrast, standard savepoints can be opened after other statements have already been executed.
    2. After a successful RELEASE, a restart savepoint does not allow further use of the transaction. COMMIT must immediately follow the RELEASE.
    3. Restart savepoints cannot be nested. Issuing SAVEPOINT cockroach_restart two times in a row only creates a single savepoint marker. This can be seen with SHOW SAVEPOINT STATUS. Issuing SAVEPOINT cockroach_restart after ROLLBACK TO SAVEPOINT cockroach_restart reuses the marker instead of creating a new one. In contrast, two SAVEPOINT statements with a standard savepoint name, or a SAVEPOINT statement immediately after a ROLLBACK, create two distinct savepoint markers.

    Note: The session variable force_savepoint_restart still works and causes every savepoint name to become equivalent to cockroach_restart with the special semantics described above. #46194

  • SELECT FOR UPDATE now hooks into a new leaseholder-only locking mechanism. This allows the feature to be used to improve performance of transactions that read, modify, and write contended to rows. Similarly, UPDATE statements now use this new mechanism by default, meaning that their performance under contention is improved. This is only enabled for UPDATE statements that can push their filter all the way into their key-value scan. To determine whether an UPDATE statement is implicitly using SELECT FOR UPDATE locking, look for a locking strength field in the EXPLAIN output for the statement. #45701

  • The statement CREATE SCHEMA IF NOT EXISTS is now accepted, and ignored, if it targets one of the pre-defined schemas (public, pg_temp, pg_catalog, etc.) #42703

  • Added the every aggregate function. #46059

  • The ceil and floor built-in functions now accept integer inputs. #46166

Query planning changes

  • CockroachDB previously allowed TIMESTAMP/TIMESTAMPTZ and TIME/TIMETZ to be converted to TIMESTAMP(0)/TIMESTAMPTZ(0), but this does not actually change any of the precision within it. CockroachDB now prohibits converting any precision of TIMESTAMP/TIMESTAMPTZ/TIME/TIMETZ to a lower precision value. #45314
  • Operators on two arrays with different element types now fail at type-check time instead of evaluation time. #45260
  • Improved the error message for the unsupported interaction between correlated subqueries and WITH clauses #45227
  • UPSERT and INSERT..ON CONFLICT statements now (occasionally) need to do an extra check to ensure that they never update the same row twice. This may adversely affect performance in cases where the optimizer cannot statically prove the extra check is unnecessary. #45372
  • The optimizer now considers the likely number of rows an operator will need to provide, and might choose query plans based on this. In particular, the optimizer might prefer lookup joins over alternatives in some situations where all rows of the join will probably not be needed. #45604
  • JSONB columns can now used in GROUP BY and DISTINCT ON clauses. #45229
  • The inverted index implementation now supports indexing array columns. This permits accelerating containment queries (@> and <@) on array columns by adding an index to them. #45157
  • EXPLAIN BUNDLE can now be used to run a query and collect execution information in a support bundle, which can be downloaded via the Admin UI. #45735
  • EXPLAIN BUNDLE now works when the client driver prepares the statement. #46111
  • Renamed experimental_optimizer_foreign_keys session variable and sql.defaults.optimizer_foreign_keys.enabled cluster setting to remove the experimental prefix. #46174
  • Fixed the "negative limit hint" internal query error. #45879
  • Fixed query errors in cases where a CTE was used inside a recursive CTE. #45877
  • Fixed an internal error that could occur in the optimizer when a WHERE filter contained at least one correlated subquery and one non-correlated subquery. #46153
  • Improvements in session settings reporting in the EXPLAIN (OPT,ENV) output. #46212

Execution changes

  • The new diagnostics.sql_stat_reset.interval cluster setting controls the rate at which SQL statement statistics are refreshed. Additionally, the setting diagnostics.forced_stat_reset.interval was renamed to diagnostics.forced_sql_stat_reset_interval. #45082
  • UPDATE statements now acquire locks using the FOR UPDATE locking mode during their initial row scan, which improves performance for contended workloads. This behavior is configurable using the enable_implicit_select_for_update session variable and the sql.defaults.implicit_select_for_update.enabled cluster setting. #45159
  • Hash joins and sorts are now run using the vectorized engine when vectorize=auto (default configuration). #45582
  • CockroachDB now collects separate sets of metrics for usage of SAVEPOINT: one set for regular SQL savepoints and one set for uses dedicated to CockroachDB's client-side transaction retry protocol. #45566
  • Vectorized distributed flows and disk spilling now support the INTERVAL type. #45776
  • Queries with MERGE join can now run via the vectorized engine when vectorize is set to auto. #45784
  • Hash aggregation is now supported in vectorize=auto mode. #45832
  • Added telemetry reporting for usages of inverted and hash-sharded indexes. #46060
  • The statement tag returned to the client upon success for CREATE USER, ALTER USER, and DROP USER now include the word "ROLE" instead of "USER", for compatibility with PostgreSQL. These three statements are now aliases for CREATE ROLE, ALTER ROLE, DROP ROLE. #46042
  • experimental_on option for vectorize session variable has been renamed to on. The only things that will not run with auto, but will run with on, are unordered DISTINCT and two window functions (percent_rank and cume_dist). The two options are otherwise identical. #46080
  • NOTICE commands can now be sent by CockroachDB servers using the Postgres client/server protocol. These notices will print when using the CockroachDB CLI. These notices can be disabled using the cluster setting sql.notices.enabled = false. #45679
  • Fixed an internal error that could occur when NULLIF was called with one null argument. #45354
  • Fix a bug where EXPERIMENTAL SCRUB TABLE on a timestamp/timestamptz key does not work. #45410
  • Significantly reduced the amount of memory allocated while scanning tables with a large average row size. #45323
  • Some vectorized execution plans that used lookup joins with decimals would previously return incorrect results. This is now fixed. #45536
  • Previously, drivers that did not truncate trailing zeroes for decimals in the binary format end up having inaccuracies of up to 10^4 during the decode step. Fixed the error by truncating the trailing zeroes as appropriate. This fixes known incorrect decoding cases with Postgres in Elixir. #45613
  • Previously, an internal error could occur in CockroachDB when executing queries via the vectorized engine in queries that contained unordered synchronizers. This has been fixed. #45690
  • Fixed a bug where the distinct operation on ARRAY[NULL] and NULL could sometimes return an incorrect result and omit some tuples. #45229
  • Previously, CockroachDB could crash when computing window functions with the RANGE mode of framing when one of the bounds was either 'offset PRECEDING' or 'offset FOLLOWING' and when there were NULL values in the single column from ORDER BY clause. Additionally, also in RANGE mode, bounds '0 PRECEDING' and '0 FOLLOWING' could be handled incorrectly. This is now fixed. #44666
  • Verify column is now visible before accessing its datums. #45801
  • Expected errors from the vectorized execution engine are no longer mistakenly annotated as unexpected errors. #45673
  • Mixed type comparison or binary expressions that could have previously returned wrong results in the vectorized execution engine now fall back to using the row execution engine. #45724
  • Fixed decimal rounding errors in the vectorized execution engine. #45950
  • Fixed a bug where various session variables whose value would display as "on" or "off" could not be set to the values "on" or "off", only true or false. #46163
  • Fixed a bug that caused transactions that have performed schema changes to deadlock after they restart. #46170

Updates to schema change / DDL statements

  • It is now possible to create a table and then add or alter a primary key within the same transaction. #46015
  • The ALTER TABLE .. ADD PRIMARY KEY ... command can now be used when the target table has the default rowid primary key. #45514
  • Fixed a bug where a table without a primary key and a column named rowid would throw an error when being created. #45507
  • The use of schema changes when a primary key change is in progress is now disabled. This includes the following: (1) running a primary key change in a transaction and then starting another schema change in the same transaction, and (2) starting a primary key change on one connection and then starting a schema change on the same table on another connection while the initial primary key change is currently executing. #45397
  • CockroachDB has now disabled primary key changes when a concurrent schema change is executing on the same table, or if a schema change has been started on the same table in the current transaction. #45513
  • You can now drop a primary key as long as you add another primary key within the same transaction. This feature is intended to be used when you do not want the existing primary key to be rewritten as a secondary index by ALTER PRIMARY KEY. #44511
  • The experimental variable gating around usages of online primary key changes is now removed. #45753
  • Previously, when a database was renamed, any table referencing a sequence would be blocked from being able to rename the table. This is to block cases where if the table's reference to the sequence contains the database name, and the database name changes, we have no way of overwriting the table's reference to the sequence in the new database. However, if no database name is included in the sequence reference, we should continue to allow the database to rename, as is implemented with this change. #45502
  • Previously, renaming a database with dependent views returned a misleading error message that implies it was a dependent view on a dependent table. Now the error message generically says cannot rename relation ... as it depends on relation ... instead. #45427
  • Long-running transactions which attempt to TRUNCATE can now be pushed and will commit in cases where they previously could fail or retry forever. #44091
  • It is now possible to create inverted indexes on columns whose names are mixed-case. #45621

Updates to Bulk I/O statements

  • Improved error messages when importing MySQL dump data. #45958
  • nodelocal:// URIs now require a node ID be specified in the hostname field. The special node ID of 'self' is equivalent to the old behavior of when the node ID was unspecified. #45764
  • Fixed cases where target column specifications in IMPORT INTO were ignored. #45747
  • IMPORT now correctly handles columns named with reserved keywords and/or other special characters. #45944
  • Google storage client is now resilient to transient connection errors. #46000
  • The creation of a database and table between incremental cluster backups is now allowed. #46066
  • Better error reporting when importing data. #46165

Changes to background job management

  • Schema changes are now scheduled and run fully like other jobs: they now can be canceled, paused, and resumed. Some other UI differences come with this implementation change; notably, all schema changes now have an associated job, failed schema changes are now rolled back within the "Reverting" phase of the same job, and GC for dropped indexes and tables is deferred to a later job. #45870
  • Non-running jobs are now considered for adoption in randomized order instead of in a determistic order by creation time, to avoid potential deadlocks when schema change jobs need to execute in a specific order. This is a preemptive change, not a bug fix, but it affects all jobs. #45870
  • On new clusters, the internal system.jobs table now uses the default zoneconfig and TTL (25h). #45767
  • The cleanup job spawned by ALTER .. PRIMARY KEY in some cases cannot be cancelled. #45595
  • Introduced a temporary table cleanup job that runs once every periodically per cluster. It removes any temporary schemas and their related objects that did not get removed cleanly when the connection closed. This period can be changed by the cluster setting sql.temp_object_cleaner.cleanup_interval, which defaults to 30 minutes. #45669
  • Previously, after deleting an index, table, or database, the relevant schema change job would change its running status to waiting for GC TTL. The schema change and the GC process are now decoupled into two jobs. #45962
  • Fixed a bug where, in some rare cases, a job was not cancellable when in state "Reverting". #45320
  • When considering if a job should be orphaned, CockroachDB use to take the conservative approach when a descriptor ID pointing to non-existent descriptor was found. This caused jobs to hang forever and be garbage collected. CockroachDB now disregards these IDs when considering if a job has still work to do. #45353
  • Logs emitted from jobs are now tagged with the job ID to improve visibility and aid debugging. #45728
  • IMPORT INTO jobs which are canceled or fail can no longer get stuck in an unrecoverable state if data from the previous state of the table had expired relative to the GC TTL. #44739
  • CHANGEFEED jobs that take a long time to perform backfills will no longer encounter failures due to garbage collection, so long as they begin before the data has expired. #45778

Updates to APIs and introspection

  • Telemetry reporting has been added for the commands SHOW INDEXES, SHOW QUERIES, SHOW JOBS, and SHOW CONSTRAINTS. #45897
  • SHOW USERS and SHOW ROLES are now the same, as USERS is now an alias for ROLES. SHOW USERS and SHOW ROLES now match PostgreSQL \du command. SHOW ROLES now displays three columns: username, options, and member_of. #45827
  • HTTP endpoints now report status 403 (Forbidden) instead of 500 (Internal server error) when the authenticated user has insufficient privileges to use the endpoint. #45325
  • The end point /_status/job/{job_id} will now display status info about a job. #45094
  • The pprof endpoints now allow downloading the binary profiles. To do so, attach ?download=true to the URL. #45790
  • Improved the debuggability of C++-level issues by providing access to thread stack traces via a new /debug/threads endpoint, which is exposed on the Admin UI advanced debug page. Now include thread stack traces in the info collected by debug zip. Thread stack traces are currently only available on Linux. #45321
  • Accesses to /health using a non-root authentication token no longer hang when a node is currently under load, or if a system range is unavailable. #45119
  • Statement diagnostics traces now contain processor statistics. #46132

Command-line changes

Changes to operational workflows

  • Hostnames from the cockroach start --join flag can now be resolved as SRV record. This simplifies cluster deployment in Kubernetes. #45815
  • The --decommission flag for cockroach quit is now deprecated. It will be removed altogether in a next stable release. Deployments should use cockroach node decommission followed by either cockroach quit or an equivalent form of server shut down. #45903
  • The --socket flag for cockroach start is now deprecated in favor of --socket-dir. CockroachDB now automatically chooses a name for the socket in the specified directory based on the configured port number. --socket will be removed in a later version. #45931
  • Added the --cert-principal-map flag to cockroach start, which specifies a comma-separated list of cert-principal:db-principal mappings that map the principals found in certificates to DB principals. This allows the usage of "node" and "root" certificates where the common name contains dots or a host name, which allows such certificates to be generated by certificate authorities that place restrictions on the contents of the common name field. #45819

Configuration changes

  • Added a new default option for the --storage-engine flag that respects the engine used last. #45512

Usability improvements

  • Some CLI commands now provide more details and/or a hint when they encounter an error. #45575
  • CockroachDB now refuses to start if named time zones are not properly configured. It is possible to override this behavior for testing purposes, with the understanding that doing so will cause incorrect SQL results and other inconsistencies, using the environment variable COCKROACH_INCONSISTENT_TIME_ZONES. #45640
  • The cockroach sql and cockroach demo client commands now display out-of-band server notices at the end of execution. #46144 #46124
  • When some result rows have already been received from the server when an error is encountered, the CockroachDB SQL shell now presents both the result rows and the error in the output, regardless of the selected table formatter. Previously, only the error was reported with some formatters, or both with other formatters. #45872
  • Added the flag --disable-demo-license to provide another option to disable cockroach demo from attempting to acquire a demo license. #46126
  • The parameter --set for cockroach sql and cockroach demo is now able to override all client-side options, as advertised. #46118
  • Fixed a bug that caused cockroach demo -e to display a connection refused error. #46126

Change to troubleshooting facilities

  • The cockroach debug zip output now contains hex representation of marshaled jobs payload and progress as well table descriptors. This allows you to copy this string and unmarshal it when debugging. #45721
  • CockroachDB will now dump the stacks of all goroutines upon receiving SIGQUIT prior to terminating. This feature is intended for use while troubleshooting misbehaving nodes. #36378

Admin UI changes

  • Removed mention of RocksDB from the Read Amplification, SSTables, Compactions/Flushes, and Compaction Queue graphs. #45398
  • The display options are now saved separately for each authenticated user. Note: When upgrading to a version with this change, all current display customizations for admin users are lost. #45127
  • Customizations of the Admin UI are again properly saved across sessions. #45127
  • Refactored redux data flow in enqueue range. #45667
  • Increased enqueue range timeout to an hour to prevent operations from timing out before completion. #45667
  • The Admin UI now reports a clearer message when a non-admin user uses an admin-only feature. #45122
  • Added the Statement Diagnostics History page. #45799
  • You can now access the Activate Diagnostics dialog from the Statements page, through the Activate link. #45799
  • Added a Release Notes subscription form on the Cluster Overview page. #45143
  • The jobs status filter now includes "running", which was previously omitted by mistake. #45937

Performance improvements

Doc updates


This release includes 385 merged PRs by 42 authors. We would like to thank the following contributors from the CockroachDB community:

  • Andrii Vorobiov
  • Artem Barger
  • Damien Hollis (first-time contributor)
  • Jaewan Park
  • Ziheng Liu (first-time contributor)
  • pohzipohzi (first-time contributor)
YesYes NoNo