github readysettech/readyset stable-260423

7 hours ago

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 BY on window function aliases and other SELECT expression aliases being incorrectly rejected with "not functionally dependent on GROUP BY" when the query also contained aggregates.
  • c579afd: AVG queries with WHERE IN, range, or BETWEEN conditions can now be cached.
  • 305ffa6: Fixed the TopK operator returning incorrect row counts after deletes when queries had no GROUP BY clause and contained duplicate values in the ORDER BY column.
  • d0bde24: Fixed SELECT DISTINCT with ORDER BY and LIMIT returning fewer rows than expected when the table contained many duplicate values.
  • 00d661b: json_object_agg and jsonb_object_agg queries with WHERE IN clauses can now be cached.
  • dea67be: Added the FLUSH ALL SHALLOW CACHES SQL 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-size flag (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_CONCAT to respect the upstream MySQL database's group_concat_max_len setting instead of always using the 1024-byte default.
  • d53a37f: Fixed SUBSTRING to 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 KEY and suffix forms like UNIQUE 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 QUERIES and SHOW CACHES now displays meaningful values by default.
  • ad41730: Fixed TIMESTAMP values being converted using the server's system timezone instead of the client's @@time_zone session variable.
  • fd5dfaf: Added readyset.upstream_query_stats and readyset.cached_query_stats virtual relations (vrels) for querying per-query execution metrics via SQL.
  • fa4c7a7: Added support for MySQL GTID-based replication. When gtid_mode is ON upstream and --require-gtid is 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 REPLICATION and ALTER READYSET START REPLICATION pause 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 new ReplicationStatus field (Running/Stopped/Disabled) is exposed via SHOW READYSET STATUS.
  • 5c32f0e: Readyset's MySQL adapter no longer performs the RSA-based caching_sha2_password full-auth exchange. Clients must authenticate via the pre-populated fast-auth cache.

Don't miss a new readyset release

NewReleases is sending notifications on new releases.