What's new in the YugabyteDB v2024.1 STS release series

What follows are the release notes for the YugabyteDB 2024.1 release series. Content will be added as new notable features and changes are available in the patch releases of the YugabyteDB 2024.1 release series.

For an RSS feed of all release series, point your feed reader to the RSS feed for releases.

Changes to supported operating systems

YugabyteDB 2024.1.0.0 and newer releases do not support v7 Linux versions (CentOS7, Red Hat Enterprise Linux 7, Oracle Enterprise Linux 7.x), Amazon Linux 2, and Ubuntu 18. If you're currently using one of these Linux versions, upgrade to a supported OS version before installing YugabyteDB v2024.1.0. Refer to Operating system support for the complete list of supported operating systems.

New memory division settings available

YugabyteDB uses memory division flags to specify how memory should be divided between different processes (for example, YB-TServer versus YB-Master) on a YugabyteDB node as well as within processes. Using these flags, you can better allocate memory for PostgreSQL, making it more suitable for a wider range of use cases.

For new v2024.1.x universes, if you are expecting to use any nontrivial amount of YSQL, it is strongly recommended to set ‑‑use_memory_defaults_optimized_for_ysql. This changes the memory division defaults to better values for YSQL usage, and optimizes memory for the node size.

If you are upgrading a universe, you may want to instead review your memory division settings and adjust them if desired; see best practices.

In future releases, the memory division settings will be used to determine how many tablet replicas a YB-TServer can safely support; this information will power new alerts warning you about overloading nodes with too many tablet replicas and allow blocking operations that would create too many tablet replicas.

v2024.1.0.0 - June 4, 2024

Build: 2024.1.0.0-b129

Third-party licenses: YugabyteDB, YugabyteDB Anywhere

Downloads

Docker:

docker pull yugabytedb/yugabyte:2024.1.0.0-b129

Highlights

Enhanced Postgres Compatibility Mode EA

We're pleased to announce the early access of the new Enhanced Postgres Compatibility Mode in the 2024.1.0.0 release. This mode enables you to take advantage of many new improvements in both PostgreSQL compatibility and performance parity, making it even easier to lift and shift your applications from PostgreSQL to YugabyteDB. When this mode is turned on, YugabyteDB uses the Read-Committed isolation mode, the Wait-on-Conflict concurrency mode for predictable P99 latencies, and the new Cost Based Optimizer EA that takes advantage of the distributed storage layer architecture and includes query pushdowns, LSM indexes, and batched nested loop joins to offer PostgreSQL-like performance.

You can enable the compatibility mode by passing the enable_pg_parity_early_access flag to yugabyted when bringing up your cluster.

For example, from your YugabyteDB home directory, run the following command:

./bin/yugabyted start --enable_pg_parity_early_access

Note: When enabling the cost models, ensure that packed row for colocated tables is enabled by setting the --ysql_enable_packed_row_for_colocated_table flag to true.

Rollback after upgrade

Rolling back to the pre-upgrade version if you're not satisfied with the upgraded version is now GA . Refer to the Rollback phase for more information.

