Hookin丶
Hookin丶
  • 发布:2023-06-09 10:41
  • 更新:2023-06-09 16:01
  • 阅读:263

【报Bug】JQL 6月8日后出现的临时表联表查询分组超时 问题

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

临时表联表查询分组

预期结果:

像之前一样,不会超时

实际结果:

不加limit就超时

bug描述:

因为每天都会定时执行一个临时表联表查询任务,
代码大概如下:
const xxxTemp = db.collection('xxx').where(create_date>=1686153600000 && create_date<1686240000000).getTemp();
const aaaTemp = db.collection('aaa').field('aaa,_id').getTemp();
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).groupBy('target_id').groupField('count(*) as scount').get()

在之前一直是正常运算的,直到6月8号到出现超时提示(云对象确实执行到5秒)
InternalServerError:Error in $cursor stage :: caused by :: operation exceeded time limit,集合xxxxx操作超时,请参照此文档进行优化:https://uniapp.dcloud.net.cn/uniCloud/db-performance

但我经过测试发现在后面加limit(500)后可以正常返回数据
而且limit()内的数值越小返回速度越快。

我不清楚这是不是 bug,但确实以前集合里有一百万条数据也能正常返回,现在不加limit(500),就超时,加了limit又会出现取不全的问题。

查询情况:

当不分组直接.get({getCount:true})时:
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).get({getCount:true})
查询到1000条数据,
满足条件的数据总数为16111条,查询数量限制请参考:https://uniapp.dcloud.net.cn/uniCloud/cf-database?id=imit,请求耗时(含网路传输):1990ms

当分组查询不加limit(500)时:
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).groupBy('target_id').groupField('count(*) as scount').get()
超时
InternalServerError:Error in $cursor stage :: caused by :: operation exceeded time limit,集合xxxxx操作超时,请参照此文档进行优化:https://uniapp.dcloud.net.cn/uniCloud/db-performance

当分组查询加limit(500)时:
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).groupBy('target_id').groupField('count(*) as scount').limit(500).get()
查询到46条数据,请求耗时(含网络传输):1007ms
多次测试都是1秒以上

当分组查询加limit(100)时:
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).groupBy('target_id').groupField('count(*) as scount').limit(100).get()
查询到21条数据,请求耗时(含网络传输):907ms
多次测试大多400ms

当分组查询加limit(10)时:
db.collection(xxxTemp ,aaaTemp ).field(aaa._id as target_id).groupBy('target_id').groupField('count(*) as scount').limit(10).get()
查询到7条数据,请求耗时(含网路传输):378ms

2023-06-09 10:41 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

私聊发一下服务空间id,另外最近数据量有增长吗?schema配置的权限有变动吗

Hookin丶

Hookin丶 (作者)

补充后续:考虑到以前一查查一天确实也有性能问题,借着这次超时问题重写了代码,改为把一天的时间分成多份,分别查。

另外也可以按照这种来改:

按照create_date(创建时间)降序排序,每次查询时都指定查询条件小于上次查询结果中的最后一条记录的create_date
https://uniapp.dcloud.net.cn/uniCloud/db-performance.html#skip

要回复问题请先登录注册