OceanBase
English日本語简体中文
Docs Home
Products
Integrations
Release Notes

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service
OceanBase DatabaseOceanBase Cloud ToolsConnectors and MiddlewareLifecycle Support Policy

OceanBase Database Proxy

V4.3.1
  • What is ODP?
  • Installation and deployment
    • Overview
    • Deploy ODP by using obd
    • Deploy ODP by using OCP
    • Deploy ODP by using the CLI
    • Deployment modes
  • Basic operations
  • Configuration parameter
    • View and modify parameters
    • Parameter summary
    • Global parameters
      • automatic_match_work_thread
      • block_thread_num
      • cache_cleaner_clean_interval
      • check_tenant_locality_change
      • client_max_connections
      • client_max_memory_size
      • client_session_id_version
      • client_sock_option_flag_out
      • client_tcp_keepcnt
      • client_tcp_keepidle
      • client_tcp_keepintvl
      • client_tcp_user_timeout
      • cluster_count_high_water_mark
      • cluster_expire_time
      • config_server_refresh_interval
      • congestion_fail_window
      • congestion_failure_threshold
      • congestion_retry_interval
      • connection_diagnosis_option
      • connect_observer_max_retries
      • current_local_config_version
      • default_buffer_water_mark
      • default_inactivity_timeout
      • delay_exit_time
      • delay_update_entry_interval
      • detect_server_timeout
      • digest_sql_length
      • enable_abort_conn_info
      • enable_async_log
      • enable_async_pull_location_cache
      • enable_bad_route_reject
      • enable_binlog_service
      • enable_cached_server
      • enable_causal_order_read
      • enable_client_connection_lru_disconnect
      • enable_client_ip_checkout
      • enable_cluster_checkout
      • enable_compression_protocol
      • enable_congestion
      • enable_connection_diagnosis
      • enable_cpu_isolate
      • enable_cpu_topology
      • enable_extra_prometheus_metric
      • enable_flow_control
      • enable_full_link_trace
      • enable_full_username
      • enable_get_rslist_remote
      • enable_global_ps_cache
      • enable_index_route
      • enable_monitor_stat
      • enable_ob_protocol_v2
      • enable_ob_protocol_v2_with_client
      • enable_obproxy_rpc_service
      • enable_partition_table_route
      • enable_performance_mode
      • enable_pl_route
      • enable_primary_zone
      • enable_prometheus
      • enable_proxy_scramble
      • enable_qa_mode
      • enable_qos
      • enable_report_session_stats
      • enable_reroute
      • enable_sequence_prefetch
      • enable_sharding
      • enable_single_leader_node_routing
      • enable_standby
      • enable_stat
      • enable_strict_kernel_release
      • enable_strict_stat_time
      • enable_sync_all_stats
      • enable_syslog_file_compress
      • enable_syslog_wf
      • enable_trace
      • enable_trace_stats
      • enable_trans_detail_stats
      • enable_transaction_internal_routing
      • enable_xa_route
      • fetch_proxy_bin_random_time
      • fetch_proxy_bin_timeout
      • flow_consumer_reenable_threshold
      • flow_event_queue_threshold
      • flow_high_water_mark
      • flow_low_water_mark
      • grpc_client_num
      • grpc_thread_num
      • hot_upgrade_exit_timeout
      • hot_upgrade_failure_retries
      • hot_upgrade_rollback_timeout
      • idc_list_refresh_interval
      • ignore_local_config
      • internal_cmd_mem_limited
      • ip_listen_mode
      • ldg_info_refresh_interval
      • listen_port
      • local_bound_ip
      • local_bound_ipv6_ip
      • log_cleanup_interval
      • log_dir_size_threshold
      • log_file_percentage
      • long_async_task_timeout
      • max_log_file_size
      • max_syslog_file_count
      • max_syslog_file_time
      • mem_leak_check_class_name
      • mem_leak_check_mod_name
      • metadb_server_state_refresh_interval
      • min_congested_connect_timeout
      • min_keep_congestion_interval
      • monitor_cost_ms_unit
      • monitor_item_limit
      • monitor_item_max_idle_period
      • monitor_log_level
      • monitor_stat_dump_interval
      • monitor_stat_high_threshold
      • monitor_stat_low_threshold
      • monitor_stat_middle_threshold
      • need_convert_vip_to_tname
      • net_accept_threads
      • net_config_poll_timeout
      • normal_pl_update_threshold
      • obproxy_config_server_url
      • obproxy_sys_password
      • partition_location_expire_relative_time
      • prometheus_cost_ms_unit
      • prometheus_listen_port
      • prometheus_sync_interval
      • protocol_diagnosis_level
      • proxy_hot_upgrade_check_interval
      • proxy_id
      • proxy_info_check_interval
      • proxy_local_cmd
      • proxy_mem_limited
      • qa_mode_mock_public_cloud_slb_addr
      • qos_stat_clean_interval
      • qos_stat_item_limit
      • refresh_idc_list
      • refresh_json_config
      • refresh_rslist
      • request_buffer_length
      • rootservice_list
      • routing_cache_mem_limited
      • rpc_enable_direct_expire_route_entry
      • rpc_enable_congestion
      • rpc_enable_global_index
      • rpc_enable_force_srv_black_list
      • rpc_enable_reroute
      • rpc_enable_parallel_handler
      • rpc_enable_retry_request_info_log
      • rpc_force_srv_black_list
      • rpc_max_request_batch_size
      • rpc_listen_port
      • rpc_max_response_batch_size
      • rpc_net_timeout_base
      • rpc_max_server_table_entry_num
      • rpc_request_timeout
      • rpc_period_task_interval
      • rpc_server_entry_expire_time
      • rpc_request_timeout_delta
      • rpc_server_net_invalid_time_us
      • rpc_server_net_handler_expire_time
      • rpc_server_net_max_pending_request
      • rpc_srv_session_pool_inactive_timeout
      • rpc_support_key_partition_shard_request
      • sequence_entry_expire_time
      • sequence_fail_retry_count
      • sequence_prefetch_threshold
      • server_detect_fail_threshold
      • server_detect_mode
      • server_detect_refresh_interval
      • server_routing_mode
      • server_state_refresh_interval
      • server_tcp_init_cwnd
      • server_tcp_keepcnt
      • server_tcp_keepidle
      • server_tcp_keepintvl
      • server_tcp_user_timeout
      • shard_scan_thread_num
      • short_async_task_timeout
      • skip_proxy_sys_private_check
      • skip_proxyro_check
      • slow_proxy_process_time_threshold
      • slow_transaction_time_threshold
      • sock_option_flag_out
      • sock_packet_mark_out
      • sock_packet_tos_out
      • sock_recv_buffer_size_out
      • sock_send_buffer_size_out
      • sql_table_cache_expire_relative_time
      • sql_table_cache_mem_limited
      • sqlaudit_mem_limited
      • stack_size
      • stat_dump_interval
      • stat_table_sync_interval
      • syslog_io_bandwidth_limit
      • syslog_level
      • task_thread_num
      • tenant_location_valid_time
      • tunnel_request_size_threshold
      • username_separator
      • work_thread_num
      • xflush_log_level
    • Multi-level parameters
      • binlog_service_ip
      • compression_algorithm
      • enable_client_ssl
      • enable_cloud_full_username
      • enable_read_write_split
      • enable_server_ssl
      • enable_transaction_split
      • enable_weak_reroute
      • mysql_version
      • ob_max_read_stale_time
      • obproxy_force_parallel_query_dop
      • obproxy_read_consistency
      • obproxy_read_only
      • observer_query_timeout_delta
      • observer_sys_password
      • observer_sys_password1
      • proxy_idc_name
      • proxy_primary_zone_name
      • proxy_route_policy
      • proxy_tenant_name
      • query_digest_time_threshold
      • read_stale_retry_interval
      • rootservice_cluster_name
      • route_diagnosis_level
      • slow_query_time_threshold
      • ssl_attributes
      • target_db_server
  • Connection management
    • Principles
    • Session status synchronization
    • Configure a globally unique client session ID
    • Client session
    • Server session
    • Network connection
  • Data routing
    • Factors affecting data routing
    • ODP routing
    • Intra-tenant routing
      • Overview
      • IP address-based routing
      • Partitioned table-based routing for strong-consistency reads
      • Global index table-based routing for strong-consistency reads
      • Replicated table-based routing for strong-consistency reads
      • Primary zone-based routing for strong-consistency reads
      • Strategy-based routing
      • Distributed transaction routing
      • Rerouting
      • Forcible routing
    • Automatic routing to the primary/standby tenants
    • Read/Write separation
    • Follower latency threshold
    • Function partition key routing
      • Overview
      • String functions
      • Numeric calculation functions
      • Date calculation functions
      • FAQ
    • Character set-based routing
  • Logs
    • Overview
    • obproxy_diagnosis.log
    • obproxy_digest.log
    • obproxy_error.log
    • obproxy_slow.log
    • obproxy_stat.log
    • obproxy.log
  • Commands
    • Overview
    • Dedicated ODP commands
      • ALTER
      • KILL
      • ping
      • SHOW
    • Compatible MySQL commands
      • BINLOG
      • KILL
      • SHOW PROCESSLIST
      • SHOW RELAYLOG EVENTS
      • SHOW SLAVE HOSTS
  • High availability mechanism
    • Overview
    • High availability of ODP services
    • High availability of OceanBase Database
    • High availability testing
  • Security and protocols
  • RPC service port
  • Operation and maintenance
    • Troubleshooting logic
    • Performance analysis
    • Show Trace
    • Routing diagnostics
      • Overview
      • Obtain diagnostic information
      • Diagnostic point troubleshooting
        • Overview
        • SQL_PARSE
        • ROUTE_INFO
        • LOCATION_CACHE_LOOKUP
        • ROUTINE_ENTRY_LOOKUP_DONE
        • FETCH_TABLE_RELATED_DATA
        • TABLE_ENTRY_LOOKUP_DONE
        • EXPR_PARSE
        • CALC_ROWID
        • RESOLVE_TOKEN
        • RESOLVE_EXPR
        • CALC_PARTITION_ID
        • PARTITION_ID_CALC_DONE
        • PARTITION_ENTRY_LOOKUP_DONE
        • ROUTE_POLICY
        • CONGESTION_CONTROL
        • RETRY
        • HANDLE_RESPONSE
      • Examples
    • Memory leak diagnostics
    • Connection diagnostics
  • Release Notes
    • Versioning rules
    • Enterprise Edition
      • V4.3
        • ODP Enterprise Edition V4.3.1
        • ODP Enterprise Edition V4.3.0
      • V4.2
        • ODP Enterprise Edition V4.2.3
        • ODP Enterprise Edition V4.2.2
        • ODP Enterprise Edition V4.2.1
      • V4.1
        • ODP Enterprise Edition V4.1.0
      • V4.0
        • ODP Enterprise Edition V4.0.0
      • V3.2
        • ODP Enterprise Edition V3.2.11
        • ODP Enterprise Edition V3.2.3.5
    • Community Edition
      • V4.3
        • ODP Community Edition V4.3.1
      • V4.2
        • ODP Community Edition V4.2.3
        • ODP Community Edition V4.2.1
        • ODP Community Edition V4.2.0
      • V4.1
        • ODP Community Edition V4.1.0
      • V4.0
        • ODP Community Edition V4.0.0

