通过源码(src/config.c)我们可以得到每一个参数的简要描述、默认值、取值范围(官网文档没有取值范围)。再结合官网文档和源码中使用的典型位置,分析参数作用【源码部分逐步更新】
num_workers
默认:1
范围:1~1024
解释:设置为每一个database分配的并行连续查询的Worker进程数量,设置的越大,吞吐量越大,直到受到CPU限制。
num_combiners
默认:1
范围:1~1024
解释:设置为每一个database分配的并行连续查询的Worker进程数量,设置的越大,吞吐量越大,直到受到磁盘I/O限制
num_queues
默认:1
范围:1~1024
解释:设置并行连续查询的IPC队列数量。
num_reapers
默认:1
范围:1~1024
解释:设置并行连续查询的Reaper进程数量,Reaper进程是用来回收设置了数据生存时间(Time-To-Live,TTL)的CV中的过期数据。
stream_insert_level
默认:sync_receive
范围:async,sync_receive,sync_commit
解释:设置当前事务的流写入的同步级别,定义INSERT操作结束如何响应客户端。Async,异步模式,数据一发送到ZMQ就响应客户端。sync_receive,同步接收模式,数据一经Worker接收(消费)就响应客户端。sync_commit,同步提交模式,只有在下游的Combiner将所有INSERT引起的更改提交到MREL时响应客户端。目测最后一种可以保证高可用性,但是官方泼了冷水,提到sync_commit仍处于测试阶段,且使用后写入延迟明显增加,不适合生产环境。
sliding_window_step_factor
默认:5.0%
范围:0.0%~50.0%
解释:设置滑动窗口查询的步长,这个步长是窗口大小的百分比。设置的越大,计算性能越高,要和参数‘刷新间隔’的设置做权衡。
continuous_queries_enabled(官网文档未提及)
默认:true
范围:true,false
解释:如果为真,则在连续查询创建时就开始执行。
stream_targets(官网文档未提及)
默认:true
范围:true,false
解释:当插入Stream时会被影响的CV列表。
batch_mem(官网文档未提及)
默认:262144KB(256M)
范围:8192KB(8M),INT_MAX / 1024KB【源码中的MAX_KILOBYTES是Postgre的guc.h中定义的】
解释:设置执行一次连续查询计划前最大的积累批大小,设置的越大,CV的更新频率越低,延迟越高,还会再进程崩溃时造城数据丢失。
batch_size
默认:10000
范围:10,INT_MAX
解释:设置执行一次连续查询计划前最大的积累批大小,类似于Kafka Producer的batch_size,设置的较高会使CV的更新频率变低,延迟越高,还会再进程崩溃时造城数据丢失。
commit_interval
默认:50ms
范围:0ms,60000ms
解释:设置Combiner在提交计算结果前在内存中保留计算数据的毫秒数,将合并的结果数据HOLD在combiner_work_mem中。设置的越大,计算性能越高,但CV的更新频率会降低,而且更容易造城数据丢失。
ipc_hwm
默认:10
范围:1,INT_MAX
解释:设置Worker和Combiner进程之间的水位(High WaterMark)。值越大,在内存中排队的消息就越多。
max_wait
默认:50ms
范围:1ms,60000ms
解释:设置连续查询进程等待一批数据堆积的毫秒数。设置的越大,计算性能越高,但CV的更新频率会降低,而且更容易造城数据丢失。
ttl_expiration_batch_size
默认:10000
范围:0,INT_MAX
解释:设置Reaper一次回收的过期数据的最大数量。该参数的目的是防止长事务,设置为0意味着不限制一次回收的数量。
ttl_expiration_threshold
默认:5%
范围:0%,100%
解释:设置Reaper从CV中回收过期数据的比例(允许额外延期的时间占原定过期时间的比例),设置的高将会节省在CV上的删除业务。
源码:(src/reaper.c)
static bool should_expire(Oid relid)
{
... ...
int threshold_ms;
... ...
// 计算可接受的过期时间
threshold_ms = entry->ttl * (1000 * ttl_expiration_threshold / 100.0);
// 调用Postgre timestamp.c.方法,返回stop_time-start_time>=msec
if (TimestampDifferenceExceeds(
entry->last_expired, //start_time 过期时间
GetCurrentTimestamp(), //stop_time 此时
threshold_ms)) //msec 可接受的秒数
return true;
return false;
}
queue_mem(官网文档未提及)
默认:262144KB(256M)
范围:8192KB(8M),INT_MAX / 1024KB
解释:设置每个队列进程将使用的最大内存量。
Fillfactor
默认:50
范围:1,100
解释:设置CV的Fillfactor,由于流计算的结果CV需要经常被Combiner更新,所以多数为更新操作,那么设置合理的Fillfactor可以避免索引膨胀。
combiner_work_mem
默认:262144KB(256M)
范围:16384KB(16M),INT_MAX / 1024KB
解释:设置Combiner用于连续查询结果的的最大内存。这块内存在Combiner合并Worker计算结果时,用于排序、Hash。如果combiner使用内存超出这个设置,则使用磁盘。
anonymous_update_checks
默认:true
范围:true,false
解释:是否应匿名检查是否有新版本。
matrels_writable
默认:false
范围:true,false
解释:如果为true,则允许直接对CV进行更改。