佛山市品牌网站建设公司/百度seo竞价推广是什么
1、问题背景
在SQL优化过程中,经常遇到trace_id
,sql_id
,plan_id
这三个字段,笔者总是傻傻的分不清他们的区别;
下面我将着重介绍这三个ID值的区别,以及他们分别如何获取?
2、三种ID的区别
2.1 trace_id
trace_id
是OceanBase数据库内部的SQL级别的ID;
默认值为Y0-0000000000000000-0-0
。
它用于标识一条SQL的执行过程,是排查问题的重要环节。
当应用使用allowmultiqueries=true
并将多条SQL拼接在一起发送到OceanBase数据库时,这些SQL会使用相同的trace_id
。
注意:一个trace_id可能对应多条SQL语句。
绑定执行计划可参考OB 运维 | 如何有效使用 outline 功能?
2.2 sql_id(具体参数后的SQL语句)
sql_id
用于唯一确定一条具体的SQL,是对特定SQL语句经过一系列转换得到的MD5值,返回128位的哈希值,类型为CHAR(32)。
它用于标识一条具体的SQL,同一条SQL的多次执行可能会有相同的SQL_ID
和不同的REQUEST_ID
。
注意:绑定执行计划可通过sql_id 来实现绑定,当SQL实现参数化,可通过sql_id 绑定这一类SQL的执行计划。
2.3 plan_id
用于在单个 OBServer
上唯一确定 plan_cache
中的一个 plan
,是一个递增的值,由 plan_cache
模块进行管理。OBServer
重启后,plan_id
会重置。
plan_id
和 tenant_id
一起决定一个执行计划 。
2.4 三种ID值示例
-- # 4.x使用GV$OB_SQL_AUDIT
MySQL [(none)]> select trace_id,sql_id,plan_id from oceanbase