目录
一、问题截图
今天我发现一个有趣的现象,用户执行一条长达17287秒(差不多5小时)的SQL,这个SQL并没有特别复杂,我用红箭头指出了特殊点:
1、SQL处于Writing to net状态。(这个状态持续了4个多小时)
2、查询的是INFORMATION_SCHEMA.COLUMNS系统表。
3、没有加过滤条件。
二、排查思路
1、Gbase8a SQL有几种状态
状态 | 含义 |
init | 表示SQL进入准备执行阶段,开始执行计划。 |
deleting from main table/updating main table | 准备对主表进行删除或更新操作。 |
end/query endSQL | SQL到达结束状态,准备清理资源。 |
Creating tmp table | 查询过程中,正在创建临时表。 |
Sending data | 读取数据向发起段发送查询结果。 |
closing tables | 关闭打开的表。 |
Evaluating | 执行计划评估。 |
Executing by step | 执行计划中的每一步。 |
Preparing metadata | 取得本查询所涉及表的可用节点信息。 |
Sending task to gnodes | 发送任务给数据节点。 |
Clear tmp tables | 查询完成,开始清理临时表。 |
Writing to Net | 向客户端发送数据包。 |
checking permissions | 检查权限。 |
commit | 提交数据。 |
killed | 被杀死。 |
logging slow query | 审计日志在保存慢SQL信息。 |
Rolling back | 数据回滚。 |
2、问题导致原因猜想
我们看到了Writing to Net的意思是向客户端发送数据包,会不会是网络的问题导致。我们可以提出一下几个猜想。
猜想 | 是否为问题原因 |
服务端网络负载高 | 未验证 |
客户端网络负载高 | 未验证 |
客户端程序处理数据慢 | 未验证 |
3、观察服务端(集群端)网络情况
Writing to Net的意思是向客户端发送数据包。会不会是网络负载较高,我这边是万兆网卡,理论可以达到10000Mbit/s,1Mbit(兆位) = 0.125Mb(兆字节)