Download PDF

Document Feedback
  1. Documentation Center
  2. OceanBase Database Proxy
  3. V4.3.1

Strategy-based routing

Last Updated:2026-09-04 08:23:04

Concepts
LDC
Routing strategy
Routing type
Procedure
Example 1: Route to the specified IDC
Example 2: Route to followers in the specified IDC

This topic describes concepts related to strategy-based routing and provides two examples to describe how to configure strategy-based routing.

Concepts

This section describes concepts related to strategy-based routing, such as logical data center (LDC), routing strategy, and routing type.

LDC

LDC-based routing can resolve the issue of latency caused by remote routing when multiple IDCs are deployed across multiple regions in a distributed relational database.

As a typical high-availability distributed relational database system, OceanBase Database uses the Paxos protocol for log synchronization. OceanBase Database natively supports multi-region and multi-IDC deployment to ensure high disaster tolerance and reliability. However, every database deployed across multiple regions and IDCs has a latency issue caused by routing. OceanBase Database provides the LDC routing feature to address this issue. If the region and IDC attributes are specified for each zone in an OceanBase cluster and the IDC name attribute is specified for ODP, when a data request is sent to ODP, ODP will select an OBServer node in the following sequence: an OBServer node in the same IDC, an OBServer node in the same region, and a remote OBServer node.

