Release Notes
Readyset is currently released as a docker container and Linux distro binary packages. For installation with docker, see the Install with Docker documentation. Available Linux distribution binary packages for x86_64/amd64 and arm64/aarch64 include deb package for Ubuntu 22.04, Debian 12 and later, and rpm packages for Amazon Linux 2023 and RedHat 9. See package installation instructions.
What's New
- 642d626: Fixed
ORDER BYon window function aliases and otherSELECTexpression aliases being incorrectly rejected with "not functionally dependent on GROUP BY" when the query also contained aggregates. - c579afd:
AVGqueries withWHERE IN,range, orBETWEENconditions can now be cached. - 305ffa6: Fixed the TopK operator returning incorrect row counts after deletes when queries had no
GROUP BYclause and contained duplicate values in theORDER BYcolumn. - d0bde24: Fixed SELECT DISTINCT with ORDER BY and LIMIT returning fewer rows than expected when the table contained many duplicate values.
- 00d661b:
json_object_aggandjsonb_object_aggqueries with WHERE IN clauses can now be cached. - dea67be: Added the
FLUSH ALL SHALLOW CACHESSQL command, which clears cached data for all shallow caches without removing cache definitions. - 8bd42e8: Fixed a bug in shallow cache where duplicate refresh callbacks could accumulate for the same cache key, causing unbounded growth in upstream query volume over time.
- 6e06f05: MySQL replication now batches row events within a transaction into a single RPC instead of issuing one RPC per row. Initial tests showed up to a 21x throughput improvement for large transactions; actual gains will vary depending on hardware and workload. Controlled by the new
--replication-batch-sizeflag (default: 50,000). - 3311c09: MySQL replication now coalesces consecutive small transactions into a single RPC batch via group commit. The first committed transaction starts a short wait window (default: 500 µs) to collect additional transactions before flushing. Compressed transactions participate in group commit alongside uncompressed ones. Initial tests showed up to a 7.6x throughput improvement for single-row autocommit workloads; actual gains will vary depending on hardware and workload. Controlled by
--group-commit-max-trx(default: 20) and--group-commit-wait-us(default: 500). - fa98b0f: Fixed
GROUP_CONCATto respect the upstream MySQL database'sgroup_concat_max_lensetting instead of always using the 1024-byte default. - d53a37f: Fixed
SUBSTRINGto implicitly cast non-string types (INT, DOUBLE, DATE) to strings, matching MySQL behavior. - 5a3627e: Fixed AVG and SUM aggregate output precision and scale to match upstream Postgres and MySQL behavior for all input types.
- 52568cd: Fixed SUM and AVG aggregate functions to correctly return NULL when all input values are NULL, per the SQL standard.
- 7dbd76f: Added MILLISECONDS (MS) syntax to shallow cache creation.
- 8b20685: Fixed parsing of MySQL UNIQUE KEY column constraints (both inline forms like
x INT UNIQUE KEYand suffix forms likeUNIQUE KEY name (col) USING {HASH, BTREE}). - 0fc8c04: Added support for MySQL INVISIBLE columns (MySQL 8.0.23+). Readyset now tracks the invisible attribute on columns, excludes them from SELECT expansion (matching MySQL behavior), and uses explicit column lists during snapshots to ensure invisible columns are correctly replicated.
- 861e472: In-request-path migration now auto-creates shallow caches when
--cache-mode=shallow. - ca0b9d1: Readyset now includes a query ID label in recorded query metrics in the default (non-verbose) query logging mode, allowing easier analysis of query workloads. The count column in
SHOW PROXIED QUERIESandSHOW CACHESnow displays meaningful values by default. - ad41730: Fixed TIMESTAMP values being converted using the server's system timezone instead of the client's
@@time_zonesession variable. - fd5dfaf: Added
readyset.upstream_query_statsandreadyset.cached_query_statsvirtual relations (vrels) for querying per-query execution metrics via SQL. - fa4c7a7: Added support for MySQL GTID-based replication. When
gtid_modeis ON upstream and--require-gtidis set, Readyset tracks replication progress using the executed GTID set instead of the binlog file and position, enabling replication to survive upstream source failover. Includes crash recovery with per-event index tracking (controlled by--max-gtid-rows-to-skip, default: 10,000) and supports MySQL 8.4+ tagged GTIDs (GTID_TAGGED_LOG_EVENT). - 5255ad8: Added runtime failover commands for managing the replicator without restarting Readyset. New SQL syntax:
ALTER READYSET STOP REPLICATIONandALTER READYSET START REPLICATIONpause and resume the replicator;ALTER READYSET SET REPLICATION POSITION '<pos>'resumes from a specific binlog file/position or GTID set (e.g., after an upstream failover);ALTER READYSET CHANGE CDC TO '<url>'repoints Readyset to a new upstream database. On restart, the replicator skips re-snapshotting and resumes from the stored position. A newReplicationStatusfield (Running/Stopped/Disabled) is exposed viaSHOW READYSET STATUS. - 5c32f0e: Readyset's MySQL adapter no longer performs the RSA-based
caching_sha2_passwordfull-auth exchange. Clients must authenticate via the pre-populated fast-auth cache.