New features

  • yugabyted

    • Set preferred regions. The preferred region handles all read and write requests from clients. Use the yugabyted configure data_placement command to specify preferred regions for clusters.
    • Connection management integration. With connection management enabled, the Nodes page of yugabyted UI displays the split of physical and logical connections.
    • Docker-based deployments. Improves the yugabyted Docker user experience for RF-3 deployments and docker container/host restarts.
    • Simplified PITR configuration.
    • Perform all admin operations using a pass through mechanism to execute yb-admin commands.
  • DocDB Availability

    • Speed up local bootstrap. Faster rolling upgrades and restarts by minimizing table bootstrap time.
    • Hardening Raft. Reduced time window for re-tryable requests by honoring write RPC timeouts.
  • Batched nested loop joins. A join execution strategy that is an improvement on Nested Loop joins that sends one request to the inner table per batch of outer table tuples instead of once per individual outer table tuple.

  • Tablet splitting on range-sharded tables. Optimized the tablet split thresholds to speed up data ingestion.

  • Catalog Caching. Reduce master requests during PostgreSQL system catalog refresh by populating YB-TServer catalog cache. EA

  • Catalog Caching. Use TOAST compression to reduce PG catalog cache memory. Compressed catalog tuples when storing in the PG catalog cache to reduce the memory consumption. EA

  • Index backfill stability improvements. Ensure timely notification to all nodes and PostgreSQL backends before initiating index backfill to prevent missing entries during index creation.

  • Support for CDC with atomic DDL. In case of DDL being rolled back, CDC will not send records with rolled back schema.

  • Wait-On Conflict Concurrency Control. Cross-tablet fairness in resuming "waiters". Resume waiters in a consistent order across tablets, when a set of transactions simultaneously wait on more than one intent/lock on various tablets.

  • YSQL

    • Cost-based optimizer. Added support for cost based optimizer for YSQL. EA
    • DDL concurrency. Support for isolating DDLs per database. Specifically, a DDL in one database does not cause catalog cache refreshes or aborts transactions due to breaking change in another database.
    • DDL atomicity. Ensures that YSQL DDLs are fully atomic between YSQL and DocDB layers, that is in case of any errors, they are fully rolled back, and in case of success they are applied fully. Currently, such inconsistencies are rare but can happen.
    • ALTER TABLE support. Adds support for the following variants of ALTER TABLE ADD COLUMN:
      • with a SERIAL data type
      • with a volatile DEFAULT
      • with a PRIMARY KEY
    • Lower latency for large scans with size-based fetching. A static size based fetch limit value to control how many rows can be returned in one request from DocDB. EA
  • Tablet limits. Depending on the available nodes and resources such as memory and CPU, YugabyteDB can automatically limit the total number of tables that can be created to ensure that the system can be stable and performant.

  • Truncate support with PITR. The TRUNCATE command is now allowed for databases with PITR enabled.

  • DocDB memory tracking enhancements. Memory tracking in DocDB to account for 90% of memory used.

  • Enhanced Explain Analyze output. Explain Analyze when used with DIST option will also show the rows read from the storage layer, which can help diagnosing the query performance.

  • Upgrade OpenSSL to 3.0.8 from 1.1.1. OpenSSL 1.1.1 is out of support. This feature upgrades YugabyteDB to FIPS compliant OpenSSL version 3.0.8.

Change log

View the detailed changelog

Improvements

YSQL

  • Enhances logging for DDL transaction conflicts and PG catalog version mismatches by including the DDL command tag and specific log details outside of the log_ysql_catalog_versions gflag. #20084
  • Displays distinct prefix keys explicitly in the explain output, enhancing the clarity of indexing for users. #20831
  • Adds auto gflag ysql_yb_enable_ddl_atomicity_infra to control DDL atomicity feature during the upgrade phase. #21535
  • Allows YbInitPinnedCacheIfNeeded to only load the shared pinned cache, enhancing concurrent handling of DDLs in various databases. #21635
  • Now logs global-impact DDL statements that increment all database catalog versions. #21826
  • Adds a new YSQL view for YCQL statement metrics, allowing it to be joined with YCQL wait events in the yb_active_universe_history table. #20616
  • Reduces per-backend memory consumption by reinstating TOAST compression for catalogue tables. #21040
  • Avoids schema version mismatch errors during ALTER TABLE operations in cases where DDL atomicity is enabled. #21787
  • Resolves schema version mismatch errors that occur after an ALTER TABLE operation due to DDL transaction verification in non-debug builds. #21787
  • Introduces a new YSQL configuration parameter yb_enable_parallel_append to disable the unannounced feature parallel append. #21934
  • Adds new columns to localhost:13000/statements for more comprehensive database management, including user and database IDs along with varied block level statistics. #21735
  • Enables DDL atomicity feature by default by altering ysql_yb_ddl_rollback_enabled, report_ysql_ddl_txn_status_to_master, and ysql_ddl_transaction_wait_for_ddl_verification flags' defaults. #22097