Note

ODP does not allow you to use LDC-based routing alone. You must use LDC-based routing in combination with the routing strategy. Routing to an OBServer node in the same IDC is just one dimension in strategy-based routing.

Routing strategy

ODP performs routing based on rules defined in the routing strategy in the following cases:

  • Weak-consistency reads

  • Strong-consistency reads based on the primary zone

  • Partition calculation failure in the case of strong-consistency reads to partitioned tables

In strategy-based routing of ODP, the logical priorities of OBServer nodes are determined by the routing strategy. You can specify a routing strategy by using the ODP parameter proxy_route_policy or the user variable @proxy_route_policy. The following routing strategies are supported:

  • FOLLOWER_FIRST: Requests are first routed to a follower, and are routed to the leader only when no follower is available.

  • FOLLOWER_ONLY: Requests are routed only to a follower. If no follower is available, an error is returned.

  • UNMERGE_FOLLOWER_FIRST: Requests are preferentially routed to a follower that is not in a major compaction.

Notice

The routing strategies related to read-only zones have been deprecated.

Routing type

A routing strategy is a collection of logical priorities and consists of multiple routing types. A routing type consists of five dimension attributes of replicas.

  • Paxos type: LEADER and FOLLOWER

  • Partitioned table type: PARTITION and NONPARTITION

  • Zone type: READWRITE and READONLY

  • Major compaction status of SSTable: UNMERGE and MERGE

  • Geographic location: LOCAL, REGION, and REMOTE

  • Replication table replica: DUP and -

