执行一个超过 20 分钟的 INSERT INTO xx select 的 SQL,
可以执行完成, 但是客户端收不到结束信号
存算分离模式:
ON K8S
SR版本:
3.2.4
SR集群:
1 个 FE pod (4 核 8G 内存)
6 个 CN pod (16 核 64G 内存)
问题描述:
执行一个超过 20 分钟的查询时
通过 SHOW PROFILELIST; 命令 + FE 日志, 确定 sql 已经执行完成
但是 mysql 客户端没收到执行结束的返回, 一直卡着
如果是一个小的查询不会出现这种情况
复现过程:
1.使用如下脚本:
echo `date` 'start' > sr.log
mysql -h 10.218.174.31 -P9030 -u root -pxxx < ./sr.sql
echo `date` 'end' > sr.log
2.SHOW PROFILELIST; 命令查看执行情况 , 显示"Finished"
3.进入到 fe pod 查看 fe.log 日志, 通过对应的查询 id 找到
2024-03-15 06:40:23,643 INFO (lake-publish-task-38256|64340) [DatabaseTransactionMgr.finishTransaction():1074] finish transaction TransactionState. txn_id: 230704, label: insert_00cce
832-e294-11ee-804c-5a87956e7997, db id: 30575, table id list: 32804, callback id: -1, coordinator: FE: starrocks-kp-fe-0.starrocks-kp-fe-search.bd-starrocks.svc.cluster.local, transac
tion status: VISIBLE, error replicas num: 0, replica ids: , prepare time: 1710483579178, write end time: 1710484823421, allow commit time: -1, commit time: 1710484823421, finish time:
1710484823641, write cost: 1244243ms, publish total cost: 220ms, total cost: 1244463ms, reason: attachment: com.starrocks.transaction.InsertTxnCommitAttachment@11e50ad9 tabletCommit
Infos size: 32 successfully
- 但是客户端一直卡着, 没有接到结束的通知,
- 在各种 mysql 客户端工具中也一样有类似问题,例如 datagrip
sql 执行成功后, 看到 warning 日志中有一个,更新统计表的错误, 不知道是不是这个引起的
exec state report failed status=errorCode MEM_LIMIT_EXCEEDED
Memory of process exceed limit. LoadSegments Used: 53928178792, Limit: 53923314401.
Mem usage has exceed the limit of BE, query_id=adce630f-e2a1-11ee-804c-5a87956e7997, instance_id=adce630f-e2a1-11ee-804c-5a87956e79d0
2024-03-15 07:57:39,598 WARN (thrift-server-pool-22680|63972) [DefaultCoordinator.updateStatus():714] one instance report fail throw updateStatus(),
need cancel. job id: 36683, query id: adce630f-e2a1-11ee-804c-5a87956e7997,
instance id: adce630f-e2a1-11ee-804c-5a87956e79d0
下面是从日志中抠出来的自动生成的插入统计表的SQL