LightDB 通过 pg_cron 模块来实现每日在最空闲时间来运行一次 vacuum 和 analyze 命令。
可通过修改 postgresql.conf 配置项自动收集:
autovacuum = on # 开启自动收集
autovacuum_naptime = 15min # vacuum 间隔时间 15min
Track_counts=on # 打开收集表和索引上的访问的统计信息
Track_activities=on # 允许跟踪每个 session 执行的 SQL 命令的信息 track_io_timing=on # 允许统计 I/O 调用的时间
AutoVacuum 会启动后台进程运行

对于大表, analyze 命令只读取表的部分内容随机抽样,完成统计信息收集。如果想要统计信息更加准确,可以通过修改参数抽样比例default _statistics_target= 256,默认为 100 ,如果设置的过大,也会拉长收集信息的时间,根据表的行数而定。
同时,可以手动指定列有多少个唯一值,命令:
ALTER TABLE tb1 ALTER COLUMN id set ( n_distinct =2000);
对于继承表,设置 父 表时,子表可以继续父表的设置,命令:
ALTER TABLE tb1 ALTER COLUMN id set ( n_distinct_inherited =2000);
