本文介绍简单 SQL 转发执行存在远程执行计划原因和解决方法。
问题描述
RANGE + LIST 二级分区表,简单 SQL 转发执行存在远程执行计划。
执行的 SQL 语句如下。
SQL 语句一:
UPDATE
`ticket_trade_new` .t_sale_order
SET
buyer_money = ?,
transaction_money = ?,
order_status = ?,
pay_status = ?,
slave_order_id = NULL,
update_time = SYSDATE()
WHERE
game_id = ?
AND sale_issue = ?
AND order_id = ?
AND multi_index = ?
AND org_province_id = ?
SQL 语句二:
UPDATE
t_sale_order
SET
buyer_money = ?,
transaction_money = ?,
order_status = ?,
pay_status = ?,
slave_order_id = NULL,
update_time = SYSDATE()
WHERE
game_id = ?
AND sale_issue = ?
AND org_province_id = ?
AND order_id = ?
AND multi_index = ?
当 primary zone: zone1,zone2;zone3 时,OCP 上监控到的 SQL 语句一的情况。

当 primary zone: zone1,zone2,zone3 时,OCP上监控到的 SQL 语句二的情况

通过 OCP 监控信息可知。
设置主 zone 为 zone1、zone2 的情况下,SQL 语句的本地执行计划分布与远程执行计划分布比约为 1:1。
设置主 zone 为 zone1、zone2、zone3 的情况下,SQL 语句的本地执行计划分布与远程执行计划分布比约为 1:2。
适用版本
ODP V4.2.3 之前版本。
问题原因
低版本 ODP 版本不支持解析 NULL 和 SYSDATE()。
解决方法
升级到已支持解析 NULL 和 SYSDATE() 的版本。ODP 从 V4.2.3 版本开始支持解析 NULL 和 SYSDATE()。