vitessio/vitess
Vitess is a database clustering system for horizontal scaling of MySQL.
# 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
# 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
📦 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
📦 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
📦 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
📦 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
# 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
# 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
# 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
# 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
# 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
📦 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.
📦 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.
📦 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.
# 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
# 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
# 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
📦 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.
📦 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.
📦 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.
# 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
# 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
📦 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.
# 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
# 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
# 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
# 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
# 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
# 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
# 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