For example, priorities in the FOLLOWER_FIRST routing strategy are arranged in descending order as follows:

  • FOLLOWER_PARTITION_UNMERGE_LOCAL: follower, partition replica, merged, same rack

  • FOLLOWER_PARTITION_UNMERGE_REGIO: follower, partition replica, merged, same region

  • FOLLOWER_PARTITION_MERGE_LOCAL: follower, partition replica, merging, same rack

  • FOLLOWER_PARTITION_MERGE_REGION: follower, partition replica, merging, same region

  • LEADER_PARTITION_UNMERGE_LOCAL: leader, partition replica, merged, same rack

  • LEADER_PARTITION_UNMERGE_REGIO: leader, partition replica, merged, same region ...

Procedure

The procedure for using strategy-based routing is as follows:

  1. Configure an LDC for an OceanBase cluster.

  2. Configure the instance-level parameter proxy_idc_name of ODP.

    Notice

    If proxy_idc_name is left empty, LDC-based routing will fail.

  3. Configure the instance-level parameter proxy_route_policy of ODP for more fine-grained priority control. If you only need to control the routing to a zone or IDC, you can skip this configuration step. If this parameter is not configured, ODP will use the default routing strategy MERGE_IDC_ORDER.

  4. Initiate a read request.

Example 1: Route to the specified IDC

Step 1: Configure the IDCs of an OceanBase cluster

Log on to the OceanBase cluster as the root@sys user and execute the following statements to configure the LDC of the cluster. In this example, the cluster has three zones and each zone contains one OBServer node.

Configure the region of z1. The parameter REGION specifies the region where the zone resides and is usually set to a city name, which is case-sensitive.

obclient [oceanbase]> ALTER SYSTEM MODIFY ZONE "z1" SET REGION = "SHANGHAI"; 

Configure the IDC where z1 resides. The IDC parameter specifies the IDC where the zone resides and is usually set to an IDC name, which is in lowercase.

obclient [oceanbase]> ALTER SYSTEM MODIFY ZONE "z1" SET IDC = "zue";

Note

An OceanBase cluster has several regions. A region has several zones. A zone has a zone type attribute and an IDC attribute.

The following table lists the configurations of the cluster.

IP address of OBServer node
Zone
IDC
REGION
10.10.10.1 z1 zue SHANGHAI
10.10.10.2 z2 xue SHANGHAI
10.10.10.3 z3 yue HANGZHOU

Step 2: Configure the ODP parameter

Configure the proxy_idc_name parameter to specify the location of ODP in the LDC. This example assumes that all weak-consistency read requests are routed to z1. Execute the following statement to set proxy_idc_name to zue:

obclient [oceanbase]> ALTER PROXYCONFIG SET PROXY_IDC_NAME ='zue';

