首批通过分布式安全可靠测评,为关键业务系统打造
SQL_ID, Plan_ID 与 Plan_hash
更新时间:2026-05-14 09:21
在 OceanBase 数据库中,SQL_ID 是参数化后的 SQL statement 对应的 MD5 值。相同的 SQL statement 在所有 OBServer 中对应同一个 SQL_ID。Plan_ID 在单个 OBServer 中唯一,同一条 SQL 在不同 OBServer 中的相同的 Plan 对应不同的 plan_id,而 plan_hash 相同。
适用版本
OceanBase 数据库 V4.0 以前的所有版本。
SQL_ID
SQL_ID 用于唯一确定一个查询语句,它是由查询语句经过快速参数化后得到的字符串的 MD5 值,返回 128 位的哈希值。SQL_ID 的长度为 CHAR(32),形如 ED570339F2C856BA96008A29EDF04C74。
相同文本的 SQL 的 SQL_ID 总是相同的,可以通过以下脚本生成对应 SQL 的 sql_id。
import hashlib
sql_text='SELECT * FROM t1 WHERE c2 = ?'
sql_id=hashlib.md5(sql_text.encode('utf-8')).hexdigest().upper()
print(sql_id)
可以在以下网页在线执行 Python 脚本生成 SQL_ID:https://c.runoob.com/compile/9/。

Plan_ID
Plan_ID 用于在单个 OBServer 上唯一确定 plan_cache 中的一个plan,plan_id 是 OBServer 启动后通过一个本地范围内的自增序列产生的值,OBServer 重启后,plan_id 会重置。
Plan cache 是租户间隔离的,在一台 OBServer 中,plan_id 和 tenant_id 一起决定一个执行计划。
Plan_hash
Plan_hash 是对执行计划(plan)进行 hash 运算得到的值。理论上,相同的执行计划对应相同的 plan_hash,同一条 SQL 在不同 OBServer 中生成相同的执行计划,plan_id 不同,而 plan_hash 相同。