YCQL

  • Now throws an error when using the unsupported GROUP BY clause in YCQL with autoflag ycql_suppress_group_by_error available for compatibility issues. #13956

DocDB

  • Introduces a new gflag to toggle on or off recommended memory defaults for increased control over individual memory settings. #22161
  • Boosts error messaging clarity when preview flags are not set in allowed_preview_flags_csv. #21484
  • Shifts xCluster-related functions from Catalocustomeranager to XClusterSourceManager for easier management. #21325
  • Adjusts TServer memory percentage from 50% to 48% for (4,8]GiB boxes and sets new recommendations for boxes over 16 GiB. #20664
  • Returns the original error messages from CreateTable and CreateTablegroup instead of an incorrect "Database not found" message. #21760
  • Updates AreNodesSafeToTakeDown to return earlier and deliver a readable error message when hitting a timeout, using a control flag, are_nodes_safe_to_take_down_timeout_buffer_ms with a default setting of 2 seconds. #21855
  • Allows for faster failover in xCluster DR by skipping the cleanup process when skip_producer_stream_deletion is set on DeleteUniverseReplicationRequestPB. Safe for upgrades and rollbacks. #22050
  • Adds a flag FLAGS_tablet_split_min_size_ratio to control tablet splitting based on SST file sizes, ensuring better control over tablet size imbalance. #21458

CDC

  • Preserves CDC stream even when all associated tables are dropped, tying its lifecycle to the database. #21419
  • Allows modification of the publication refresh interval using the cdcsdk_publication_list_refresh_interval_secs flag. #21796
  • Introduces replica identity in CDC to populate before image records, allowing table-level before image information fetching and retaining in stream metadata. #21314
  • Eliminates unnecessary NOTICE messages when setting yb_read_time from walsender, reducing message clutter. #22379
  • Enables transaction state to be cleared promptly after a table is deleted, preventing table deletion from getting stuck and resulting in faster functionality. #22095

yugabyted

  • Directly enables yb_enable_read_committed_isolation and ysql_enable_read_request_caching on yb-master and yb-tserver processes. #22061
  • Simplifies yugabyted by dropping Python2 support and transitioning the script to use Python3, replacing deprecated distutils package with shutil. #22072, #21409
  • Changes the flag name for enabling PostgreSQL feature parity from enable_pg_parity_tech_preview to enable_pg_parity_early_access in yugabyted. #21221
  • Directly enables yb_enable_read_committed_isolation and ysql_enable_read_request_caching on yb-master and yb-tserver processes. #22061
  • Simplifies yugabyted by dropping Python2 support and transitioning the script to use Python3, replacing deprecated distutils package with shutil. #22072, #21409
  • Changes the flag name for enabling PostgreSQL feature parity from enable_pg_parity_tech_preview to enable_pg_parity_early_access in yugabyted. #21221

Bug fixes

