问题:
postgresql数据库 库不大 但每日产生日志量15GB左右
分析:
1 导入日志查看是否有异常高频日志
select to_char(t.log_time,'YYYY-MM-DD HH24:MI') as minutes,
sum ((t.error_severity='LOG')::int) as LOG,
sum ((t.error_severity='ERROR')::int) as ERROR,
sum ((t.error_severity='FATAL')::int) as FATAL,
sum ((t.error_severity is null)::int) as OTHER,
count(1)
from bak.postgres_log t
group by to_char(t.log_time,'YYYY-MM-DD HH24:MI')
order by count(1) desc;
查询后发现除了高峰期之外,数据库连接频率基本稳定 每分钟不到1000个
2 大致浏览日志,查看是否有异常大的字段
发现有异常sql存放的字段很大
在数据库中进一步确认
SELECT
id,
pg_column_size(context) AS 字节大小,
pg_column_size(context)/1024 AS KB大小,
pg_column_size(context)/1024/1024 AS MB大小
FROM test
order by 字节大小 desc
在日志里进一步匹配该sql关键字
cat 2026-03-31_000000.csv | grep -i -a test | grep -i "context" | wc -l
分析后发现,异常sql更新字段会把传参一个大约在数据库中存储近10MB的参数
处理方案:
把图片存到文件中 只给数据库存url地址