一、查看服务器配置
1、查看CPU个数
cat /proc/cpuinfo |grep "physical id" |sort |uniq |wc -l
2、查看单个CPU的物理核数
cat /proc/cpuinfo |grep "cpu cores" |uniq
3、查看逻辑线程数
cat /proc/cpuinfo |grep "processor" |wc -l
4、查看内存大小
free
5、查看存储大小
df -Th
当然,数据库优化不需要考虑存储或者硬盘的大小。
我的服务器配置如下:
内存:512G
连接存储
cpu:2cpu 24核心 48线程
二、配置postgresql.conf
参数名称 | 默认值 | 优化值 | 参数说明 |
---|---|---|---|
listen_addresses | localhost | * | 允许所有ip连接 |
max_connections | 100 | 200 | 允许的最大连接数 |
superuser_reserved_connections | 3 | 13 | 保留给postgres用户的连接,适用于切换到postgres用户后开启多个连接的情况 |
shared_buffers | 24MB | 128GB | 决定有多少内存可以被PostgreSQL用于缓存数据(推荐内存的1/4,不超过内存的1/2) |
huge_pages | try | try | 使用大页,建议shared_buffers超过32GB时开启 |
work_mem | 1MB | 8MB | 内部排序和一些复杂的查询都在这个buffer中完成,不过要适可而止,每个连接都要用这么大的 |
effective_cache_size | 4GB | 256GB | 优化器假设一个查询可以用的最大内存,和shared_buffers无关(推荐内存的1/2),设置稍大,优化器更倾向使用索引扫描而不是顺序扫描 |
maintenance_work_mem | 64MB | 2GB | 这里定义的内存只是被VACUUM等耗费资源较多的命令调用时使用,把该值调大,能加快命令的执行 |
vacuum_cost_limit | 200 | 500 | 清理delete后的空间,此时对io影响较大,提高该值减少对性能的影响 |
max_worker_processes | 8 | 128 | 最大并发进程数,parallel worker等都算作worker process,该值要设置的足够大 |
max_parallel_workers_per_gather | 2 | 4 | 每个执行节点的最大并行处理进程数,使用并行查询时设置该值大于1,不建议超过主机cores-2 |
max_parallel_workers | 8 | 8 | 并行查询时,最大线程数 |
wal_buffers | 4MB | 用于wal的内存大小,设置为shared_buffers/32,设置为-1表示按shared_buffers计算 | |
max_wal_size | 1GB | 256GB | 小的时候wal日志写入量大,越大,崩溃恢复时间越长 |
min_wal_size | 80MB | 64GB | 建议是shared_buffers的一半 |
check_point_timeout | 5min | 30min | wal检查写入磁盘的时间间隔 |
log_destination | stderr | csvlog | 日志文件输出地 |
log_truncate_on_rotation | off | on | 删除同名的日志文件 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。