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
- 70cceee: Fixed the PostgreSQL
RowDescriptionso a column's type modifier, such as the precision and scale of a numeric value, matches the upstream's in proxied, shallow cache, and deep cache results. - bc400d2: PostgreSQL
CIDRvalues are now supported when shallow caches are accessed over the extended query protocol. - 53f6366: Readyset now refuses and proxies the same row operations that the upstream refuses. Refused forms include comparisons with non-row values, comparisons between rows of different sizes, and arithmetic operations on rows.
- d4c8cd5: Readyset now caches row comparisons that mix literals and columns, such as
('a', b) = ('c', 'd'), instead of refusing them with an error about placeholders. - 252e491: Readyset now caches row comparisons written with literals or placeholders on the left, such as
($1, $2) = (a, b), as lookups. - 4a231cf: Added dual-password support for MySQL deployments.
ALTER READYSET MODIFY USER ... RETAIN CURRENT PASSWORDkeeps the old password valid alongside the new one, and... DISCARD OLD PASSWORDretires it. Naming a user twice in--allowed-usersstarts a deployment mid-rotation. Thereadyset.usersview reports rotations in progress in a newhas_old_passwordcolumn. - cea2138: Improved throughput for queries sent as text, which previously serialized on the schema catalog lock.
- 62dcdff: Changed the default
--memory-limitfrom unlimited to 80% of the memory available to Readyset (the container limit, if set). Set--memory-limitto0to keep the previous unlimited behavior. - 4130517: The shallow cache now uses half of
--memory-limitin deep and deep-then-shallow cache modes when--shallow-memory-percentis not set. It was previously unbounded in these modes. - 0fadb35: Readyset now returns rows written after the first read for a cache that joins a subquery containing
DISTINCT,GROUP BY, orLIMITto a table. - 3db1563: Readyset now serves a prepared statement whose parameter is compared against a join key that the query projects under an alias, instead of proxying it.
- fd94ee3: Readyset now returns every row selected by a subquery with
ORDER BYandLIMITwhen the query filters or joins on it. - 7463e04: Readyset now serves a MySQL cache created with
?placeholders instead of sending its reads to the upstream. - 65daac0:
CREATE CACHEandEXPLAIN CREATE CACHEstatements are now rejected with an error when the session is connected to thereadysetschema. - 1d8f8e6: Added an admin SQL port. Admin sessions connect to the
readysetschema and cannot run queries against the upstream database. Configure the port with--admin-address(default:"127.0.0.1:6036") and--admin-credentials(default:"admin:admin"). The port can be disabled via--admin-address disabled. - 8decac7: Added the
ALTER READYSET SHUTDOWN [RESET]command, which can only be executed via the admin port. - d030b62: PostgreSQL built-in
pointvalues are now supported when shallow caches are accessed over the extended query protocol. - 5a2e886: PostgreSQL
boxvalues are now supported when shallow caches are accessed over the extended query protocol. - 5ebf356: PostgreSQL
pathvalues are now supported when shallow caches are accessed over the extended query protocol. - 5b82241: Improved throughput for queries sent as text, which previously serialized on a shared lock.
- 69a69d5: Fixed an issue that prevented Readyset from starting in shallow mode with RLS enabled against a PostgreSQL upstream whose certificate is signed by a private CA.
- 3f7ef66:
--upstream-db-urland--cdc-db-urlnow accept a comma-separated list of MySQL servers, each with an optional|<weight>suffix. - c659407: Added
--upstream-connect-timeout, which limits how long the adapter waits for an upstream connection to be established. - 3f31159: Removed a query to the upstream MySQL database that was issued for every new client connection.
- 63512f1: Added
--listen-backlog(default:4096). Readyset previously queued at most 128 pending connections per listen address, so connection bursts could leave clients stalled until their connection timeout. - cf26ddc: Fixed an issue that could cause MySQL TLS connections to hang indefinitely during the handshake under load.
- f706aa6: Added
--client-connect-timeout-ms. MySQL clients that do not complete the handshake within this timeout (default: 10 seconds) are disconnected. - 3d1cc5d: PostgreSQL clients that do not complete the handshake within
--client-connect-timeout-ms(default: 10 seconds) are disconnected. - 1ef16f3: Queries with an unqualified column that matches several tables are now rejected, as they are in MySQL and PostgreSQL. Names in
USING,ORDER BY,GROUP BY, andHAVINGare now resolved as they are in those databases. - 77e2c28: Deep caches created using a query ID from
SHOW PROXIED QUERIES, viaCREATE CACHE FROM <query id>, are now recreated on restart. - 1d1def7: Fixed a bug that disconnected MySQL clients using prepared statements to read a deep cache when the query involved a
NOT NULLcolumn on the right side of aLEFT JOIN, or a view containing aUNION ALLquery where a column wasNULLin one branch andNOT NULLin another. - 1d1def7: Fixed the metadata returned for columns read from a deep cache by a query that reads from a view containing a
UNION ALL. For MySQL, we now correctly omit thePRI_KEY,UNIQUE_KEY,AUTO_INCREMENT, andNO_DEFAULT_VALUEcolumn definition flags instead of picking the flags based on one of theUNION ALLbranches. For PostgreSQL, we now correctly return type modifier metadata for a column only if it is the same across allUNION ALLbranches, instead of picking it arbitrarily from a single branch. - d992004: Fixed the propagation of MySQL column definition flags and length information, and PostgreSQL row description fields, for deep caches of queries that have a
LIMIT. This issue could cause type-casting problems with some MySQL drivers that expected to cast aTINYINT(1)to a boolean but instead received an incorrect default width ofTINYINT(4). - 5ef2a8f: Added replication of MySQL tables with
ZEROFILLcolumns and basic deep cache support for queries that use the column as a key or in a comparison. - cd3e647: Added deep cache support for MySQL
ZEROFILLcolumns in the result set, with the same zero padding as in MySQL. - 67a5ef1: Fixed an issue that prevented queries over a view created after Readyset started from ever being shallow cached on a PostgreSQL upstream.
- c5e257d: Fixed an issue that caused shallow cache entries to be shared between sessions with differing values for several session variables that affect query results.
- 183a9e6: Setting
sql_auto_is_nullto a true value is now treated as an unsupportedSETstatement. - b9540a3: Fixed an issue that caused shallow cache entries to be shared between PostgreSQL sessions with differing
timezone_abbreviationsorintervalstylesettings. - 308ab73: Fixed an issue that caused shallow cache entries to be shared between PostgreSQL sessions with differing
default_text_search_configsettings. - f8813de: Added support for integer arithmetic when setting session variables that change query results (e.g.,
SET group_concat_max_len = 3 * 1024). - e305fe1: Shallow cache entries are now keyed on the MySQL upstream's global values of the session variables that affect results, as of the latest health check.
- a8ca531: Shallow cache entries are now keyed on the
IntervalStylethat a PostgreSQL connection inherits from the upstream. - 0d73ab2: Limited the query logger's backlog to 65,536 events; events beyond that limit are dropped and counted in the new
readyset_query_log_dropped_eventsmetric. - c857c36: Key column DDL now renders names without qualification to match MySQL and PostgreSQL. Also suppressed some warning logs that incorrectly implied we would re-snapshot all tables on restart if any table with a
FOREIGN KEYexisted.