Announcing Vitess 17
In this release of Vitess, several significant enhancements have been introduced to improve the compatibility, performance, and usability of the system.
GA announcements
The VTTablet settings connection pool feature, introduced in v15, is now enabled by default in this release. This feature simplifies the management and configuration of system settings, providing users with a more streamlined and convenient experience.
The new Topology Service based Tablet Throttler (AKA lag throttler) is now GA and enabled by default.
MySQL compatibility improvements
Vitess now supports additional statements such as Prepare
, Execute
, and Deallocate
along with many additional functions including comparison operators, numeric functions, date and time functions, JSON
functions, and more.
The query planner has undergone several improvements resulting in more efficient query plans, especially for complex operations such as aggregation, grouping, and ordering – leading to improved query performance. The evaluation engine used when executing queries has also been significantly improved – showing an over a 2× performance improvement. We also added a new virtual machine based engine which will eventually replace the AST based one and offer even greater performance improvements (not enabled by default in v17).
Schema tracking has also been enhanced in this release, enabling the Vitess query planner to quickly detect any changes in the database schema. This ensures that queries remain up-to-date with the latest schema modifications, improving overall data consistency.
Replication enhancements
Vitess now supports much more efficient MySQL replication within each replica set that corresponds to a Vitess shard.
We have added support for the noblob
binlog_row_image
type. If you are using TEXT
, BLOB
, or JSON
columns, this can drastically reduce the overall size of your binary logs, reducing disk I/O and storage along with network I/O, and related CPU overhead. Unlike the default (image type full
), where each row change event contains the full BEFORE
and AFTER
images for all columns, with noblob
these large columns are only included in the event if they are modified.
We have also added support for the new binary log transaction compression added in MySQL 8.0. Zstandard
is used to compress the contents of each GTID
before storing the compressed events in the binary log. This also greatly reduces disk I/O and storage along with network I/O – at the cost of some extra CPU cycles when reading and writing the log.
These features can also be combined for even greater efficiency gains. Aside from the reduced hardware/service costs around disk, network, and CPU resources these new features make it practical to retain binary logs for a longer period of time. This can aid in backups, restores, and disaster recovery related operations.
Usability enhancements
Traffic throttling improvements
- The transaction throttler can now throttle DMLs even in autocommit mode. Previously it only throttled on explicit
BEGIN
statements. - The transaction throttler has a new
--tx-throttler-tablet-types
flag to control the types of tablets influencing the throttler.
VTorc improvements
- VTOrc has had many bug fixes and is now able to handle dead primary recoveries much faster than before.
VTAdmin improvements
- We migrated vtadmin-web from
create-react-app
to Vite which allows us to easily keep dependencies up to date and vulnerability-free.
Other improvements
You can find the full set of fixes and improvements in the release notes: https://github.com/vitessio/vitess/releases/tag/v17.0.0.
Try it out
We are very pleased with the great strides we have made with v17 and hope that you will be as well. We encourage all current users of Vitess and everyone who has been considering it to try this new release! We also look forward to your feedback, which can be provided via Vitess GitHub issues or the Vitess Slack.