• 售前

  • 售后

热门帖子
入门百科

解决PostgreSQL日记信息占用磁盘过大的标题

[复制链接]
123457776 显示全部楼层 发表于 2021-10-26 14:09:09 |阅读模式 打印 上一主题 下一主题
当PostgreSQL启用日记时,若postgresql.conf日记的干系参数还利用默认值的话磁盘很轻易被撑爆.因此在启用了logging_collector参数时,需要对其它干系的参数举行调整.
体系默认参数如下
  1. #log_destination = 'stderr' #日志格式,值为stderr, csvlog, syslog, and eventlog之一.
  2. logging_collector = on #启用日志
  3. #log_directory = 'log' #日志文件存储目录
  4. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' #日志文件命名方,默认为每秒一个文件(postgresql-2017-10-18_231548.log)
  5. #log_file_mode = 0600 #日志文件权限
  6. #log_truncate_on_rotation = off #是否截断日志文件
复制代码
调整后的参数
  1. log_destination = 'csvlog' #日志格式,值为stderr, csvlog, syslog, and eventlog之一.
  2. logging_collector = on #启用日志
  3. log_directory = 'log' #日志文件存储目录
  4. log_filename = 'postgresql-%j.log' #日志文件命名方式,最多保存一年的日志.同时要打开log_truncate_on_rotation,否则日志以追加的方式显示在后面.
  5. log_file_mode = 0600 #日志文件权限
  6. log_truncate_on_rotation = on #是否截断日志文件
复制代码
重点内容
  1. log_destination = 'csvlog'
  2. log_filename = 'postgresql-%j.log'
  3. log_truncate_on_rotation = on
复制代码
log_destination:建议设置为csvlog,以便将日记链接到PostgreSQL中检察.参看Error Reporting and Logging 19.8.4. Using CSV-Format Log Output
log_filename :设置日记文件名,需团结log_truncate_on_rotation = on利用.可根据本身的需要调整, 比方:
  1. log_filename = 'postgresql-%I.log' #最多保存12小时的日志,每小时一个文件
  2. log_filename = 'postgresql-%H.log' #最多保存24小时的日志,每小时一个文件
  3. log_filename = 'postgresql-%w.log' #最多保存一周的日志,每天一个文件
  4. log_filename = 'postgresql-%d.log' #最多保存一个月的日志,每天一个文件
  5. log_filename = 'postgresql-%j.log' #最多保存一年的日志,每天一个文件
复制代码
补充:PostgreSQL 日记体系 及 设置错误导致磁盘塞满案例
今天早上偶然看到QQ 群内里有一个人,在问题目,题目不紧张,重要是没有人答复, 然后这个人马上就用非常让人难以担当的词汇,问候了群内里没有答复他的一干人等, 实在我有点可怜他, 问一个题目没有人答复,就云云,你是经历了什么,让你连5分钟的耐心都没有, 每个人都有本身的生存轨迹, 不答复你是很正常的,
终究 nothing is impossible , right?
正文
在浩繁的数据库中,POSTGRESQL 的日记的体系的丰富度和日记的详细的水平,都是可圈可点的,在网上不少同学都在问各种POSTGRESQL的题目,实在这些题目都可以在日记中找到答案,或者提交一些日记给题目的办理者,提高题目的办理速率和题目的定位的正确度。
起首我们先从日记的详细度来入手,log_min_messages 界说了日记的详细水平,实在我们在选择上可能会有一些纠结,纠结点在error warning notice 这三种,大部门人可能在选择error ,出错就报错误,warning 也有干系选择,实际上选择差别的日记的详细度也是有干系的一些考虑
1 假如你对PG本身不熟悉,测试体系可以开启notice ,如许便于你去检察一些你不明白,的东西并快速的举行学习,假如是生产体系初始阶段可以开启warning 对体系的初始时期的一些题目,可能是配置上,或者体系级别的一些题目举行更深的明白,假如是稳定运行一段时间的体系则可以将其调整到 error 方面,低落一些不必要的日记的写入,对性能和空间都有帮助。

这里建议各人可以利用warning 来作为通例的日记的详细度的利用。
2 假如有人问,在语句实行的时间,我的语句被莫名其名的kill 了我怎么查出来。下面的 log_min_error_statment 设置的选择项就与其有关了,

