Wrong result of last_row() function in v3.0.1.6
Bug Description select last_row(*) from stable partition by tagname; 返回了错误结果,且效率较低。
To Reproduce
- 安装V3.0.1.5,创建数据库和超级表(默认参数),使用taosadapter写入/读取物联网数据(大约4000子表,每个子表有一个tag:点号:point_code);
- alter database xxx cahemodel 'both' 设置缓存
- 执行查询语句 :查询所有子表的最新数据快照: select last(*) from stable partition by point_code; 查出4000数据,但是耗时15秒;
- last换成last_row再试:select last_row(*) from stable partition by point_code; 只有2条数据;
- group by 和partition by 表现一致;
Expected Behavior last和last_row 至少一个正确且高效的查询超级表快照值。
Screenshots

Environment (please complete the following information):
- OS: [ CentOS 7.9]
- Memory 16G
- TDengine Version [3.0.1.6]
Additional Context V3.0.15版本,设置cachemodel之后,last_row函数能正确查询所有数据,查询时间0.1秒左右,升级3.0.1.6之后结果不对。
taosdump -o 路径 库名 singledata
麻烦导出一下数据,然后压缩发我们吧
相同的问题,在最新的3.0.2.3仍然存在,将数据库和客户端都降级到3.0.1.5后确实解决了问题。
具体情况:
超级表powers中有 4000+ 条记录,每个记录对应一张表(因为数据是刚采集用来测试性能的,所以正好一条记录一张表)。
在3.0.2.3执行select last_row(*) from powers partition by tbname;,大约跑了一个小时(记得是 3500s+),期间CPU占用几乎一直是100%,所以差不多算是 1 条记录跑了快 1 秒钟?所以猜测last_row函数在某些情况下性能存在问题,于是找到了这个 issue。
根据提问者的建议换到3.0.1.5后,重新采集数据并测试(数据量一致,都是 4000+),同样的语句只需要 0.5 秒钟不到就完成了查询。
在3.0.2.3上测试的时候,第一次查询需要近 1 小时,之后每次查询都在 1 秒钟内完成,推测是走了缓存,但是继续采集了 4000+ 数据并录入之后,同样的查询也只需要 1 秒钟不到,查询结果正常,是新录入的数据。但是重启数据库服务后,首次查询又需要近 1 小时。
如需数据库测试样本请联系我邮箱[email protected]。
在3.0.2.4上查询速度正常了,似乎是修复了?
在
3.0.2.4上查询速度正常了,似乎是修复了?
可能是。可以再观察一段时间,如果又遇到可以加微信 a15652223354我们具体排查下