注意
该功能仅用于排查性能问题,不得将该功能和/*!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 | 语句总体执行时间 | 对比总耗时和各阶段耗时,判断是否存在未监控的阶段消耗了大量时间 | 
