参数配置:workerNum=64;子执行器=32;最大内存大小=256; localExecutors=63.
在单进程部署中:
subscribeTable
函数指定过滤器参数为32个桶的哈希过滤。 DolphinDB 许可证有 64 个核心。
根据
getStreamingStat()
返回的pubTables表,bucket = 32时msgOffset的增长速度比bucket = 8时慢很多。从表subWorkers来看,数据分发速度完全赶不上数据处理速度。
在我的系统中,CPU使用率总是在短时间内达到多线程峰值。然后,系统等待所有子worker处理完毕(CPU占用率降至1%以下),然后再进行下一次数据分发。
而且,
getStreamingStat()
返回的subWorkers表表明大多数worker的queueDepth往往为0。数据分发速度慢导致交易后处理效率严重低下。
我的问题是:
数据分发缓慢的原因是什么?是因为流引擎的计算任务简单吗?
如何提高数据分发速度?
此问题已在服务器 1.30.23 / 2.00.11 中修复。对于早期版本,有两种方法:
添加一层订阅。使用
subscribeTable
函数订阅原始流表并将其写入中间表。然后,通过哈希过滤订阅中间表。
降低重播速度。配置参数 localSubscriberNum 以增加用于从发布队列分发消息的线程数。