YSQL

  • Avoids failure when upgrading from version 2.14/2.16 to 2.20 by introducing a check to ensure pggate can handle RPC metrics sidecar before sending Scanned Rows count. #21229
  • Safeguards against an out-of-bounds memory write error in HashAggregate plan node with duplicate columns by rectifying array size allocation. Imported tests ensure the fix's robustness. #21122
  • Disables bitmap scan by default to prevent unwarranted selection due to lower CBO costs. #21479
  • Allows YSQL DDL operations to wait for rollback/roll-forward operations to finish before proceeding. #20033
  • Reduces unnecessary log messages when catalog_version_table_in_perdb_mode is set to true. #21481
  • Corrects an issue where certain unbatchable filters weren't detected during indexpath formation when indexpath accepted batched values from multiple relations. Requires backports to 2.20 and 2.18. #21292
  • Adds network latency cost to startup cost, yielding more accurate cost calculations in small tables. #20898
  • Allows more accurate modeling of base scan costs by taking into account the impact of storage index filters on secondary index. #20635
  • Renames the YSQL configuration parameter ddl_rollback_enabled to yb_ddl_rollback_enabled for specificity. #21480
  • Resolves colocation option issues in table creation linked to table rewriting and partitioning. Enhances the defGetBoolean function to parse string values "0" and "1" as false and true respectively, and shifts a verification step to a earlier spot in the CREATE TABLE execution path, ensuring successful table partition creation. #20302, #20914
  • Exposes the YSQL configuration parameter yb_enable_optimizer_statistics as a gflag ysql_yb_enable_optimizer_statistics. #21650
  • Corrects checks in YbIsScanCompatible to ensure the right-hand side (RHS) of all bound index conditions, not just inequalities, fits into the left-hand side (LHS) datatype. #21758
  • The deadlock issue occurring when both a table and its index are deleted concurrently in yb-master has been resolved. #21663
  • Fixes a bug that caused incorrect setting of global catalog version mode on tserver start. #21850
  • Deprecates the unused enable_pg_savepoints flag to prevent irregular system behaviour. #20918
  • Refines the YbGetOrdinaryColumnsNeedingPgRecheck condition to align with the ybIsTupMismatch implementation, ensuring Postgres rechecks index conditions when the "preliminary check" is skipped due to an invalid target key attnum. #21451
  • Reduces the frequency of schema version mismatch errors during consecutive DDL operations by ensuring the up-to-date schema is fetched. #21706
  • Allows usage of YsqlDdlRollbackEnabled in pggate C++ code by correctly passing the result of YbDdlRollbackEnabled, reducing DDL atomicity g-flag issues in RF 1 clusters. #21706
  • Ensures pushed down RowCompareExpressions correctly enforce non-null column references, rectifying previous behavior and enhancing data accuracy. #21847
  • The Postgres process no longer crashes when running a "show all" command due to correct placement of the yb_enable_ddl_atomicity_infra description. #21947
  • Adds a new GFlag ysql_min_new_version_ignored_count to prevent a tserver crash caused by the downward shift in yb-master's catalog version, often surfacing post a PITR restore operation. #21776
  • Adjusts the value of YB_AT_REWRITE_ALTER_PRIMARY_KEY to prevent flag clashes and accommodate future upstream PG flags. #22086
  • Fills in the "relation" column in pg_locks with the correct table OID after a table rewrite. #22081
  • Prevents query layer retries for multi-statement queries to avoid redoing whole queries, ensuring idempotence. #21361
  • Prevents unnecessary CPU cycles and log flooding by not reading pg_yb_catalog_version when enable_ysql=false. #22213
  • Corrects the log message for successful column drop operations, ensuring accurate representation of DDL operations. #22243

YCQL

  • Allows the deletion of the Cassandra role in YCQLsh without it regenerating upon cluster restart, by adding a flag to mark if the role was previously created. #21057

