注意
该功能仅用于排查性能问题,不得将该功能和/*!hint({"source":{"traceid":"traceid_value"}})*/
应用在生产SQL中。
前提条件
DRDS版本为2.8.8_P5后的版本(含新版本号5.1.20.0.0及以后的版本),才提供Session级别的Query Profiling功能。您可以通过udal show version();
命令查看DRDS版本号。
快速入门
执行如下命令,开启诊断模式
udal set trace=1;
执行如下命令,标记关键业务查询。
/*!hint({"source":{"traceid":"payment_analysis"}})*/ SELECT * FROM orders WHERE create_time > '2023-06-01';
执行如下命令,获取诊断报告。
udal show trace where traceid="payment_analysis";
主要参数说明
开启或关闭Profile功能。
udal set trace = {0|1};
参数说明如下:
1:开启
0:关闭
设置保留历史Proflie记录最大条数。
udal set trace maxsize = N
参数说明如下:
N:历史记录最大值。默认保留100条历史语句的记录,取值范围为1-10000,超过最大值后,将覆盖最早的历史记录。
注意
相关诊断报告保存在内存中,重启节点等操作将会导致清空历史数据。
查看Profile功能状态。
udal show trace status;
输出字段说明如下:
Enabled:功能是否开启。
MaxSize:保存历史记录最大值。
查看支持的历史语句记录。
udal show traces;
查看执行语句Profile记录。
udal show trace [where {id|traceid} = ?];
参数说明如下:
不带where,查看上一条语句的Profile记录。
带where:
id = ?
:历史记录序号,可通过udal show traces
获取。traceid = ?
:历史记录traceid标识,可通过udal show traces
获取。
设置执行语句的traceid。
/*!hint({"source":{"traceid":"traceid_value"}})*/select * from t1;
参数说明如下:
source:系统标记关键字,不可修改。
traceid:系统标记关键字,不可修改。
traceid_value:traceid_value为traceid实际值,由用户自行定义设置。
注意
traceid_value没有格式和长度要求,如果用户多条语句使用了同样的traceid_value,使用该traceid_value查看Profile信息时,将显示为最近执行的语句记录。
诊断报告解析
字段说明
字段 | 说明 |
---|---|
Traceid | 语句标识,由用户执行语句时,通过HINT指定。 |
Operation | 执行阶段名称。具体阶段说明,请参见本文档的Operation字段说明。 |
Start(ms) | SQL当前操作阶段在本Query Profiling中的相对启动时间,第一阶段从0开始,单位为毫秒。 |
End(ms) | 当前操作阶段结束时间。 |
Duration(ms) | 当前操作阶段执行耗时。 |
Shardname | SQL具体执行分片名。 |
Rwnode(write) | SQL执行节点名和节点的读写属性:
|
Rows | 显示SELECT查询返回的行数和INSERT、UPDATE、DELETE影响的行数。 如果所在行是在某个分片执行的记录,则显示为对应分片返回的行数和影响行数。 |
SQL | 具体执行SQL。 如果所在行是某个分片执行的记录,则显示具体在对应分片执行的语句,因为分布式数据库存在SQL解析并转发情况,实际SQL与用户输入不一致是正常情况。 |
Operation字段说明
阶段 | 核心作用 | 可诊断的典型问题 |
---|---|---|
SQL Parse | SQL语法解析 | 如果语法解析阶段耗时过长,检查执行节点CPU资源情况,是否为服务器资源紧张 |
PreCheck | 执行前检查,包括事务条件校验、HINT解析语句重分布处理、用户管理语句拦截 | 如果该阶段后无后续阶段,则展示的语句可能为用户管理语句 |
Index Proess | 全局索引语句拦截 | 展示的语句为全局索引处理语句 |
Execute Sequence | 序列语句拦截 | 展示的语句为序列处理语句 |
Encrypt Column | 加密改写所序列并重分布 | 如果消耗时间过长,检查加密数据和服务器加密计算资源 |
Route | 路由计算 | 路由计算消耗理论较少,且存在缓存 |
PreExecute | 执行前处理,包括权限检查,其他校验 | 执行前检查理论值较小 |
OLAP Execute | AP语句执行拦截 | 语句被AP执行路径拦截 |
Wait Lock | 内部锁等待 | 等待锁时间,集群可能正在进行补偿事务 |
Get Connection | 从分片节点获取连接 | 从数据节点获取物理连接时间,如果时间异常,可检查连接池状态和后端数据节点最大连接数状态 |
Execute SQL | 分片节点执行语句 | 可对比不同分片执行语句时间,判断后端节点执行或者网络是否有异常 |
Fetch Data | 从分片节点接收数据 | 可对比不同节点返回或影响的数据行数,判断数据是否倾斜,可对比返回数据耗时,判断网络是否波动 |
Merge | 跨分片结果集聚合 | Merge阶段会占用较多内存,需进行限制或监控内存使用情况 |
Write To Client | 最终结果集返回客户端 | 写入网络缓存 |
OverAll | 语句总体执行时间 | 对比总耗时和各阶段耗时,判断是否存在未监控的阶段消耗了大量时间 |