GitPedia
vitessio

vitessio/vitess

Vitess is a database clustering system for horizontal scaling of MySQL.

30 Releases
Latest: 1mo ago
Vitess v24.0.1v24.0.1Latest
mattlordmattlord·1mo ago·May 7, 2026
GitHub

# Release of Vitess v24.0.1 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/24.0/24.0.1/changelog.md). The release includes 6 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @mattlord

Vitess v23.0.4v23.0.4
mattlordmattlord·1mo ago·May 7, 2026
GitHub

# Release of Vitess v23.0.4 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.4/changelog.md). The release includes 44 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @arthurschreiber, @mattlord, @vitess-bot

Vitess v24.0.0v24.0.0
mattlordmattlord·1mo ago·April 30, 2026
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [New Support](#new-support)
  • [Window function pushdown for sharded keyspaces](#window-function-pushdown)
  • [View Routing Rules](#view-routing-rules)
  • [Tablet targeting via USE statement](#tablet-targeting)
  • [VTGate Binlog Streaming Support](#vtgate-binlog-dump)
  • [Structured logging](#structured-logging)
  • [Breaking Changes](#breaking-changes)
  • + 30 more

<a id="new-support"/>New Support</a>

  • This release introduces an optimization that allows window functions to be pushed down to individual shards when they are partitioned by a column that matches a unique vindex.
  • For examples and more details, see the [documentation](https://vitess.io/docs/24.0/reference/compatibility/mysql-compatibility/#window-functions).
  • ```json
  • {
  • "rules": [
  • {
  • "from_table": "source_ks.my_view",
  • "to_tables": ["target_ks.my_view"]
  • + 40 more

💥 <a id="breaking-changes"/>Breaking Changes</a>

  • See [#19460](https://github.com/vitessio/vitess/pull/19460) for details.

📋 <a id="minor-changes-vreplication"/>VReplication</a>

  • Example usage:
  • ```bash
  • vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer start --shards="-80,80-"
  • vtctldclient Reshard --target-keyspace customer --workflow cust2cust stop --shards="80-"
  • ```
  • This is particularly useful in multi-cell deployments where a tablet in the local cell may lack the required binary logs, but tablets in other cells still have them.

📋 <a id="minor-changes-vtgate"/>VTGate</a>

  • The VTGate flag `--grpc-send-session-in-streaming` has been removed. This flag was deprecated in v22 via [#17907](https://github.com/vitessio/vitess/pull/17907) and defaulted to `true`.
  • Impact: Remove any usage of the `--grpc-send-session-in-streaming` flag from VTGate startup scripts or configuration.
  • The VTGate flag `--legacy-replication-lag-algorithm` now defaults to `false`, disabling the legacy approach to handling replication lag by default.
  • To enable session mode, set the flag when starting VTGate:
  • ```
  • --vtgate-balancer-mode=session
  • ```

📋 <a id="minor-changes-query-serving"/>Query Serving</a>

  • NULL handling now matches MySQL behavior. The function returns NULL when either the document or path argument is NULL.
  • Static path arguments are still optimized, even when mixed with dynamic arguments, so existing queries won't see any performance regression.

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • Note: Vitess Operator–managed deployments generally do not keep matching tablet records in the topo across pod replacements, so this feature will have a more limited effect in those environments.
  • VTTablet now exposes new metrics to track QueryThrottler behavior.
  • Four new metrics have been added:
  • QueryThrottlerRequests: Total number of requests evaluated by the query throttler
  • QueryThrottlerThrottled: Number of requests that were throttled
  • QueryThrottlerTotalLatencyNs: Total time each request takes in query throttling, including evaluation, metric checks, and other overhead (in nanoseconds)
  • QueryThrottlerEvaluateLatencyNs: Time taken to make the throttling decision (in nanoseconds)
  • These metrics help monitor throttling patterns, identify which workloads are throttled, measure performance overhead, and validate behavior in dry-run mode before configuration changes.
  • + 6 more

📋 <a id="minor-changes-tracing"/>Tracing</a>

  • `--otel-endpoint`: OpenTelemetry collector endpoint. If empty, the `OTEL_EXPORTER_OTLP_ENDPOINT` env var is used; if that is also unset, the OTel SDK defaults to `localhost:4317`.
  • `--otel-insecure` (default `false`): use insecure connection to the collector.
  • `--tracing-sampling-rate` (default `0.1`): sampling rate for traces (shared across all tracing backends).
  • Any OTLP-compatible backend (Jaeger v1.35+, Grafana Tempo, Datadog Agent, etc.) can receive these traces.
  • The following tracing backends are deprecated as of v24 and will be removed in v25:
  • `opentracing-jaeger` — Uses the [Jaeger client-go](https://github.com/uber/jaeger-client-go) library, which has been archived. The Jaeger project [recommends migrating to OpenTelemetry](https://www.jaegertracing.io/docs/next-release/getting-started/#migrating-from-jaeger-clients-to-opentelemetry-sdk). Users should migrate to `--tracer opentelemetry` with an OTLP-compatible Jaeger endpoint (v1.35+).
  • `opentracing-datadog` — Uses the OpenTracing bridge in `dd-trace-go`. Users should migrate to `--tracer opentelemetry` with the Datadog Agent's OTLP ingestion endpoint.
  • `--jaeger-agent-host`
  • + 1 more

📋 <a id="minor-changes-vtorc"/>VTOrc</a>

  • VTOrc now supports a `--cell` flag that specifies which Vitess cell the VTOrc process is running in. The flag is optional in v24 but will be required in v25+, similar to VTGate's `--cell` flag.
  • When provided, VTOrc validates that the cell exists in the topology service on startup. Without the flag, VTOrc logs a warning about the v25+ flag requirement.
  • Note: If you're running VTOrc in a multi-cell deployment, start using the `--cell` flag now to prepare for the v25 requirement.
  • See [#19427](https://github.com/vitessio/vitess/pull/19427) for details.
  • The `DiscoverInstanceTimings` metric has been removed from VTOrc in v24. This metric was deprecated in v23.
  • Migration: Use `DiscoveryInstanceTimings` instead, which provides the same timing information for instance discovery actions (Backend, Instance, Other).
  • Impact: Monitoring dashboards or alerting systems using `DiscoverInstanceTimings` must be updated to use `DiscoveryInstanceTimings`.
  • VTOrc's Snapshot Topology feature, which is enabled by setting `--snapshot-topology-interval` to a non-zero-value is deprecated as of v24 and the logic is planned for removal in v25.
  • + 4 more

📋 <a id="minor-changes-metrics"/>Metrics</a>

  • New metrics include:
  • Heap allocation histograms
  • GC cycle counts and pause histograms
  • Memory class breakdowns
  • Goroutine state breakdowns
  • Scheduler latency histograms
  • CPU time breakdowns by class (user, GC, scavenge, idle)
  • A new `go_info_ext` gauge is also added with `compiler`, `GOARCH`, and `GOOS` labels, providing extended build environment information beyond the standard `go_info` metric.
  • + 2 more

📋 <a id="minor-changes-backup-restore"/>Backup and Restore</a>

  • New Flags:
  • | Flag | Description |
  • |------|-------------|
  • | `--mysql-clone-enabled` | Enable the MySQL CLONE plugin and create the clone user during MySQL initialization. Required for all tablets that will participate in CLONE operations. |
  • | `--clone-from-primary` | Clone data from the shard's primary tablet instead of restoring from backup. Mutually exclusive with `--clone-from-tablet`. |
  • | `--clone-from-tablet` | Clone data from a specific tablet by alias (e.g., `zone1-123`) instead of restoring from backup. Mutually exclusive with `--clone-from-primary`. |
  • | `--restore-with-clone` | Use MySQL CLONE for the restore phase instead of restoring from backup. Requires either `--clone-from-primary` or `--clone-from-tablet`. |
  • | `--clone-restart-wait-timeout` | Timeout for waiting for MySQL to restart after CLONE REMOTE completes. Default: 5 minutes. |
  • + 27 more
Vitess v24.0.0-rc1v24.0.0-rc1Pre-release
mattlordmattlord·2mo ago·April 14, 2026
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [New Support](#new-support)
  • [Window function pushdown for sharded keyspaces](#window-function-pushdown)
  • [View Routing Rules](#view-routing-rules)
  • [Tablet targeting via USE statement](#tablet-targeting)
  • [Breaking Changes](#breaking-changes)
  • [External Decompressor No Longer Read from Backup MANIFEST by Default](#vttablet-external-decompressor-manifest)
  • [Minor Changes](#minor-changes)
  • + 34 more

<a id="new-support"/>New Support</a>

  • This release introduces an optimization that allows window functions to be pushed down to individual shards when they are partitioned by a column that matches a unique vindex.
  • For examples and more details, see the [documentation](https://vitess.io/docs/24.0/reference/compatibility/mysql-compatibility/#window-functions).
  • ```json
  • {
  • "rules": [
  • {
  • "from_table": "source_ks.my_view",
  • "to_tables": ["target_ks.my_view"]
  • + 21 more

💥 <a id="breaking-changes"/>Breaking Changes</a>

  • See [#19460](https://github.com/vitessio/vitess/pull/19460) for details.

📋 <a id="minor-changes-logging"/>Logging</a>

  • `glog` is deprecated as of v24 and will be removed in v25.

📋 <a id="minor-changes-vreplication"/>VReplication</a>

  • Example usage:
  • ```bash
  • vtctldclient MoveTables --target-keyspace customer --workflow commerce2customer start --shards="-80,80-"
  • vtctldclient Reshard --target-keyspace customer --workflow cust2cust stop --shards="80-"
  • ```
  • This is particularly useful in multi-cell deployments where a tablet in the local cell may lack the required binary logs, but tablets in other cells still have them.

📋 <a id="minor-changes-vtgate"/>VTGate</a>

  • The VTGate flag `--grpc-send-session-in-streaming` has been removed. This flag was deprecated in v22 via [#17907](https://github.com/vitessio/vitess/pull/17907) and defaulted to `true`.
  • Impact: Remove any usage of the `--grpc-send-session-in-streaming` flag from VTGate startup scripts or configuration.
  • The VTGate flag `--legacy-replication-lag-algorithm` now defaults to `false`, disabling the legacy approach to handling replication lag by default.
  • To enable session mode, set the flag when starting VTGate:
  • ```
  • --vtgate-balancer-mode=session
  • ```
  • VTGate now supports GTID-based binlog streaming through two protocols:
  • + 17 more

📋 <a id="minor-changes-query-serving"/>Query Serving</a>

  • Null handling now matches MySQL behavior. The function returns NULL when either the document or path argument is NULL.
  • Static path arguments are still optimized, even when mixed with dynamic arguments, so existing queries won't see any performance regression.

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • Note: Vitess Operator–managed deployments generally do not keep tablet records in the topo between restarts, so this feature will not take effect in those environments.
  • VTTablet now exposes new metrics to track QueryThrottler behavior.
  • Four new metrics have been added:
  • QueryThrottlerRequests: Total number of requests evaluated by the query throttler
  • QueryThrottlerThrottled: Number of requests that were throttled
  • QueryThrottlerTotalLatencyNs: Total time each request takes in query throttling, including evaluation, metric checks, and other overhead (nanoseconds)
  • QueryThrottlerEvaluateLatencyNs: Time taken to make the throttling decision (nanoseconds)
  • These metrics help monitor throttling patterns, identify which workloads are throttled, measure performance overhead, and validate behavior in dry-run mode before configuration changes.
  • + 7 more

📋 <a id="minor-changes-tracing"/>Tracing</a>

  • `--otel-endpoint`: OpenTelemetry collector endpoint. If empty, the `OTEL_EXPORTER_OTLP_ENDPOINT` env var is used; if that is also unset, the OTel SDK defaults to `localhost:4317`.
  • `--otel-insecure` (default `false`): use insecure connection to the collector.
  • `--tracing-sampling-rate` (default `0.1`): sampling rate for traces (shared across all tracing backends).
  • Any OTLP-compatible backend (Jaeger v1.35+, Grafana Tempo, Datadog Agent, etc.) can receive these traces.
  • The following tracing backends are deprecated as of v24 and will be removed in v25:
  • `opentracing-jaeger` — Uses the [Jaeger client-go](https://github.com/uber/jaeger-client-go) library, which has been archived. The Jaeger project [recommends migrating to OpenTelemetry](https://www.jaegertracing.io/docs/next-release/getting-started/#migrating-from-jaeger-clients-to-opentelemetry-sdk). Users should migrate to `--tracer opentelemetry` with an OTLP-compatible Jaeger endpoint (v1.35+).
  • `opentracing-datadog` — Uses the OpenTracing bridge in `dd-trace-go`. Users should migrate to `--tracer opentelemetry` with the Datadog Agent's OTLP ingestion endpoint.
  • `--jaeger-agent-host`
  • + 1 more

📋 <a id="minor-changes-vtorc"/>VTOrc</a>

  • VTOrc now supports a `--cell` flag that specifies which Vitess cell the VTOrc process is running in. The flag is optional in v24 but will be required in v25+, similar to VTGate's `--cell` flag.
  • When provided, VTOrc validates that the cell exists in the topology service on startup. Without the flag, VTOrc logs a warning about the v25+ flag requirement.
  • Note: If you're running VTOrc in a multi-cell deployment, start using the `--cell` flag now to prepare for the v25 requirement.
  • This improvement makes it easier to identify and debug issues with specific tablets when discovery operations fail.
  • See [#19427](https://github.com/vitessio/vitess/pull/19427) for details.
  • The `DiscoverInstanceTimings` metric has been removed from VTOrc in v24. This metric was deprecated in v23.
  • Migration: Use `DiscoveryInstanceTimings` instead, which provides the same timing information for instance discovery actions (Backend, Instance, Other).
  • Impact: Monitoring dashboards or alerting systems using `DiscoverInstanceTimings` must be updated to use `DiscoveryInstanceTimings`.
  • + 5 more

📋 <a id="minor-changes-metrics"/>Metrics</a>

  • New metrics include:
  • Heap allocation histograms
  • GC cycle counts and pause histograms
  • Memory class breakdowns
  • Goroutine state breakdowns
  • Scheduler latency histograms
  • CPU time breakdowns by class (user, GC, scavenge, idle)
  • A new `go_info_ext` gauge is also added with `compiler`, `GOARCH`, and `GOOS` labels, providing extended build environment information beyond the standard `go_info` metric.
  • + 2 more

📋 <a id="minor-changes-backup-restore"/>Backup and Restore</a>

  • New Flags:
  • | Flag | Description |
  • |------|-------------|
  • | `--mysql-clone-enabled` | Enable the MySQL CLONE plugin and create the clone user during MySQL initialization. Required for all tablets that will participate in CLONE operations. |
  • | `--clone-from-primary` | Clone data from the shard's primary tablet instead of restoring from backup. Mutually exclusive with `--clone-from-tablet`. |
  • | `--clone-from-tablet` | Clone data from a specific tablet by alias (e.g., `zone1-123`) instead of restoring from backup. Mutually exclusive with `--clone-from-primary`. |
  • | `--restore-with-clone` | Use MySQL CLONE for the restore phase instead of restoring from backup. Requires either `--clone-from-primary` or `--clone-from-tablet`. |
  • | `--clone-restart-wait-timeout` | Timeout for waiting for MySQL to restart after CLONE REMOTE completes. Default: 5 minutes. |
  • + 27 more
Vitess v23.0.3v23.0.3
mattlordmattlord·3mo ago·February 27, 2026
GitHub

📦 Summary

  • This is a security focused release. It contains fixes for two recently reported CVEs along with a number of other security related fixes.

📦 External Decompressor No Longer Read from Backup MANIFEST by Default

  • This is a fix for the following security advisory and associated CVE
  • Advisory: <https://github.com/vitessio/vitess/security/advisories/GHSA-8g8j-r87h-p36x>
  • CVE: <https://www.cve.org/CVERecord?id=CVE-2026-27965>
  • See [#19460](https://github.com/vitessio/vitess/pull/19460) for details.

📦 Prevent Path Traversals Via Backup MANIFEST Files On restore

  • This is a fix for the following security advisory and associated CVE
  • Advisory: <https://github.com/vitessio/vitess/security/advisories/GHSA-r492-hjgh-c9gw>
  • CVE: <https://www.cve.org/CVERecord?id=CVE-2026-27969>
  • See [#19470](https://github.com/vitessio/vitess/pull/19470) for details.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.3/changelog.md).
  • The release includes 22 merged Pull Requests.
  • Thanks to all our contributors: @app/vitess-bot, @bcremer, @mattlord
Vitess v22.0.4v22.0.4
mattlordmattlord·3mo ago·February 27, 2026
GitHub

📦 Summary

  • This is a security focused release. It contains fixes for two recently reported CVEs along with a number of other security related fixes.

📦 External Decompressor No Longer Read from Backup MANIFEST by Default

  • This is a fix for the following security advisory and associated CVE
  • Advisory: <https://github.com/vitessio/vitess/security/advisories/GHSA-8g8j-r87h-p36x>
  • CVE: <https://www.cve.org/CVERecord?id=CVE-2026-27965>
  • See [#19460](https://github.com/vitessio/vitess/pull/19460) for details.

📦 Prevent Path Traversals Via Backup MANIFEST Files On restore

  • This is a fix for the following security advisory and associated CVE
  • Advisory: <https://github.com/vitessio/vitess/security/advisories/GHSA-r492-hjgh-c9gw>
  • CVE: <https://www.cve.org/CVERecord?id=CVE-2026-27969>
  • See [#19470](https://github.com/vitessio/vitess/pull/19470) for details.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.4/changelog.md).
  • The release includes 37 merged Pull Requests.
  • Thanks to all our contributors: @app/vitess-bot, @mattlord, @vitess-bot
Vitess v23.0.2v23.0.2
mattlordmattlord·4mo ago·February 10, 2026
GitHub

# Release of Vitess v23.0.2 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.2/changelog.md). The release includes 16 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @mattlord, @vitess-bot

Vitess v23.0.1v23.0.1
mattlordmattlord·4mo ago·February 4, 2026
GitHub

# Release of Vitess v23.0.1 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.1/changelog.md). The release includes 51 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @mattlord, @mhamza15, @systay, @timvaillancourt, @vitess-bot

Vitess v22.0.3v22.0.3
mattlordmattlord·4mo ago·February 4, 2026
GitHub

# Release of Vitess v22.0.3 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.3/changelog.md). The release includes 40 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @mattlord, @mhamza15, @timvaillancourt, @vitess-bot

Vitess v22.0.2v22.0.2
mattlordmattlord·7mo ago·November 5, 2025
GitHub

# Release of Vitess v22.0.2 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.2/changelog.md). The release includes 59 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @arthurschreiber, @mattlord, @vitess-bot

Vitess v21.0.6v21.0.6
mattlordmattlord·7mo ago·November 5, 2025
GitHub

# Release of Vitess v21.0.6 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.6/changelog.md). The release includes 42 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @arthurschreiber, @harshit-gangal, @mattlord

Vitess v23.0.0v23.0.0
systaysystay·7mo ago·November 4, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [Breaking Changes](#breaking-changes)
  • [Flag Naming Convention Migration](#flag-naming-convention-migration)
  • [New default versions](#new-default-versions)
  • [Upgrade to MySQL 8.4](#upgrade-to-mysql-8-4)
  • [New Support](#new-support)
  • [Multi-Query Execution](#multi-query-execution)
  • [Transaction Timeout Session Variable](#transaction-timeout-session-variable)
  • + 41 more

💥 <a id="breaking-changes"/>Breaking Changes</a>

  • Four deprecated VTGate metrics have been completely removed in v23.0.0. These metrics were deprecated in v22.0.0:
  • | Metric Name | Component | Deprecated In |
  • |---------------------------|-----------|---------------|
  • | `QueriesProcessed` | vtgate | v22.0.0 |
  • | `QueriesRouted` | vtgate | v22.0.0 |
  • | `QueriesProcessedByTable` | vtgate | v22.0.0 |
  • | `QueriesRoutedByTable` | vtgate | v22.0.0 |
  • Impact: Any monitoring dashboards or alerting systems using these metrics must be updated to use the replacement metrics introduced in v22.0.0:
  • + 27 more

📦 <a id="flag-naming-convention-migration"/>Flag Naming Convention Migration</a>

  • v23.0.0 and v24.0.0: Both underscore and dash formats are supported. Underscore format is deprecated but functional.
  • v25.0.0: Underscore format will be removed. Only dash format will be accepted.
  • Flag normalization happens automatically at the `pflag` level ([PR #18642](https://github.com/vitessio/vitess/pull/18642)), so both formats are accepted without requiring code changes in v23/v24.
  • Common flags affected (full list of 989 flags available in PR #18280):
  • Backup flags:
  • `--azblob_backup_account_name` → `--azblob-backup-account-name`
  • `--s3_backup_storage_bucket` → `--s3-backup-storage-bucket`
  • `--xtrabackup_root_path` → `--xtrabackup-root-path`
  • + 6 more

<a id="new-default-versions"/>New default versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.40` to `8.4.6`.
  • This change was merged in [#18569](https://github.com/vitessio/vitess/pull/18569).
  • VTGate also advertises MySQL version `8.4.6` by default instead of `8.0.40`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.40` to `8.4.6`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 7 more

<a id="new-support"/>New Support</a>

  • This feature provides more efficient batch query execution without requiring manual query splitting or multiple round trips.
  • Usage Example:
  • ```go
  • queries := []string{
  • "SELECT * FROM users WHERE id = 1",
  • "SELECT * FROM orders WHERE user_id = 1",
  • "SELECT * FROM payments WHERE user_id = 1",
  • }
  • + 100 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Notes | Deprecation PR |
  • |:---------:|:-------------------------:|:--------------------------------------:|:-------------------------------------------------------:|
  • | `vtorc` | `DiscoverInstanceTimings` | Replaced by `DiscoveryInstanceTimings` | [#18406](https://github.com/vitessio/vitess/pull/18406) |
  • Deprecation Timeline:
  • v23.0.0 and v24.0.0: Underscore format deprecated but functional
  • v25.0.0: Underscore format will be removed
  • Action Required: Migrate to dash-based flag names before v25.0.0. See [Flag Naming Convention Migration](#flag-naming-convention-migration) for details.
  • ---

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deprecation PR |
  • |:---------:|:-------------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • See [Breaking Changes](#deleted-metrics-breaking) for migration guidance.
  • ---

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:--------------------------------:|:---------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------------------:|
  • | `TransactionsProcessed` | `Shard`, `Type` | Counts transactions processed at VTGate by shard distribution and transaction type. | [#18171](https://github.com/vitessio/vitess/pull/18171) |
  • | `OptimizedQueryExecutions` | N/A | Counter tracking queries that used deferred optimization execution path. | [#18067](https://github.com/vitessio/vitess/pull/18067) |
  • Transaction Types in `TransactionsProcessed`:
  • `Single` - Single-shard transactions
  • `Multi` - Multi-shard transactions
  • `TwoPC` - Two-phase commit transactions
  • + 7 more

<a id="new-cli-flags"/>New CLI Flags</a>

  • | Flag | Component | Description | PR |
  • |:-----|:----------|:------------|:---|
  • | Flag | Component | Description | PR |
  • |:-----|:----------|:------------|:---|
  • | `--datadog-trace-debug-mode` | All components | Makes Datadog trace debug mode configurable instead of always-on. Default: false. | [#18347](https://github.com/vitessio/vitess/pull/18347) |
  • | Flag | Component | Description | PR |
  • |:-----|:----------|:------------|:---|
  • Use Case: The `--allow-recovery=false` flag is useful for:
  • + 25 more

📦 <a id="modified-metrics"/>Modified Metrics</a>

  • The following VTOrc recovery metrics now include `Keyspace` and `Shard` labels in addition to the existing `RecoveryType` label ([PR #18304](https://github.com/vitessio/vitess/pull/18304)):
  • 1. `FailedRecoveries`
  • 2. `PendingRecoveries`
  • 3. `RecoveriesCount`
  • 4. `SuccessfulRecoveries`
  • Impact: Monitoring queries and dashboards using these metrics may need updates to account for the additional label dimensions.
  • Benefits:
  • More granular observability into which keyspaces/shards are experiencing recovery issues
  • + 12 more

📦 <a id="parser-sql-enhancements"/>Parser/SQL Enhancements</a>

  • Vitess v23.0.0 includes significant SQL parser improvements for better MySQL compatibility:
  • | Feature | Description | PR |
  • |:--------|:------------|:---|
  • | `CREATE TABLE ... SELECT` | Full support for creating tables from SELECT query results | [#18443](https://github.com/vitessio/vitess/pull/18443) |
  • | `WITH RECURSIVE` | Recursive common table expressions for hierarchical queries | [#18590](https://github.com/vitessio/vitess/pull/18590) |
  • | `SET NAMES binary` | Support for binary character set specification | [#18582](https://github.com/vitessio/vitess/pull/18582) |
  • | `ALTER VITESS_MIGRATION ... POSTPONE COMPLETE` | Syntax for postponing Online DDL migration completion | [#18118](https://github.com/vitessio/vitess/pull/18118) |
  • | `VALUE` keyword in INSERT/REPLACE | Support for `VALUE` (singular) in addition to `VALUES` | [#18116](https://github.com/vitessio/vitess/pull/18116) |
  • + 8 more

📦 <a id="query-planning-improvements"/>Query Planning Improvements</a>

  • Window functions can now be pushed down to single-shard queries ([PR #18103](https://github.com/vitessio/vitess/pull/18103)), improving performance for analytics workloads.
  • Before v23: Window functions were always executed at VTGate level, even for single-shard queries.
  • After v23: Window functions are pushed down when the query targets a single shard, reducing data transfer and improving performance.
  • Example:
  • ```sql
  • -- This query now executes entirely on the target shard
  • SELECT
  • user_id,
  • + 43 more

📋 <a id="minor-changes-topo"/>Topology</a>

  • Impact: Configurations with empty or invalid credential files will now fail at startup rather than silently continuing with no authentication.
  • ---

📋 <a id="minor-changes-vtorc"/>VTOrc</a>

  • We recommend using the standard VTOrc metrics to gather the same metrics. If you find that a metric is missing in standard metrics, please open an issue or PR to address this.
  • Example:
  • ```bash
  • vtctldclient SetVtorcEmergencyReparent --keyspace commerce --enabled=false
  • vtctldclient SetVtorcEmergencyReparent --keyspace commerce --shard 80- --enabled=false
  • vtctldclient SetVtorcEmergencyReparent --keyspace commerce --enabled=true
  • ```
  • The following recovery-related stats now include labels for keyspaces and shards ([PR #18304](https://github.com/vitessio/vitess/pull/18304)):
  • + 7 more

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • Added `RestartReplication` method to `TabletManagerClient` interface ([PR #18628](https://github.com/vitessio/vitess/pull/18628)). This new RPC allows stopping and restarting MySQL replication with semi-sync configuration in a single call, providing a convenient alternative to separate `StopReplication` and `StartReplication` calls.
  • Added `GetMaxValueForSequences` and `UpdateSequenceTables` gRPC RPCs ([PR #18172](https://github.com/vitessio/vitess/pull/18172)) for VReplication sequence management during `SwitchWrites` operations.
  • `--skip-user-metrics` flag if enabled, replaces the username label with "UserLabelDisabled" to prevent metric explosion in environments with many unique users ([PR #18085](https://github.com/vitessio/vitess/pull/18085)).
  • See [New CLI Flags](#new-cli-flags) for complete list of new flags.
  • ```sql
  • ALTER USER 'vt_repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'your-existing-password';
  • ```
  • In future Vitess versions, the `mysql_native_password` authentication plugin will be disabled for managed MySQL instances.
  • + 4 more

📝 <a id="docker"/>Docker</a>

  • Builds will continue for Debian Bookworm, and add the recently released Debian Trixie. v23 explicitly does not change the default Debian tag to Trixie.
  • ------------

Additional Information

  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.0/changelog.md).
  • The release includes 246 merged Pull Requests.
Vitess v23.0.0-rc2v23.0.0-rc2Pre-release
systaysystay·7mo ago·October 29, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [New default versions](#new-default-versions)
  • [Upgrade to MySQL 8.4](#upgrade-to-mysql-8.4)
  • [Minor Changes](#minor-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • + 17 more

<a id="new-default-versions"/>New default versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.40` to `8.4.6`.
  • This change was merged in [#18569](https://github.com/vitessio/vitess/pull/18569).
  • VTGate also advertises MySQL version `8.4.6` by default instead of `8.0.40`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.40` to `8.4.6`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 6 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Notes | Deprecation PR |
  • |:---------:|:-------------------------:|:--------------------------------------:|:-------------------------------------------------------:|
  • | `vtorc` | `DiscoverInstanceTimings` | Replaced by `DiscoveryInstanceTimings` | [#18406](https://github.com/vitessio/vitess/pull/18406) |

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deprecation PR |
  • |:---------:|:-------------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-----------------------:|:---------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------------------:|
  • | `TransactionsProcessed` | `Shard`, `Type` | Counts transactions processed at VTGate by shard distribution and transaction type. | [#18171](https://github.com/vitessio/vitess/pull/18171) |
  • | Name | Dimensions | Description | PR |
  • |:-------------------:|:---------------------------------------------:|:----------------------------------------------------:|:-------------------------------------------------------:|
  • | `SkippedRecoveries` | `RecoveryName`, `Keyspace`, `Shard`, `Reason` | Count of the different skipped recoveries processed. | [#17985](https://github.com/vitessio/vitess/pull/17985) |

📋 <a id="minor-changes-topo"/>Topology</a>

  • The `--consul_auth_static_file` flag used in several components now requires that 1 or more credentials can be loaded from the provided json file.

📋 <a id="minor-changes-vtorc"/>VTOrc</a>

  • We recommend using the standard VTOrc metrics to gather the same metrics. If you find that a metric is missing in standard metrics, please open an issue or PR to address this.
  • The following recovery-related stats now include labels for keyspaces and shards:
  • 1. `FailedRecoveries`
  • 2. `PendingRecoveries`
  • 3. `RecoveriesCount`
  • 4. `SuccessfulRecoveries`
  • Previous to this release, only the recovery "type" was included in labels.
  • The `/api/replication-analysis` HTTP API endpoint is now deprecated and is replaced with `/api/detection-analysis`, which currently returns the same response format.

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • Added `RestartReplication` method to `TabletManagerClient` interface. This new RPC allows stopping and restarting MySQL replication with semi-sync configuration in a single call, providing a convenient alternative to separate `StopReplication` and `StartReplication` calls.
  • `skip-user-metrics` flag if enabled, replaces the username label with "UserLabelDisabled" to prevent metric explosion in environments with many unique users.
  • ```sql
  • ALTER USER 'vt_repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'your-existing-password';
  • ```
  • In future Vitess versions, the `mysql_native_password` authentication plugin will be disabled for managed MySQL instances.
  • Fixed a bug where environment variables like `TZ` were not propagated from mysqlctl to the mysqld process.
  • As a result, timezone settings from the environment were previously ignored. Now mysqld correctly inherits environment variables.

📝 <a id="docker"/>Docker</a>

  • [Bullseye went EOL 1 year ago](https://www.debian.org/releases/), so starting from v23, we will no longer build or publish images based on debian:bullseye.
  • Builds will continue for Debian Bookworm, and add the recently released Debian Trixie. v23 explicitly does not change the default Debian tag to Trixie.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.0/changelog.md).
  • The release includes 239 merged Pull Requests.
Vitess v23.0.0-rc1v23.0.0-rc1Pre-release
systaysystay·8mo ago·October 16, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [New default versions](#new-default-versions)
  • [Upgrade to MySQL 8.4](#upgrade-to-mysql-8.4)
  • [Minor Changes](#minor-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • + 17 more

<a id="new-default-versions"/>New default versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.40` to `8.4.6`.
  • This change was merged in [#18569](https://github.com/vitessio/vitess/pull/18569).
  • VTGate also advertises MySQL version `8.4.6` by default instead of `8.0.40`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.40` to `8.4.6`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 6 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Notes | Deprecation PR |
  • |:---------:|:-------------------------:|:--------------------------------------:|:-------------------------------------------------------:|
  • | `vtorc` | `DiscoverInstanceTimings` | Replaced by `DiscoveryInstanceTimings` | [#18406](https://github.com/vitessio/vitess/pull/18406) |

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deprecation PR |
  • |:---------:|:-------------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | `v22.0.0` | [#17727](https://github.com/vitessio/vitess/pull/17727) |

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-----------------------:|:---------------:|:-----------------------------------------------------------------------------------:|:-------------------------------------------------------:|
  • | `TransactionsProcessed` | `Shard`, `Type` | Counts transactions processed at VTGate by shard distribution and transaction type. | [#18171](https://github.com/vitessio/vitess/pull/18171) |
  • | Name | Dimensions | Description | PR |
  • |:-------------------:|:---------------------------------------------:|:----------------------------------------------------:|:-------------------------------------------------------:|
  • | `SkippedRecoveries` | `RecoveryName`, `Keyspace`, `Shard`, `Reason` | Count of the different skipped recoveries processed. | [#17985](https://github.com/vitessio/vitess/pull/17985) |

📋 <a id="minor-changes-topo"/>Topology</a>

  • The `--consul_auth_static_file` flag used in several components now requires that 1 or more credentials can be loaded from the provided json file.

📋 <a id="minor-changes-vtorc"/>VTOrc</a>

  • We recommend using the standard VTOrc metrics to gather the same metrics. If you find that a metric is missing in standard metrics, please open an issue or PR to address this.
  • The following recovery-related stats now include labels for keyspaces and shards:
  • 1. `FailedRecoveries`
  • 2. `PendingRecoveries`
  • 3. `RecoveriesCount`
  • 4. `SuccessfulRecoveries`
  • Previous to this release, only the recovery "type" was included in labels.
  • The `/api/replication-analysis` HTTP API endpoint is now deprecated and is replaced with `/api/detection-analysis`, which currently returns the same response format.

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • Added `RestartReplication` method to `TabletManagerClient` interface. This new RPC allows stopping and restarting MySQL replication with semi-sync configuration in a single call, providing a convenient alternative to separate `StopReplication` and `StartReplication` calls.
  • `skip-user-metrics` flag if enabled, replaces the username label with "UserLabelDisabled" to prevent metric explosion in environments with many unique users.
  • ```sql
  • ALTER USER 'vt_repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'your-existing-password';
  • ```
  • In future Vitess versions, the `mysql_native_password` authentication plugin will be disabled for managed MySQL instances.
  • Fixed a bug where environment variables like `TZ` were not propagated from mysqlctl to the mysqld process.
  • As a result, timezone settings from the environment were previously ignored. Now mysqld correctly inherits environment variables.

📝 <a id="docker"/>Docker</a>

  • [Bullseye went EOL 1 year ago](https://www.debian.org/releases/), so starting from v23, we will no longer build or publish images based on debian:bullseye.
  • Builds will continue for Debian Bookworm, and add the recently released Debian Trixie. v23 explicitly does not change the default Debian tag to Trixie.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/23.0/23.0.0/changelog.md).
  • The release includes 225 merged Pull Requests.
Vitess v22.0.1v22.0.1
GuptaManan100GuptaManan100·1y ago·June 18, 2025
GitHub

# Release of Vitess v22.0.1 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.1/changelog.md). The release includes 19 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @vitess-bot

Vitess v21.0.5v21.0.5
GuptaManan100GuptaManan100·1y ago·June 18, 2025
GitHub

# Release of Vitess v21.0.5 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.5/changelog.md). The release includes 14 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @frouioui, @harshit-gangal, @systay, @vitess-bot

Vitess v20.0.8v20.0.8
GuptaManan100GuptaManan100·1y ago·June 18, 2025
GitHub

# Release of Vitess v20.0.8 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.8/changelog.md). The release includes 11 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @frouioui

Vitess v22.0.0v22.0.0
frouiouifrouioui·1y ago·April 29, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [CLI Flags](#deprecated-cli-flags)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • [CLI Flags](#deleted-cli-flags)
  • [gh-ost and pt-osc Online DDL strategies](#deleted-ghost-ptosc)
  • + 32 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Deprecation PR |
  • |:---------:|:-------------------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • ---

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deletion PR |
  • |:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheCapacity` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheEvictions` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheHits` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheMisses` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • + 15 more

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:|
  • | `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryExecutionsByTable` | `Query`, `Table` | Queries executed by vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • + 21 more

📋 <a id="config-file-changes"/>Config File Changes</a>

  • The following fields can be dynamically changed -
  • 1. `instance-poll-time`
  • 2. `prevent-cross-cell-failover`
  • 3. `snapshot-topology-interval`
  • 4. `reasonable-replication-lag`
  • 5. `audit-to-backend`
  • 6. `audit-to-syslog`
  • 7. `audit-purge-duration`
  • + 14 more

📦 <a id="vtorc"/>VTOrc</a>

  • VTOrc can now identify and recover from stalled disk errors.
  • VTTablets test whether the disk is writable and they send this information in the `FullStatus` RPC response to VTOrc.
  • If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary.
  • This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it.
  • To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets.
  • `--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively.
  • VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace.
  • For example, if a VTOrc is configured to watch `ks/-80`, then it would watch all the shards that fall under the keyrange `-80`.
  • + 5 more

<a id="new-default-versions"/>New Default Versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`.
  • This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552).
  • VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.30` to `8.0.40`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 8 more

<a id="new-support"/>New Support</a>

  • Limitations:
  • When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior.
  • You can control idle connection retention for the query server’s query pool, stream pool, and transaction pool with the following flags:
  • • --queryserver-config-query-pool-max-idle-count: Defines the maximum number of idle connections retained in the query pool.
  • • --queryserver-config-stream-pool-max-idle-count: Defines the maximum number of idle connections retained in the stream pool.
  • • --queryserver-config-txpool-max-idle-count: Defines the maximum number of idle connections retained in the transaction pool.
  • The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet.
  • ---
  • + 2 more

📦 <a id="optimization"/>Optimization</a>

  • Prepared statements now benefit from Deferred Optimization, enabling parameter-aware query plans.
  • Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated.
  • Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness.
  • ---

<a id="rpc-changes"/>New VtctldServer RPC</a>

  • ---

📦 <a id="reparents-prefer-not-backing-up"/>Prefer not promoting a replica that is currently taking a backup

  • Emergency reparents now prefer to not promote replicas that are currently taking backups with a backup engine other than
  • `builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be
  • promoted.
  • For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of
  • valid candidates. This means they will never get promoted - not even if there are no other candidates.
  • Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will
  • never be promoted, neither by planned nor by emergency reparents.
  • ---

📦 <a id="semi-sync-monitor"/>Semi-sync monitor in vttablet</a>

  • Primary VTTablets now monitor the semi-sync status of their underlying MySQL instance .
  • We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs.
  • In rare scenarios, this can also block reparent operations and render the primary unresponsive.
  • More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749).
  • The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds.
  • ---

<a id="new-errors-fatal-tx"/>Wrapped fatal transaction errors</a>

  • When a query fails while running in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc.), the original error is now wrapped in a `VT15001` error.
  • When a query produce a `VT15001` error, VTGate will try to rollback and clear the transaction.
  • Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received
  • to acknowledge that the transaction was automatically rolled back and cleared by VTGate.
  • `VT09032` is returned to clients to avoid applications blindly sending queries to VTGate thinking they are still in a transaction.
  • This change was introduced by [#17669](https://github.com/vitessio/vitess/pull/17669).
  • ---

📋 <a id="topo-read-concurrency-changes"/>`--topo_read_concurrency` behaviour changes

  • The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_.
  • ---

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h).
  • While the flag will continue to accept float values (interpreted as seconds) for backward compatibility,
  • float inputs are deprecated and will be removed in a future release.
  • `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments.
  • ---

📦 <a id="vtadmin"/>VTAdmin

  • Building `vtadmin-web` now requires node >= v22.13.0 (LTS). Breaking changes from v20 to v22 can be found at https://nodejs.org/en/blog/release/v22.13.0 -- with no known issues that apply to VTAdmin.
  • Full details on the node v20.12.2 release can be found at https://nodejs.org/en/blog/release/v22.13.1.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.0/changelog.md).
  • The release includes 475 merged Pull Requests.
Vitess v22.0.0-rc3v22.0.0-rc3Pre-release
vitess-botvitess-bot·1y ago·April 24, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [CLI Flags](#deprecated-cli-flags)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • [CLI Flags](#deleted-cli-flags)
  • [gh-ost and pt-osc Online DDL strategies](#deleted-ghost-ptosc)
  • + 32 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Deprecation PR |
  • |:---------:|:-------------------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • ---

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deletion PR |
  • |:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheCapacity` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheEvictions` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheHits` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheMisses` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • + 15 more

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:|
  • | `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryExecutionsByTable` | `Query`, `Table` | Queries executed by vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • + 21 more

📋 <a id="config-file-changes"/>Config File Changes</a>

  • The following fields can be dynamically changed -
  • 1. `instance-poll-time`
  • 2. `prevent-cross-cell-failover`
  • 3. `snapshot-topology-interval`
  • 4. `reasonable-replication-lag`
  • 5. `audit-to-backend`
  • 6. `audit-to-syslog`
  • 7. `audit-purge-duration`
  • + 14 more

📦 <a id="vtorc"/>VTOrc</a>

  • VTOrc can now identify and recover from stalled disk errors.
  • VTTablets test whether the disk is writable and they send this information in the `FullStatus` RPC response to VTOrc.
  • If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary.
  • This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it.
  • To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets.
  • `--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively.
  • VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace.
  • For example, if a VTOrc is configured to watch `ks/-80`, then it would watch all the shards that fall under the keyrange `-80`.
  • + 5 more

<a id="new-default-versions"/>New Default Versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`.
  • This change was merged in [#17552](https://github.com/vitessio/vitess/pull/17552).
  • VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30`. If that is not what you are running, you can set the `mysql_server_version` flag to advertise the desired version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the MySQL version from `8.0.30` to `8.0.40`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 8 more

<a id="new-support"/>New Support</a>

  • Limitations:
  • When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior.
  • You can control idle connection retention for the query server’s query pool, stream pool, and transaction pool with the following flags:
  • • --queryserver-config-query-pool-max-idle-count: Defines the maximum number of idle connections retained in the query pool.
  • • --queryserver-config-stream-pool-max-idle-count: Defines the maximum number of idle connections retained in the stream pool.
  • • --queryserver-config-txpool-max-idle-count: Defines the maximum number of idle connections retained in the transaction pool.
  • The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet.
  • ---
  • + 2 more

📦 <a id="optimization"/>Optimization</a>

  • Prepared statements now benefit from Deferred Optimization, enabling parameter-aware query plans.
  • Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated.
  • Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness.
  • ---

<a id="rpc-changes"/>New VtctldServer RPC</a>

  • ---

📦 <a id="reparents-prefer-not-backing-up"/>Prefer not promoting a replica that is currently taking a backup

  • Emergency reparents now prefer to not promote replicas that are currently taking backups with a backup engine other than
  • `builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be
  • promoted.
  • For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of
  • valid candidates. This means they will never get promoted - not even if there are no other candidates.
  • Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will
  • never be promoted, neither by planned nor by emergency reparents.
  • ---

📦 <a id="semi-sync-monitor"/>Semi-sync monitor in vttablet</a>

  • Primary VTTablets now monitor the semi-sync status of their underlying MySQL instance .
  • We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs.
  • In rare scenarios, this can also block reparent operations and render the primary unresponsive.
  • More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749).
  • The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds.
  • ---

<a id="new-errors-fatal-tx"/>Wrapped fatal transaction errors</a>

  • When a query fails while running in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc.), the original error is now wrapped in a `VT15001` error.
  • When a query produce a `VT15001` error, VTGate will try to rollback and clear the transaction.
  • Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received
  • to acknowledge that the transaction was automatically rolled back and cleared by VTGate.
  • `VT09032` is returned to clients to avoid applications blindly sending queries to VTGate thinking they are still in a transaction.
  • This change was introduced by [#17669](https://github.com/vitessio/vitess/pull/17669).
  • ---

📋 <a id="topo-read-concurrency-changes"/>`--topo_read_concurrency` behaviour changes

  • The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_.
  • ---

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h).
  • While the flag will continue to accept float values (interpreted as seconds) for backward compatibility,
  • float inputs are deprecated and will be removed in a future release.
  • `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments.
  • ---

📦 <a id="vtadmin"/>VTAdmin

  • Building `vtadmin-web` now requires node >= v22.13.0 (LTS). Breaking changes from v20 to v22 can be found at https://nodejs.org/en/blog/release/v22.13.0 -- with no known issues that apply to VTAdmin.
  • Full details on the node v20.12.2 release can be found at https://nodejs.org/en/blog/release/v22.13.1.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.0/changelog.md).
  • The release includes 474 merged Pull Requests.
Vitess v22.0.0-rc2v22.0.0-rc2Pre-release
vitess-botvitess-bot·1y ago·April 11, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [CLI Flags](#deprecated-cli-flags)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • [CLI Flags](#deleted-cli-flags)
  • [gh-ost and pt-osc Online DDL strategies](#deleted-ghost-ptosc)
  • + 32 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Deprecation PR |
  • |:---------:|:-------------------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • ---

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deprecation PR |
  • |:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheCapacity` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheEvictions` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheHits` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheMisses` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • + 15 more

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:|
  • | `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryExecutionsByTable` | `Query`, `Table` | Queries executed at vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstream. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • + 21 more

📋 <a id="config-file-changes"/>Config File Changes</a>

  • The following fields can be dynamically changed -
  • 1. `instance-poll-time`
  • 2. `prevent-cross-cell-failover`
  • 3. `snapshot-topology-interval`
  • 4. `reasonable-replication-lag`
  • 5. `audit-to-backend`
  • 6. `audit-to-syslog`
  • 7. `audit-purge-duration`
  • + 14 more

📦 <a id="vtorc"/>VTOrc</a>

  • VTOrc can now identify and recover from stalled disk errors.
  • VTTablets test whether the disk is writable and they send this information in the full status output to VTOrc.
  • If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary.
  • This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it.
  • To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets.
  • `--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively.
  • VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace.
  • For example, if a VTOrc is configured to watch `ks/-80`, then it would watch all the shards that fall under the keyrange `-80`.
  • + 5 more

<a id="new-default-versions"/>New Default Versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`.
  • This change was brought by [#17552](https://github.com/vitessio/vitess/pull/17552).
  • VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30` if no explicit version is set. The users can set the `mysql_server_version` flag to advertise the correct version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the patch version of MySQL 80 from `8.0.30` to `8.0.40`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 8 more

<a id="new-support"/>New Support</a>

  • Limitations:
  • When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior.
  • You can control idle connection retention for the query server’s query pool, stream pool, and transaction pool with the following flags:
  • • --queryserver-config-query-pool-max-idle-count: Defines the maximum number of idle connections retained in the query pool.
  • • --queryserver-config-stream-pool-max-idle-count: Defines the maximum number of idle connections retained in the stream pool.
  • • --queryserver-config-txpool-max-idle-count: Defines the maximum number of idle connections retained in the transaction pool.
  • The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet.
  • ---
  • + 2 more

📦 <a id="optimization"/>Optimization</a>

  • Prepared statements now benefit from Deferred Optimization, enabling parameter-aware query plans.
  • Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated.
  • Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness.
  • ---

📋 <a id="rpc-changes"/>RPC Changes</a>

  • These are the RPC changes made in this release -
  • ---

📦 <a id="reparents-prefer-not-backing-up"/>Prefer not promoting a replica that is currently taking a backup

  • Emergency reparents now prefer not promoting replicas that are currently taking backups with a backup engine other than
  • `builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be
  • promoted.
  • For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of
  • valid candidates. This means they will never get promoted - not even if there's no other candidates.
  • Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will
  • never be promoted, neither by planned nor by emergency reparents.
  • ---

📦 <a id="semi-sync-monitor"/>Semi-sync monitor in vttablet</a>

  • A new component has been added to the vttablet binary to monitor the semi-sync status of primary vttablets.
  • We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs.
  • In rare scenarios, this can block reparent operations and render the primary unresponsive.
  • More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749).
  • The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds.
  • ---

<a id="new-errors-fatal-tx"/>Wrapped fatal transaction errors</a>

  • When a query fails while being in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc), the original error is now wrapped around a `VT15001` error.
  • For non-transactional queries that produce a `VT15001`, VTGate will try to rollback and clear the transaction.
  • Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received
  • to acknowledge that the transaction was automatically rolled back and cleared by VTGate.
  • `VT09032` is returned to clients to avoid applications blindly sending queries to VTGate thinking they are still in a transaction.
  • This change was introduced by [#17669](https://github.com/vitessio/vitess/pull/17669).
  • ---

📋 <a id="topo-read-concurrency-changes"/>`--topo_read_concurrency` behaviour changes

  • The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_.
  • ---

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h).
  • While the flag will continue to accept float values (interpreted as seconds) for backward compatibility,
  • float inputs are deprecated and will be removed in a future release.
  • `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments.
  • ---

📦 <a id="vtadmin"/>VTAdmin

  • Building `vtadmin-web` now requires node >= v22.13.0 (LTS). Breaking changes from v20 to v22 can be found at https://nodejs.org/en/blog/release/v22.13.0 -- with no known issues that apply to VTAdmin.
  • Full details on the node v20.12.2 release can be found at https://nodejs.org/en/blog/release/v22.13.1.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.0/changelog.md).
  • The release includes 466 merged Pull Requests.
Vitess v21.0.4v21.0.4
frouiouifrouioui·1y ago·April 9, 2025
GitHub

# Release of Vitess v21.0.4 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.4/changelog.md). The release includes 35 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @dbussink, @frouioui, @harshit-gangal, @mattlord, @systay, @vitess-bot

Vitess v20.0.7v20.0.7
frouiouifrouioui·1y ago·April 9, 2025
GitHub

# Release of Vitess v20.0.7 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.7/changelog.md). The release includes 27 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @dbussink, @harshit-gangal, @systay, @vitess-bot

Vitess v22.0.0-rc1v22.0.0-rc1Pre-release
frouiouifrouioui·1y ago·April 8, 2025
GitHub

📦 Table of Contents

  • [Major Changes](#major-changes)
  • [Deprecations](#deprecations)
  • [Metrics](#deprecated-metrics)
  • [CLI Flags](#deprecated-cli-flags)
  • [Deletions](#deletions)
  • [Metrics](#deleted-metrics)
  • [CLI Flags](#deleted-cli-flags)
  • [gh-ost and pt-osc Online DDL strategies](#deleted-ghost-ptosc)
  • + 30 more

🗑️ <a id="deprecations"/>Deprecations</a>

  • | Component | Metric Name | Deprecation PR |
  • |:---------:|:-------------------------:|:-------------------------------------------------------:|
  • | `vtgate` | `QueriesProcessed` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRouted` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesProcessedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `vtgate` | `QueriesRoutedByTable` | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • ---

📦 <a id="deletions"/>Deletions</a>

  • | Component | Metric Name | Was Deprecated In | Deprecation PR |
  • |:----------:|:---------------------:|:-----------------:|:-------------------------------------------------------:|
  • | `vttablet` | `QueryCacheLength` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheSize` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheCapacity` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheEvictions` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheHits` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • | `vttablet` | `QueryCacheMisses` | `v21.0.0` | [#16289](https://github.com/vitessio/vitess/pull/16289) |
  • + 15 more

<a id="new-metrics"/>New Metrics

  • | Name | Dimensions | Description | PR |
  • |:-------------------------:|:-------------------------------------:|:-----------------------------------------------------------:|:-------------------------------------------------------:|
  • | `QueryExecutions` | `Query`, `Plan`, `Tablet` | Number of queries executed. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryRoutes` | `Query`, `Plan`, `Tablet` | Number of vttablets the query was executed on. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `QueryExecutionsByTable` | `Query`, `Table` | Queries executed at vtgate, with counts recorded per table. | [#17727](https://github.com/vitessio/vitess/pull/17727) |
  • | `VStreamsCount` | `Keyspace`, `ShardName`, `TabletType` | Number of active vstream. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEventsStreamed` | `Keyspace`, `ShardName`, `TabletType` | Number of events sent across all vstreams. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • | `VStreamsEndedWithErrors` | `Keyspace`, `ShardName`, `TabletType` | Number of vstreams that ended with errors. | [#17858](https://github.com/vitessio/vitess/pull/17858) |
  • + 21 more

📋 <a id="config-file-changes"/>Config File Changes</a>

  • The following fields can be dynamically changed -
  • 1. `instance-poll-time`
  • 2. `prevent-cross-cell-failover`
  • 3. `snapshot-topology-interval`
  • 4. `reasonable-replication-lag`
  • 5. `audit-to-backend`
  • 6. `audit-to-syslog`
  • 7. `audit-purge-duration`
  • + 14 more

📦 <a id="vtorc"/>VTOrc</a>

  • VTOrc can now identify and recover from stalled disk errors.
  • VTTablets test whether the disk is writable and they send this information in the full status output to VTOrc.
  • If the disk is not writable on the primary tablet, VTOrc will attempt to recover the cluster by promoting a new primary.
  • This is useful in scenarios where the disk is stalled and the primary vttablet is unable to accept writes because of it.
  • To opt into this feature, `--enable-primary-disk-stalled-recovery` flag has to be specified on VTOrc, and `--disk-write-dir` flag has to be specified on the vttablets.
  • `--disk-write-interval` and `--disk-write-timeout` flags can be used to configure the polling interval and timeout respectively.
  • VTOrc now supports specifying keyranges in the `--clusters_to_watch` flag. This means that there is no need to restart a VTOrc instance with a different flag value when you reshard a keyspace.
  • For example, if a VTOrc is configured to watch `ks/-80`, then it would watch all the shards that fall under the keyrange `-80`.
  • + 5 more

<a id="new-default-versions"/>New Default Versions</a>

  • The default major MySQL version used by our `vitess/lite:latest` image is going from `8.0.30` to `8.0.40`.
  • This change was brought by [#17552](https://github.com/vitessio/vitess/pull/17552).
  • VTGate also advertises MySQL version `8.0.40` by default instead of `8.0.30` if no explicit version is set. The users can set the `mysql_server_version` flag to advertise the correct version.
  • > ⚠️ Upgrading to this release with vitess-operator:
  • >
  • > If you are using the `vitess-operator`, considering that we are bumping the patch version of MySQL 80 from `8.0.30` to `8.0.40`, you will have to manually upgrade:
  • >
  • > 1. Add `innodb_fast_shutdown=0` to your extra cnf in your YAML file.
  • + 8 more

<a id="new-support"/>New Support</a>

  • Limitations:
  • When using `LAST_INSERT_ID(x)` in ordered queries (e.g., `SELECT last_insert_id(col) FROM table ORDER BY foo`), MySQL sets the session’s last-insert-id value according to the *last row returned*. Vitess does not guarantee the same behavior.
  • You can control idle connection retention for the query server’s query pool, stream pool, and transaction pool with the following flags:
  • • --queryserver-config-query-pool-max-idle-count: Defines the maximum number of idle connections retained in the query pool.
  • • --queryserver-config-stream-pool-max-idle-count: Defines the maximum number of idle connections retained in the stream pool.
  • • --queryserver-config-txpool-max-idle-count: Defines the maximum number of idle connections retained in the transaction pool.
  • The `querylog-mode` setting can be configured to `error` to log only queries that result in errors. This option is supported in both VTGate and VTTablet.
  • ---

📦 <a id="optimization"/>Optimization</a>

  • Prepared statements now benefit from Deferred Optimization, enabling parameter-aware query plans.
  • Initially, a baseline plan is created at prepare-time, and on first execution, a more efficient parameter-optimized plan is generated.
  • Subsequent executions dynamically switch between these plans based on input values, improving query performance while ensuring correctness.
  • ---

📋 <a id="rpc-changes"/>RPC Changes</a>

  • These are the RPC changes made in this release -
  • ---

📦 <a id="reparents-prefer-not-backing-up"/>Prefer not promoting a replica that is currently taking a backup

  • Emergency reparents now prefer not promoting replicas that are currently taking backups with a backup engine other than
  • `builtin`. Note that if there's only one suitable replica to promote, and it is taking a backup, it will still be
  • promoted.
  • For planned reparents, hosts taking backups with a backup engine other than `builtin` are filtered out of the list of
  • valid candidates. This means they will never get promoted - not even if there's no other candidates.
  • Note that behavior for `builtin` backups remains unchanged: a replica that is currently taking a `builtin` backup will
  • never be promoted, neither by planned nor by emergency reparents.
  • ---

📦 <a id="semi-sync-monitor"/>Semi-sync monitor in vttablet</a>

  • A new component has been added to the vttablet binary to monitor the semi-sync status of primary vttablets.
  • We've observed cases where a brief network disruption can cause the primary to get stuck indefinitely waiting for semi-sync ACKs.
  • In rare scenarios, this can block reparent operations and render the primary unresponsive.
  • More information can be found in the issues [#17709](https://github.com/vitessio/vitess/issues/17709) and [#17749](https://github.com/vitessio/vitess/issues/17749).
  • The monitoring interval can be adjusted using the `--semi-sync-monitor-interval` flag, which defaults to 10 seconds.
  • ---

<a id="new-errors-fatal-tx"/>Wrapped fatal transaction errors</a>

  • When a query fails while being in a transaction, due to the transaction no longer being valid (e.g. PRS, rollout, primary down, etc), the original error is now wrapped around a `VT15001` error.
  • For non-transactional queries that produce a `VT15001`, VTGate will try to rollback and clear the transaction.
  • Any new queries on the same connection will fail with a `VT09032` error, until a `ROLLBACK` is received
  • to acknowledge that the transaction was automatically rolled back and cleared by VTGate.
  • `VT09032` is returned to clients to avoid applications blindly sending queries to VTGate thinking they are still in a transaction.
  • This change was introduced by [#17669](https://github.com/vitessio/vitess/pull/17669).
  • ---

📋 <a id="topo-read-concurrency-changes"/>`--topo_read_concurrency` behaviour changes

  • The `--topo_read_concurrency` flag was added to all components that access the topology and the provided limit is now applied separately for each global or local cell _(default `32`)_.
  • ---

📋 <a id="minor-changes-vttablet"/>VTTablet</a>

  • `twopc_abandon_age` flag now supports values in the time.Duration format (e.g., 1s, 2m, 1h).
  • While the flag will continue to accept float values (interpreted as seconds) for backward compatibility,
  • float inputs are deprecated and will be removed in a future release.
  • `--consolidator-query-waiter-cap` flag to set the maximum number of clients allowed to wait on the consolidator. The default value is set to 0 for unlimited wait. Users can adjust this value based on the performance of VTTablet to avoid excessive memory usage and the risk of being OOMKilled, particularly in Kubernetes deployments.
  • ---

📦 <a id="vtadmin"/>VTAdmin

  • Building `vtadmin-web` now requires node >= v22.13.0 (LTS). Breaking changes from v20 to v22 can be found at https://nodejs.org/en/blog/release/v22.13.0 -- with no known issues that apply to VTAdmin.
  • Full details on the node v20.12.2 release can be found at https://nodejs.org/en/blog/release/v22.13.1.
  • ------------
  • The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/22.0/22.0.0/changelog.md).
  • The release includes 457 merged Pull Requests.
Vitess v21.0.3v21.0.3
vitess-botvitess-bot·1y ago·February 12, 2025
GitHub

# Release of Vitess v21.0.3 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.3/changelog.md). The release includes 13 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @vitess-bot

Vitess v20.0.6v20.0.6
vitess-botvitess-bot·1y ago·February 12, 2025
GitHub

# Release of Vitess v20.0.6 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.6/changelog.md). The release includes 12 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @vitess-bot

Vitess v19.0.10v19.0.10
vitess-botvitess-bot·1y ago·February 12, 2025
GitHub

# Release of Vitess v19.0.10 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/19.0/19.0.10/changelog.md). The release includes 10 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @vitess-bot

Vitess v21.0.2v21.0.2
vitess-botvitess-bot·1y ago·January 21, 2025
GitHub

# Release of Vitess v21.0.2 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.2/changelog.md). The release includes 33 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @dbussink, @frouioui, @rohit-nayak-ps, @vitess-bot

Vitess v20.0.5v20.0.5
vitess-botvitess-bot·1y ago·January 21, 2025
GitHub

# Release of Vitess v20.0.5 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/20.0/20.0.5/changelog.md). The release includes 22 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @frouioui, @mattlord, @vitess-bot

Vitess v19.0.9v19.0.9
vitess-botvitess-bot·1y ago·January 21, 2025
GitHub

# Release of Vitess v19.0.9 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/19.0/19.0.9/changelog.md). The release includes 23 merged Pull Requests. Thanks to all our contributors: @app/vitess-bot, @frouioui, @harshit-gangal, @mattlord, @rohit-nayak-ps, @vitess-bot

Vitess v21.0.1v21.0.1
vitess-botvitess-bot·1y ago·December 3, 2024
GitHub

# Release of Vitess v21.0.1 The entire changelog for this release can be found [here](https://github.com/vitessio/vitess/blob/main/changelog/21.0/21.0.1/changelog.md). The release includes 25 merged Pull Requests. Thanks to all our contributors: @GuptaManan100, @app/vitess-bot, @frouioui, @vitess-bot