StreamInsight和长时间运行查询

本文关键字:查询 运行 长时间 StreamInsight | 更新日期: 2023-09-27 17:53:09

我有一个建立在StreamInsight 1.2之上的应用程序,它有几个固定的查询在用户定义的操作符中运行一些计算。有时,其中一个计算将花费相对较长的时间来完成(几秒钟),并且我看到它阻塞了其他查询的执行。我不太熟悉StreamInsight是如何工作的,所以我推测所有的查询都是在一个线程上运行的。是否有一些方法可以让查询并行运行?

除了以某种方式将查询放在单独的线程上,我还可以做其他事情来防止一个偶尔长时间运行的查询阻塞其他查询吗?

StreamInsight和长时间运行查询

如果计算偶尔需要几秒钟,这就是它的本质您运行的是标准版,那么您能做的最好的事情就是在计算发生时不要阻塞线程。StreamInsight对此没有任何内置功能…这是你的责任。从StreamInsight的角度来看,您的UDO需要一些时间。它不知道为什么会这样。如果线程被阻塞,在您的UDO返回之前,它不能运行任何其他内容。所以我会a)验证你正在运行标准版本,然后b)如果你是,改变UDO,使它是非阻塞/异步的。

您使用的是哪个版本的StreamInsight ?标准版在单个核心上运行调度器,而高级版使用所有可用的核心。至于延迟,如果你所有的查询都依赖于挂起的时间轴——通过join、union等——那么这就是导致它挂起的原因。事件不会从长时间运行的UDO中"释放"以提供给其他流。如果是这种情况,您将无能为力,除非您能够以某种方式重构查询。我也会开始研究为什么"偶尔"UDO会花几秒钟。这让我认为有一些问题与UDO,但然后,不知道它在做什么细节,我不能肯定地说。