增加队列大小对 Marklogic 任务服务器的影响



将队列大小从默认的 100000 增加到 500000 有什么影响?

是否有经验法则来计算合理的最大数量 使用可用资源(如 RAM、CPU 内核和其他任何资源(的队列大小需要考虑。

任何建议将不胜感激。

它不会影响 CPU,但对内存的影响有限。队列保存在内存中(例如,它不会在服务器重新启动后存活下来(,并且它需要跟踪您输入到队列上每个任务中的所有参数。如果你给他们每个人喂一个 100 万 id 的列表,那将比只喂他们 10 或 1 个要多得多。

另请记住,任务服务器只有有限的线程(通常为 16 个(来处理队列。增加它确实会影响 CPU,并且对内存的影响可能比增加队列大小大得多。通常,在队列大小编号中添加零是相当安全的。

哼!

一旦队列大小超过线程并发性,影响主要是延迟与早期错误。 队列越大,插入"作业"和启动之间的延迟就越大。队列大小的"上限"越大,在您主动注意到潜在的巨大延迟之前的时间就越长。在某些工作负载中,巨大的缓冲区和延迟是可以的,而在另一些工作负载中,这是一场灾难。 由于它不是优先级队列(它是 fifo(,因此将"紧急工作"带到线路的负责人并不容易 - 您必须等待它或开始编写专门的调度和队列管理以满足您的业务需求。 "痛点"通常是相反的 - 问问自己,从将作业输入队列到它开始运行之间的最长时间是多少。 取这个数字,除以作业的平均执行时间,除以队列线程大小(只要它小于实际硬件并发性( - 这是您的最大队列大小。

Time to Start Job =  Current Length of queue  *  Time per job  / Number of (real) threads. 
Maximum (or average working) queue size == (Maximum Latency * threads ) / Time per job

餐巾纸数学:假设以下球形元素:

Jobs = 100ms/each Thread Count = 16 (real cores) Max acceptable latency = 10 seconds
----------------------------- Queue Size Limit = 10*16/.1 = 1600
If your max latency is 10000 seconds then q=1600000
If your max latency is 1 sec then q=160

对于二阶因素 - 当您推送并发并加载时,锁争用的可能性增加 - 非线性(取决于您的代码详细信息( - 请注意这一点。 密切关注锁定争用、io 等待等的监控历史记录。 在这种情况下,删除线程的 # 可能比删除队列大小更有好处。

最新更新