Pipelinedb在高负载下陷入困境,工作进程吃了100%的CPU,无所事事

时间:2018-11-04 10:01:23

标签: pipelinedb

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

我正在测量在我们的系统中使用的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。它永远不会恢复正常工作(“顶部”表明它正消耗100%的CPU)

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

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

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

我已经使用了一些配置参数,特别是那些与内存缓冲区大小,同步方法,时间间隔,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 ~]$

0 个答案:

没有答案