怎么确定zone和session事务会走到本地事务


情况是表都在zone2里面的p0,然后执行事务会触发分布式事务,需要确定下原因

运维说代理了OBProxy的负载均衡给出来了一个代理ip,sql如下
UPDATE taker_orders SET status = ?, vwap = ?, filled_volume = ?, total_value = ?, update_time = ?, update_by = ? WHERE taker_orders.id = ? AND taker_orders.core_order_id = ?

这里面core_order_id这个是分区主键

建表语句如下
CREATE TABLE taker_orders (
id varchar(255) COLLATE utf8mb4_bin NOT NULL,
core_order_id varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT ‘’,
request_id varchar(255) COLLATE utf8mb4_bin NOT NULL,
external_order_id varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
省略了一些字段
PRIMARY KEY (id, core_order_id),
KEY takerorder_external_order_id_taker_id (external_order_id, taker_id) BLOCK_SIZE 16384 LOCAL,
KEY takerorder_core_order_id (core_order_id) BLOCK_SIZE 16384 LOCAL,
KEY taker_orders_create_time (create_time) BLOCK_SIZE 16384 LOCAL,
KEY takerorder_request_id (request_id) BLOCK_SIZE 16384 LOCAL
) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLEGROUP = ‘clearing_cloud_v2_group’
partition by key(core_order_id)
(partition p0,
partition p1,
partition p2,
partition p3,
partition p4,
partition p5);

需要怎么指定能到本地事务,根据https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508104这个文档,无法了解Session 指的是什么,以及怎么去匹配把这个事务搞成本地事务,在线等,急

能不能说下现在为什么关心“是否会走本地事务”?
是数据库性能不理想,排查出来大量的事务走了“分布式事务”吗?

分布式事务的消耗时间是不理想的,对于大并发来说,用这个数据库目的不就是为了用他的自带分区的功能,要不然跟mysql有什么区别呢?

本地事务20ms,分布式事务40-60ms,能降低不是最好吗

根据你的业务场景,设置合理的数据分区,在一个分区内的事务不会出现分布式事务,不需要跨主机。

事实上已经触发了分布式事务

我们需要知道怎么指定路由或者是什么分配规则导致的走分布式事务,需要规避掉,优化这个事务

路由规则没办法指定,事实上分布式事务并不是路由到错误的节点导致的,而是你的数据确实跨越了“日志流”。简单的说就是你的一个事务操作的数据,跨越了数据分区或分区组。
可以找出来几个分布式事务,看看他们为什么数据跨越了分区。