1

PostgreSQL 配置优化和日志分析

 6 months ago
source link: https://jiajunhuang.com/articles/2024_03_05-postgresql_conf.md.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

PostgreSQL 配置优化和日志分析

PG默认的配置下,连接数和缓存等都不是很大,因此我们需要根据机器的情况来优化参数,这里我推荐一个工具 pgtune 。 它可以根据输入的机器性能,给你输出比较适合的配置,例如

PGTune Example

我们只需要根据输出微调即可,解释一下这几个关键配置:

max_connections = 1024  # 最大连接数
shared_buffers = 2GB  # PG使用2GB内存来做缓存
effective_cache_size = 6GB  # 剩下的6GB内存,作为PG和操作系统一起用的缓存
maintenance_work_mem = 512MB  # PG执行一些维护工作时使用的内存大小,例如VACUUM,构建索引和ALTER TABLE等等
checkpoint_completion_target = 0.9  # 这个涉及到WAL日志的checkpoint操作,我还不是特别清楚
wal_buffers = 16MB  # WAL 日志的缓冲区大小
default_statistics_target = 100  # 收集统计信息的深度
random_page_cost = 1.1  # PG查询优化器认为读取一个随机页面的成本(具体我也不清楚,应该是影响PG做读取操作的)
effective_io_concurrency = 200  # 并发磁盘I/O操作的数量
work_mem = 1MB  # PG执行排序或者哈希表操作时可以使用的内存量
huge_pages = off  # 关闭huge page特性
min_wal_size = 2GB  # 最小的WAL大小
max_wal_size = 8GB  # 最大的WAL大小

除此之外,还需要更改一些日志相关的配置:

log_min_duration_statement = 500  # 超过这个时间的SQL就会被记录到慢日志,单位是ms
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '  # 更改日志格式
log_checkpoints = on  # 记录检查点
log_connections = on  # 记录打开连接的信息
log_disconnections = on  # 记录关闭连接的信息
log_lock_waits = on  # 记录等待锁的信息
log_temp_files = 0  # 记录临时文件的信息
log_autovacuum_min_duration = 0  # 记录删除无用文件的时间(VACUUM)
log_error_verbosity = default  # 记录错误的详细程度
lc_messages='en_US.UTF-8'
lc_messages='C'

然后重启一下数据库,应用这些配置:sudo systemctl restart postgresql

有了上述日志相关的配置之后,接下来就是分析慢查询,有另外一个比较实用的工具:pgbadger。 很多发行版都包含了这个程序,因此可以直接安装:

$ sudo apt install -y pgbadger

安装好之后,就可以开始分析了:

$ sudo su
# pgbadger /var/log/postgresql/postgresql-15-main.log

等待完成之后,当前目录就会产生一个 out.html 文件,打开就可以看到具体的分析,除此之外,我们还可以设置一个定时任务,例如 每天1点执行一次分析,分析所有的日志,并且以增量的形式分析:

# mkdir -p /var/www/html/pgbadger

# crontab -e  # 然后输入下面的这个定时任务
0 1 * * * pgbadger --R 1 -I -q /var/log/postgresql/postgresql-* -O /var/www/html/pgbadger/

这样每天1点就会执行一次,而且是以增量的形式执行分析,第二天就可以查看报告了。


gRPC鉴权方案 Golang里数据库migration方案 Android SwipeRefreshLayout左右滑动冲突的解决 Android调用gRPC的两个小工具函数 Android上结合kotlin使用coroutine gRPC错误处理 Java collection的结构 为啥Redis使用pipelining会更快? 通过阳台种菜实现蔬菜自由 从GORM里学习到的panic处理方式 Go使用闭包简化数据库操作代码 TCMalloc设计文档学习 Flask和requests做一个简单的请求代理 Linux常用命令(四):xargs Linux常用命令(三):watch



Recommend

  • 44
    • blog.51cto.com 6 years ago
    • Cache

    Apache优化——日志管理-神游

    11.22访问日志不记录静态文件编辑虚拟主机配置文件“httpd-vhosts.conf”:[root@centos-01linux~]#vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf……<VirtualHost*:80>DocumentRoot"/data/wwwroot/111.com"ServerNam

  • 15
    • www.linkedkeeper.com 4 years ago
    • Cache

    Log4j 日志输出性能优化

    Log4j 日志输出性能优化 Log4j 日志输出性能优化 张松然 10余年资深架构经验,对高性能网关、多线程、NIO、HTTP/TCP 长...

  • 40
    • www.phodal.com 3 years ago
    • Cache

    Rust 性能优化日志(上)

    最近的几个月里,一直在编写代码识别引擎 Scie ,好不容易解决了各种奇怪的问题。随后,在尝试做了一次 benchmark 之后,发现我写了的这么一些 Rust 代码,运行起来的速度非常慢。同样是...

  • 10
    • soulteary.com 3 years ago
    • Cache

    站点优化日志(2020.12.06)

    记录网站最近的一些优化内容。 主要调整内容 Nginx 1.19.5 Traefik 2.3.4

  • 12

    ▲  点击上方"多颗糖" 关注公众号 在上篇《条分缕析 Raft 算法》中推导和梳理了 Raft 算法,但仍有一些细节没有包含到,这篇文章作为补充。 1 日志压缩 随着时间推移,存...

  • 11
    • soulteary.com 3 years ago
    • Cache

    站点优化日志(2021.04.12)

    记录网站最近的一些优化内容。 主要调整内容 构建系统迁移,由 GitLab Runner 变更至 Drone CI 网站构建工具更新,将几年前的 Node 脚本由 Golan...

  • 3

    Log4j2基于Disruptor异步日志优化(部分源码学习)发布于 11 月 26 日  最近遇到了个log4j2写日志导致线程阻塞的问题(多亏了开发小哥日志打的多,不然就没有下面这一...

  • 5
    • blog.pingvim.com 2 years ago
    • Cache

    Golang日志扫描优化记录

    Golang日志扫描优化记录 本文主要记录一次日志扫描正则优化过程,项目中使用了火焰图性能分析、第三方正则库、tail包等,主要记录优化过程思路。 首先讲一下应用场景,因为业...

  • 3

    慢SQL定位、日志分析与8大优化机制,DBA上岗必用 我思知我在 2022-08-03 09:18:48 一个sql执行很慢的就叫慢sql,一...

  • 11

    Presto 在阿里云实时日志分析中的实践和优化 作者:顾汉杰 2023-10-08 07:33:24 本文将分享阿里云千亿规模实时日志分析的架构设计和实践。本文将聚焦在存储和分析基础能力上面的建设,重点分享日志分析系统,以及...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK