常用数据库性能相关参数
参数 | 类型 | 用途 | 默认值/最大值 | 生效****方式 |
---|---|---|---|---|
shared_buffers | integer | 设置数据库服务器将使用的共享内存缓冲区大小,这个值一般建议1/4物理内存大小。由于进程之间需要同步共享内存信息、且PG还会使用操作系统缓存,因此不宜太大。需要根据内存命中率的情况适当调整该参数 | 资源模板的1/4 | restart |
temp_buffers | integer | 连接本地内存,仅用于访问临时表,并不是设置多大就分配多大,而是分配一个buffer指针,按需扩展到temp_buffers。 | 8MB | userset |
work_mem | integer | 连接本地内存,用于连接的一些排序、hash table等操作,如果work_mem不够,则会申请临时磁盘空间。 | 4MB | userset |
maintenance_work_mem | integer | 维护操作能申请的最大内存,例如:VACUUM, CREATE INDEX,提高会加速这些操作,包括pg_restore操作。注意autovacuum_work_mem如果没有设置,则会使用这个设置,最多能申请autovacuum_max_workers*autovacuum_work_mem大小内存。因此建议在做维护操作的连接单独设置,并给autovacuum进程单独设置autovacuum_work_mem。 | 64MB | userset |
vacuum_cost_limit | integer | 累积的cost消耗到这个值后,vacuum休眠vacuum_cost_delay(默认为0,不休眠)时间。 | PG为200,TDSQL-PG默认为10000 | restart |
autovacuum_vacuum_cost_delay | floating point | 当前所有autovacuum进程积累的cost消耗到autovacuum_vacuum_cost_limit后休眠的时间。 | PG为2ms,TDSQL-PG默认为20ms | restart |
wal_compression | boolean | full page image 在写入到WAL中进行压缩,目前是gzip压缩方式,压缩比能到30%。对wal日志比较大系统有提升,但会消耗CPU,一般在5%左右,不同CPU影响程度不一样。 | off | restart |
checkpoint_timeout | integer | 两次自动checkpoint间隔时间,设置越大故障时间越长,但IO可能会更平滑,但不能一味设置很大,要看系统的IO、业务压力情况而定。 | PG为5min,TDSQL-PG默认为10min | restart |
checkpoint_completion_target | floating point | checkpoint完成目标,尽量让checkpoint在checkpoint_completion_target * checkpoint_timeout时间内完成。 如果checkpoint时间太短,会让checkpoint进入急速模式,IO压力骤增。 | PG为0.5min,TDSQL-PG默认为0.93 | restart |
random_page_cost | integer | 随机扫描一个块的代价基准值,建议值:SATA/SAS盘: 4SSD:2Nvme SSD:1 | PG为4,TDSQL-PG默认为2 | restart |
effective_cache_size | integer | 生成执行计划时,评估数据库能用的缓冲内存大小(shared_buffers+操作系统的文件系统缓存),不会实际占用。值越大更偏向于走索引扫描,一般可设置总内存- shared_buffers - 业务内存。 | 4GB | restart |
log_min_duration_statement | integer | 执行时间超过log_min_duration_statement的SQL将记录到数据库运行日志中。 | PG为-1,TDSQL-PG默认为10000 | reload |
log_statement | enum | 设置数据库对那些类型SQL进行日志记录。推荐设置为DDL,加上log_min_duration_statement针对慢SQL的设置即可。 | PG为none,TDSQL-PG默认为ddl | reload |
autovacuum_vacuum_scale_factor | integer | 表中数据变化(inserted, updated or deleted tuples)超过表数据比例,之后才会触发autovacuum中的vacuum。 autovacuum_analyze_scale_factor同理(PG为0.1,TDSQL-PG默认为0.0001)。 | PG为0.2,TDSQL-PG默认为0.0002 | 库/表级参数,表级优先 reload |
fillfactor | integer | 表填充因子,数据块在插入多少比例数据之后不再插入,留下空间给update操作copy新行使用。在同一块中申请空间,将用到HOT update,对update性能提升很大。 | 默认为100 | 表级参数。更改参数需要重建表生效。 |
查询优化相关GUC参数
参数 | 类型 | 用途 | 默认值/最大值 | 生效****方式 |
---|---|---|---|---|
prefer_olap | bool | 关闭时复杂查询不走重分布,直接拉到cn计算 | true | userset |
olap_optimizer | bool | 关掉,会把数据拉到cn再count;打开,会在dn先聚集一遍,再在cn聚集一遍 | on | userset |
enable_pullup_subquery | bool | 是否将not in(select xxx)转换成hash join,注意,如果子查询存在null,则返回结果是不一致的 | off | userset |
replication_level | integer | 执行计划走复制方式的最大层数 | 1/INT_MAX | userset |
restrict_query | bool | 尽可能将查询只发给相关的节点 | true | userset |
enable_subquery_shipping | bool | 子查询只包含常量的情况将子查询下推 | true | userset |
shared_queues | integer | 最大支持数据交换并发个数 | 256/INT_MAX | restart |
use_data_pump | bool | 使用datapump去做数据交换 | true | reload |
debug_data_pump | bool | 数据交换优化debug开关 | false | reload |
sender_thread_num | integer | 数据交换发送线程个数 | 8/512 | reload |
sender_thread_buffer_size | integer | 数据交换发送缓冲区 | 16/1048576k | restart |
sender_thread_batch_size | integer | 数据交换缓冲区发送阈值 | 8/524288k | reload |
persistent_datanode_connections | bool | 是否保持CN和DN之间的会话。高并发业务场景要保持on,否则每次CN和DN之间的连接都需要从连接池获取。 | on | restart |
pooler_scale_factor | integer | CN和DN之间的连接池中一次连接扩展个数。高并发场景,用户连接一次增长太快,可能导致pooler扩展不及时,导致应用报错获取连接失败,需要调大该参数。 | 8 | restart |