比方下面的错误
  1. ERROR: current transaction is aborted, commands ignored until end of transaction block
  2. STATEMENT: SELECT * FROM mytable WHERE id = 1 FOR UPDATE;
复制代码
log_min_duration_statement 是对应慢查询的日记,当设置的值大于0 后,则凌驾对应设置数字秒数的SQL 语句将被纪录。
这里需要考虑你的体系是OLAP OR OLTP 的环境,假如设置为 1秒,但你的体系内里的SQL 语句常常要大于1秒,则你的日记中将大量充斥如许的SQL 导致你的日记变得非常大。
说到这个MYSQL的DB会以为PG的日记太乱了,MYSQL的日记大部门是分开的,如许有利于日记的检察和分析。这里实在也建议PG是否可以考虑将日记分开,至少分为 SLOW LOG ERROR LOG SYSTEM LOG 等等。
当然说完不敷,害的说优点,让其他数据库DB们羡慕的应该就是下面的选项,你不会在任何一个数据库中,找到云云丰富选择配置
1
  1. log_checkpoint
复制代码
对当前的checkpoint的利用举行纪录,通过这个信息可以有两点
1 有干系的监控体系可以读这些信息,天生图标,让这些信息成为一个趋势图来对体系举行分析,并修正体系
2 也可以手工写python步伐来收集信息,直接出陈诉或诊断

2
  1. log_connections
复制代码
用户的登陆信息
3
  1. log_disconnections
复制代码
用户的断开的登陆的信息
4
  1. log_error_verbosity
复制代码
纪录信息的详细水平,默认default
5
  1. log_hostname
复制代码
默认纪录信息中带有客户端的IP地址,不带有对方的机器名
6
  1. log_line_prefix
复制代码
相当于对日记的打印的格式和信息的设置,有些监控体系对此是有要求的,请按照你安装的监控体系的要求配置此栏
7
  1. log_lock_waits
复制代码
纪录语句实行中的锁等待时间
8
  1. log_statement
复制代码
对于什么语句举行纪录,(这个与上面的无关,有语句审计的时间可能需要打开这个开关,举行语句的收集,不建议利用all 否则对于体系的负担太重,相当于在MYSQL中开启genernal log)

实际上很多人在利用POSTGERSQL开始的时间,是找不到日记的,因为默认PG的日记默认是不打开的,关键的参数在 logging_collector 默认是off,所以安装PG后的启动前的第一件事情就是要将这个设置变为ON ,好让PG从开始就开始纪录日记。
别的日记的定期清理方面PG比其他的开源数据库要做到很多多少了,因为不少人都的本身写日记的rotate 和 clean up的脚本,PG 这里不需要,你只需要在 log_rotation_age中设置你要保存几天的日记,同时 log_truncate_on_rotation 设置为on 就可以了,这点黑白常人性化的。或者你也可以根据日记的大小举行设置如何抛弃他。

说完这些,我们来看看实际当中会遇到什么题目,以一个案例

在搭建完PG后,体系上线前并无题目,在体系上线后第二天,有人反馈PG的日记将体系的磁盘空间大量的占用,而且7 分钟就产生一个日记文件,后续为了减少干系的日记的数量较快的增长,做了如下修改
  1. log_rotation_size = 100MB
复制代码
将日记的容量以及重置设置的更大

修改完毕后,不重新体系,直接加载后,日记的增长频率已经更改了。但日记的对磁盘空间的占用的题目还是没有办理。
打开日记,体系纪录了大量如下的信息

罪魁祸首就是下面图中的log_statement_stats 这个设置,将他打开后,体系会根据每个SQL 产生一个语句的性能方面的统计信息,可以想象假如将他打开可以看到每条语句在实行中的状态, duration 等等信息,但如许就会产生大量的日记,颠末统计次体系1秒产生1MB的日记,(此体系每秒插入上百条数据),在关闭后,题目办理。

所以看似一个日记的设置,假如不熟悉体系,也会造成雷同的题目,而且在告急的状态下,可能会用较长的时间来办理。实际上日记体系另有一些其他的细节,比方时区的题目,找机会可以在说说吧
以上为个人履历,盼望能给各人一个参考,也盼望各人多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作