我有很多输出一段时间(1到24小时)的EPL语句,以下是我的陈述
" SELECT MessageID,VName,count(VName)as count FROM DDIEvent(MajorType = 4).std:groupwin(VName).win:time(3 hour).win:length(10)按VName分组,每3小时有一次计数(VName)> = 10输出"
如果长度窗口没有限制,我的案例将在3小时内保留约700K记录
在上面,我的测试用例只有100个不同的VName。根据我的理解,同时有最多1000条记录保存在内存中,(100 * 10 [长度])我是对的吗?
但是我的应用程序的内存使用量会持续增长,直到输出到监听器
内存使用情况与没有长度窗口的样本几乎相同
输出到听众后,记忆力显着下降
然后,另一个循环开始,记忆缓慢增长,直到3小时后
我已经检查了文档,没有找到"输出"的内存相关主题。关键字。
有谁知道真正的根本原因是什么?以及如何避免?或者只是我的EPL问题?
谢谢〜
答案 0 :(得分:0)
如果您的查询从select子句中删除“MessageId”,它将成为常规聚合查询。你可以改为“last(MessageId)”。因为“MessageId”在那里,引擎提供的行是每个事件的一行,而不是每个聚合组的一行。