Project post by Vitess Maintainers
We are pleased to announce the general availability of Vitess 17.
Major Themes in Vitess 17
In this release of Vitess, several significant enhancements have been introduced to improve the compatibility, performance, and usability of the system.
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 & 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 2x 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.
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.
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-typesflag to control the types of tablets influencing the throttler.
- VTOrc has had many bug fixes and is now able to handle dead primary recoveries much faster than before.
- We migrated vtadmin-web from create-react-app to Vite which allows us to easily keep dependencies up to date and vulnerability-free.
You can find the full set of fixes and improvements in the release notes.
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.