0

注意:我正在寻找有关如何调试此问题的任何提示,不一定是此特定问题的直接答案。

我正在测量用于我们系统的 PipelineDB 的性能。我已经定义了一些连续的视图(计算总和,top-K 等),从单个流(大约 20 列,一些文本,主要是整数和布尔值)馈送。测试是用 Python 编写的,我使用 psycopg2 cursor.copy_from() 函数来实现最大性能。当连续视图指定的工作不太复杂时,PipelineDB 表现良好。但是,当我要求它计算许多 top-K 结果或许多 percentile_cont() 值时,测试挂起并出现以下症状:

  • (单个)“worker0”进程开始占用 100% CPU
  • 输入过程显示它正在运行COPY命令,从不切换到IDLE(正常工作时,它在COPY和IDLE之间切换)。
  • 测试挂起(即 copy_from() 函数调用不返回)

下面是“ps -ef”命令的输出,显示了大约一分钟或运行测试后的所有 pipelinedb 进程。请注意,worker0 进程自测试开始以来正在消耗 100% 的 CPU。它永远不会恢复正常工作('top' 表明它正在消耗 100% 的 CPU)

测试日志显示它在前约 1 秒内运行正常,插入了约 30,000 个事件(每批 100 个),然后它挂起,因为对 copy_from() 函数的调用没有返回。

当我减少 PipelineDB 的工作量时(通过删除一些连续视图),测试工作正常,每秒插入次数高达 20,000 次,持续至少一分钟。

我想指出,所有事件都具有相同的时间戳,并且所有视图都有一个“GROUP BY minute”子句,因此在测试期间应该在每个连续视图中创建/更新一行。

我已经使用了一些配置参数,特别是与内存缓冲区大小、同步方法、时间间隔、max_wait 等、工作人员数量相关的配置参数,但找不到任何可以避免该问题的组合。

我不知道我遇到的是 PipelineDB 问题还是 PostgreSQL 问题。当然,这不是预期的行为,在实际应用中是不能容忍的。欢迎任何提示、猜测、直觉等。

[orens@rd10 ~]$ps -ef | grep pipelinedb 
UID   PID  PPID  C STIME TTY    TIME   CMD
orens 3005 3004  0 11:17 ?    00:00:00 pipelinedb: logger process    
orens 3007 3004  0 11:17 ?    00:00:00 pipelinedb: checkpointer process    
orens 3008 3004  0 11:17 ?    00:00:00 pipelinedb: writer process    
orens 3009 3004  0 11:17 ?    00:00:00 pipelinedb: wal writer process    
orens 3010 3004  0 11:17 ?    00:00:00 pipelinedb: autovacuum launcher process    
orens 3011 3004  0 11:17 ?    00:00:00 pipelinedb: stats collector process    
orens 3012 3004  0 11:17 ?    00:00:00 pipelinedb: pipelinedb scheduler process    
orens 3014 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: reaper0 [pipeline]    
orens 3015 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: queue0 [pipeline]    
orens 3016 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: combiner1 [pipeline]    
orens 3017 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: combiner0 [pipeline]   
orens 3018 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: worker0 [pipeline]    
orens 3046 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: reaper0 [db1]    
orens 3050 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: queue0 [db1]      
orens 3052 3004  0 11:17 ?    00:00:00 pipelinedb: bgworker: combiner0 [db1]
orens 3056 3004 90 11:17 ?    00:01:06 pipelinedb: bgworker: worker0 [db1]    
orens 3132 3004  1 11:17 ?    00:00:01 pipelinedb: ut_user db1 ::1(58830) COPY
[orens@rd10 ~]$
4

0 回答 0