Step 3: Initiate a read request

  1. Create a table named t1 and initiate a weak-consistency read request.

    obclient [test]> SELECT /*+READ_CONSISTENCY(WEAK) */ * FROM test.t1;
    
  2. Run the EXPLAIN ROUTE command to view the routing process in ODP.

    obclient [test]> EXPLAIN ROUTE SELECT /*+READ_CONSISTENCY(WEAK) */ * FROM test.t1\G
    

    In the following return result, the idc_type value is SAME_IDC, which indicates that the replica is in the same IDC as ODP, that is, z1.

    *************************** 1. row ***************************
    ...
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"COM_QUERY", table:"t1"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"t1", table_id:500006, table_type:"USER TABLE", entry_from_remote:false}
    > ROUTE_POLICY:{replica:"10.10.10.1:50109", idc_type:"SAME_IDC", zone_type:"ReadWrite", role:"LEADER", type:"FULL", is_partition_server:true, chosen_route_type:"ROUTE_TYPE_PARTITION_UNMERGE_LOCAL", route_policy:"MERGE_IDC_ORDER", trans_consistency:"WEAK", session_consistency:"STRONG", proxy_idc_name:"zue"}
    > CONGESTION_CONTROL:{svr_addr:"10.10.10.1:50109"}
    

Note

You can configure the proxy_idc_name parameter to route weak-consistency read requests to another region. For example, you can set proxy_idc_name to yue to route weak-consistency read requests to HANGZHOU.

Example 2: Route to followers in the specified IDC

Step 1: Configure an OceanBase cluster

Log on to the OceanBase cluster as the root@sys user and execute the following statements to configure the LDC of the cluster. In this example, the cluster has three zones and each zone contains one OBServer node.

Configure the region of z1. The parameter REGION specifies the region where the zone resides and is usually set to a city name, which is case-sensitive.

obclient [oceanbase]> ALTER SYSTEM MODIFY ZONE "z1" SET REGION = "SHANGHAI"; 

Configure the IDC where z1 resides. The IDC parameter specifies the IDC where the zone resides and is usually set to an IDC name, which is in lowercase.

obclient [oceanbase]> ALTER SYSTEM MODIFY ZONE "z1" SET IDC = "zue";

Note

An OceanBase cluster has several regions. A region has several zones. A zone has a zone type attribute and an IDC attribute.

Create a table named t1 and execute the following statement to view the leader and followers of the table.

obclient [oceanbase]> select * from oceanbase.DBA_OB_TABLE_LOCATIONS where DATABASE_NAME='test' and TABLE_NAME like 't1'\G

The following table lists the configurations of the cluster.

IP address of OBServer node
Leader/Follower
Zone
IDC
REGION
10.10.10.1 Leader z1 zue SHANGHAI
10.10.10.2 Follower z2 xue SHANGHAI
10.10.10.3 Follower z3 yue HANGZHOU

Step 2: Configure the ODP parameter

Configure the proxy_idc_name parameter to specify the location of ODP in the LDC. Configure the proxy_route_policy parameter to specify the routing strategy. This example assumes that all weak-consistency read requests are routed to a follower in the same IDC. Here are the sample statements:

obclient [oceanbase]> ALTER PROXYCONFIG SET PROXY_IDC_NAME ='zue';
obclient [oceanbase]> ALTER PROXYCONFIG SET proxy_route_policy = FOLLOWER_FIRST;

Step 3: Initiate a read request

Run the EXPLAIN ROUTE command to view the routing process in ODP.

obclient [oceanbase]> EXPLAIN ROUTE SELECT /*+READ_CONSISTENCY(WEAK) */ * FROM test.t1\G

In the following return result, the idc_type value is SAME_IDC, which indicates that the replica is in the same IDC as ODP, and the role value is FOLLOWER, which indicates that the request is routed to a follower.

...
Route Plan
-----------------
> SQL_PARSE:{cmd:"COM_QUERY", table:"t1"}
> ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
  > TABLE_ENTRY_LOOKUP_DONE:{table:"t1", table_id:500006, table_type:"USER TABLE", entry_from_remote:false}
> ROUTE_POLICY:{replica:"10.10.10.2:50110", idc_type:"SAME_IDC", zone_type:"ReadWrite", role:"FOLLOWER", type:"FULL", is_partition_server:true, chosen_route_type:"ROUTE_TYPE_FOLLOWER_PARTITION_UNMERGE_LOCAL", route_policy:"FOLLOWER_FIRST", trans_consistency:"WEAK", session_consistency:"STRONG", proxy_idc_name:"zue"}
> CONGESTION_CONTROL:{svr_addr:"10.10.10.2:50110"}

Previous topic

Primary zone-based routing for strong-consistency reads
Last

Next topic

Distributed transaction routing
Next
on this page
Concepts
LDC
Routing strategy
Routing type
Procedure
Example 1: Route to the specified IDC
Example 2: Route to followers in the specified IDC