可以减慢实时订阅者杀死 kdb 中的tickerplant

Uts*_*Uts 0 kdb

缓慢的消费者能否杀死或减慢滴答作响的速度?

我有一个自动收报机,有 3 个实时订阅者,其中一个订阅者很慢。

q).z.W
7 | `long$()
8 | 969393 198 198 197 197 198 196 199 197 196 143 198 196 196 197 197 198 19..
9 | 199 198 198 143 197 199 197 197 197 197 199 196 199 145 196 198 198 198 1..
10| 198 196 198 144 199 198 198 198 196 197 196 199 198 143 199 198 197 198 1..

q)count each .z.W
7 | 0
8 | 85547
9 | 77931
10| 0

q)count each .z.W
7 | 0
8 | 191552
9 | 0
10| 0
Run Code Online (Sandbox Code Playgroud)

缓慢的消费者能否在接收数十亿条记录的生产 kdb+ 系统中杀死或减慢它的速度?

ter*_*nch 5

是的,一个缓慢的消费者可以杀死一个滴答作响的植物。慢消费者在自动收报机中创建输出队列,这个输出队列消耗内存。最终,如果它持续的时间足够长,tickerplant(或它运行的机器)可能会耗尽内存并中止。

理想情况下,生产自动收报机将具有某种形式的监控,定期关注输出队列 - 如果队列超过某个阈值,它应该停止订阅(暂时从 .uw 订阅字典中删除句柄,允许队列排空) 并在订阅者赶上时恢复。或者更积极地完全关闭订阅者连接(hclose),这会清除输出队列。

如果您的系统经历了大量排队,那么tickerplant 也可能需要每天进行一次垃圾收集(比如在 EOD 时),以确保输出队列不会导致它保留未使用的内存(或者您可能希望将其保留为未使用的内存)以便下次出现大队列时不必从操作系统重新请求内存)