Version: V4.3.3
RPM version: obproxy-ce-4.3.3.0-5
Version location
ODP 4.3.3 is the latest version of ODP 4.3.x. It is recommended for use in POC testing and production environments for both cloud and on-premises businesses. The SQL proxy has been enhanced with new capabilities for read/write separation between primary and standby databases, allowing cloud users to achieve read/write separation using a single connection string. This improves the overall functionality of primary/standby database products. Additionally, the routing capabilities have been optimized for scenarios such as replication table routing and weak read routing within transactions, meeting the routing needs for special tables and specific scenarios. Support has been added for more character sets and collations, including utf16le, sjis, dec8, utf8mb4_german2_ci, and HKSCS. Furthermore, the routing accuracy for expressions such as to_days() and timestamp has been enhanced. Monitoring information, including PS cache and routing details, has been enriched to improve diagnostic usability. Multiple protocol-related issues have been fixed to enhance stability. For the RPC proxy, different authentication logic is supported for cloud and on-premises users, and the Auth authentication mechanism has been improved. New OBKV-Redis protocol commands have been added, and their processing logic has been optimized to improve performance. ODP 4.3.3 is now fully compatible with Rocky Linux 9.
Key features
SQL proxy
Read/write separation between primary and standby databases
Currently, cloud platforms support business disaster recovery across regions for primary/standby clusters, but they lack the flexibility of ODP. In addition to database switching, other scenarios require switching domain names. As the number of primary/standby database users in the cloud increases, it is necessary to enhance the capabilities of primary/standby database products to support read/write separation and primary/standby switching using a single connection string.
ODP V4.3.3 introduces the read/write separation feature between primary and standby databases. It allows users to automatically log in to local primary/standby clusters without changing the login connection string and supports automatic read/write separation across primary/standby clusters. To reduce bandwidth costs across regions, a compression protocol is used between ODP and OceanBase Database.
The read/write separation feature between primary and standby databases is applicable only to the primary/standby tenant architecture of OceanBase Database 4.x and supports the eventual consistency of weak read requests.
Enhanced routing capabilities
OceanBase Database Proxy (ODP) V4.3.3 is the latest version of the ODP V4.3.x series and is recommended for on-cloud and on-premises business in a proof of concept (POC) test or production environment. The SQL proxy allows an on-cloud user to enable read/write splitting between the primary and standby tenants by using one connection string, thus enriching the capabilities of the primary and standby tenants. Routing capabilities are improved in the following ways: replicated table-based routing and routing for weak-consistency reads within a transaction are optimized to meet your requirements for routing of special tables in specific scenarios; more character sets and collations such as utf16le, sjis, dec8, utf8mb4_german2_ci, and HKSCS are supported; accurate routing is realized for the TO_DAYS() and TIMESTAMP expressions. Abundant monitoring information such as the prepared statement (PS) cache and routing information improves the usability of diagnostics. Several protocol-related issues are fixed to improve stability. ODP V4.3.3 is fully compatible with Rocky Linux 9.
ODP V4.3.3 supports the correct routing of SQL requests in the utf16le, sjis, dec8, utf8mb4_german2_ci, and HKSCS character sets and collations.
Optimized replication table routing
Replication tables are suitable for read-heavy scenarios. Queries and reads on local replicas of replication tables perform best. Therefore, replication tables generally use random routing. However, within a transaction, if a replication table has been modified, random routing to a Follower node may result in reading outdated data. To address this, ODP V4.3.3 optimizes the routing strategy by routing replication table query requests to the Leader node when a replication table has been modified within a transaction.
Optimized weak read routing within transactions
In a transaction, if a write statement or SELECT FOR UPDATE statement has been executed, subsequent read statements that want to read the uncommitted modifications of the current transaction must use strong read routing, where ODP routes the read request to the Leader node. If the read request is set to weak read, it will be randomly routed to a Follower node. ODP V4.3.3 optimizes this logic by routing weak read statements after write requests in a transaction using the strong read strategy, i.e., routing to the Leader node.
Expanded support for accurate routing of more expressions: to_days() function, timestamp 'xxxxx' expression, and not in expression.
BINLOG support
Compatibility with log_bin_basename variable and support for show master logs syntax
Support for configuring login credentials for the binglog service
Enhanced diagnostic usability
PS cache monitoring
In the PS protocol scenario, if clients use a large amount of PS cache without closing it promptly, it can occupy a significant amount of memory and potentially lead to performance issues. These issues are also difficult to troubleshoot. To improve the efficiency of troubleshooting PS protocol issues, ODP adds PS cache information to Prometheus monitoring, including the number and size of allocated PS caches. It periodically outputs this monitoring data externally and supports the internal SHOW PROXYPS command for SQL-based queries of PS-related SQL, parsing results, and memory usage, enhancing usability.
For more information about the SHOW PROXYPS command, see SHOW PROXYPS.
Routing information monitoring
ODP adds statistics on various routing scenarios to Prometheus monitoring, including the number of requests for routing within transactions, secondary routing, random routing after failed partition calculation, and routing requests for global index tables. This helps in troubleshooting routing issues.
RPC proxy
- Enhanced OBKV-Redis commands
Compatibility changes
- Fixed the issue where a PS cache was not created for a COM_STMT_PREPARE_EXECUTE request.
Parameter |
Change type |
Description |
|---|---|---|
| enable_standby_read_write_split | New | Specifies whether to enable read/write splitting between the primary and standby tenants. Default value: false. The setting takes effect only for new connections. |
| enable_check_cluster_name | New | Specifies whether to verify the cluster name in a three-segment string used for login. |
| rootservice_cluster_name | Modified | Specifies the cluster where the standby tenant to which the service name is to be mapped resides when multiple standby tenants exist across multiple clusters. |
Fixed the issue where COM_STMT_SEND_LONG_DATA requests exceeding 16 MB could not be forwarded.
Fixed the issue where ODP could not process two consecutive MySQL packets, leading to request errors.
Fixed the issue where ODP would hang after calling the mysql_change_user interface when forwarding the AuthSwitchResponse failed.
Fixed the issue where a MySQL 8.0.22 client could not connect to an OceanBase Database instance with a password through ODP.
Fixed the issue where ODP did not randomly disperse SQL requests when the partition key was missing in a partitioned table.
Fixed the issue where routing was inaccurate when the tablet_id was the same for different tenants in the same cluster.
Fixed the issue where remote SQL requests were not routed through distributed transaction routing in the PS protocol.
Fixed the issue where a disconnection occurred when a retry failed to validate the distributed transaction routing in an anonymous block.
Fixed the issue where the client would hang after the BMSQL test ended, preventing the test from ending normally.
Fixed the issue where an error occurred when sending data exceeding 16 MB through the send_long_data method in the GO client.
Fixed the issue where routing calculation hangs when the character set or data type is not supported.
Fixed the issue where the detected transaction status is inaccurate when a cross-server transaction request handling exception occurs in distributed transaction routing.
Fixed the issue where no PS cache is created when a
COM_STMT_PREPARE_EXECUTErequest is executed.Fixed the issue where an existing prepared statement is dropped by mistake when the
PREPAREstatement attempts to create a statement with the same name but fails, leading to an error during the execution of theDEALLOCATE PREPAREstatement.Fixed the issue where a
COM_STMT_SEND_LONG_DATArequest exceeding 16 MB in size cannot be forwarded.Fixed the issue where an error is returned because ODP does not support two consecutive requests in the MySQL packet format.
Fixed the issue where the driver hangs after calling the
mysql_change_user()operation when ODP fails to forward theAuthSwitchResponsepacket.Fixed the issue where a MySQL 8.0.22 client fails to connect to OceanBase Database with a password from ODP.
Fixed the issue where ODP does not randomly distribute SQL requests when the partitioning key of a partitioned table is missing.
Fixed the issue where routing is inaccurate when the tablet IDs of partitioned tables of different tenants in one cluster are the same.
Fixed the issue where SQL requests are executed in remote mode because distributed transaction routing is not enabled for routing requests when the PreparedStatement and PrepareExecute protocols are enabled.
Fixed the issue where distributed transaction routing for SQL requests in anonymous blocks fails, causing a disconnection after retry validation failure.
Fixed the issue where the client hangs after the BenchmarkSQL test is completed.
Fixed the issue where an error is returned when the GO client sends data larger than 16 MB through a
send_long_datarequest.