DocDB

  • Ensures Create Table operation fails if Alter Replication encounters an error, enhancing the reliability of replication setup. #21732
  • Converted the ysql_skip_row_lock_for_update to an auto-flag to resolve compatibility issues during upgrade, preventing incorrect DB record creations that can affect row visibility and integrity. #22057
  • Modifies memory consumption calculations for pending operations to ensure accurate rejection of new writes at bootstrap, preventing loading failures. #21254
  • Trims large error messages in AsyncRpc::Failed to prevent hitting memory limit and resulting unavailability. #21402
  • Renames and updates the description of the gflag min_secustomerent_size_to_rollover_at_flush for clarity. #21691
  • Changes the class of enable_automatic_tablet_splitting gflag from kLocalPersisted (class 2) to kExternal (class 4) to eliminate setup issues with XCluster configurations. #22088
  • Fixes a segmentation fault in yb-master by checking for a null pointer before dereferencing it, addressing an issue in the CDC run on 2.23.0.0-b37-arm. #21648
  • Allows DML operations on non-replicated databases and blocks DML only on databases in transactional xCluster replication STANDBY mode. Now only databases part of an inbound transactional xCluster replication group in the xCluster safe time map will have DML operations blocked. Also, certain attributes are moved from tserver to TserverXClusterContext. #21245
  • Adds a TSAN suppression to manage the apparent race condition in the function boost::regex_match. #21585
  • Eliminates potential FATAL errors during reported tabletPB creation by ensuring retrieval of schema version is atomic. #21340
  • Enables the session to outlive the callback by holding a shared pointer to it, preventing potential crashes during concurrent DML queries. #21103
  • Prevents yb-master crash by ensuring background task isn't deleted before the callback is invoked. #21773
  • Enables callback completion wait in PollTransactionStatusBase during shutdown to prevent unexpected process termination. #21773
  • Allows viewing of the rpc bind addresses in the master leader UI, especially beneficial in cases like k8s where the rpc bind address with the pod DNS is more useful than the broadcast address. #21959
  • Reduces unnecessary logging during checkpoint operations by lowering INFO level logs to DEBUG_LEVEL, enhancing log readability. #21658
  • Prevents fatal errors by skipping ReserveMarker/AsyncAppend if the tablet peer has already been shut down. #21769
  • Enhances YSQL operation by refining task shutdown procedures and avoiding unnecessary task aborts. #21917
  • Enhances load balancer efficiency by refining validation logic to block tablet replica additions only for those with a pending delete in progress on the same server, avoiding potential slowdowns during mass tablet replica moves. #21806
  • Avoids multiple destruction of the same database connection, preventing system crashes due to simultaneous connection failures. #21738
  • Stops fatal errors caused by the re-use of remote log anchor session during remote bootstrap from a non-leader peer. This fix ensures shared pointers are accurately tracked for tablet_peer objects using the = operator, preventing unintentional destruction of underlying objects. #22007
  • Corrects a bug causing some tablet metrics to display incorrect metric_type attribute. #21608
  • Enables the skip_table_tombstone_check for colocated tables to prevent errors. #22115
  • Initializes prev_op to UNKNOWN to prevent AlmaLinux 8 fastdebug gcc11 compilation failures. #21811
  • Delays min_running_ht initialization until after the successful completion of tablet bootstrap to prevent unexpected behaviors. #22099
  • Resolves the issue of pg_locks query failure due to missing host node UUID in distributed transactions. #22181
  • Eliminates latency spikes in conflicting workloads by preventing redundant ProbeTransactionDeadlock rpcs. #22426

CDC

  • Ensures deletion of MemoryContext after each GetChanges RPC to prevent memory leaks. #22328
  • Fixes a memory leakage issue in the walsender process by deep freeing the cached record batch after streaming to the client. #21530
  • Adds more debug logs in the walsender to aid in investigating issues like linked data loss. #21465
  • Adds more debug logs for stress run debugging, skips RollbackToSubTransaction RPC to local tserver if not needed, and enhances debugging of the ListReplicationSlots function. #21780, #21519, #21652
  • Removes table level attributes from CDCSDK metrics to avoid tserver crash due to failed DCHECK assertion. #22142
  • Fixes the segmentation fault in walsender for dynamic table addition by refreshing stored replica identities and preventing a race condition when creating dynamic tables. #22273
  • Solves an issue where CDCSDK incorrectly deduces tablets as not interesting for stream before reaching the configured time limit. #22383
  • Enables support for streaming update operations via Walsender, enhancing PG compatible logical replication support. Now executes schema changes in the logical replication protocol and maintains a record of changes in each table's read_time_ht hybrid time in the PG catalog. Includes handling late ALTER TABLE responses and addressing incomplete cleanup in the case of a stream creation failure. This feature is disabled under test flag ysql_TEST_enable_replication_slot_consumption. #20725
  • Prevents failures in decoding change events by refreshing cached_schema_details when executing a new GetChanges request if the client indicates a necessity for the schema. #20698

yugabyted

  • Prevents SyntaxWarning and exceptions when incorrect advertise_address is given by adjusting string literals and adding check for errors. #22552, #22210, #22230

Other

  • Fixes hidden split parent tablets wrongly appearing as leaderless in the master's leaderless tablet endpoint, ensuring accurate load balance status and preventing potential issues with Point-in-Time Recovery (PITR) operations. #21371