我有一个 PostgreSQL 11 数据库,它托管多个数据库,其中一些包含经常插入和更新的表。最近写入 WAL 文件的数据量大幅增加(大约 400%),尽管我相信插入数据库的数量只增加了大约 20%。
因此,我们不仅使用了更多磁盘,而且我们的数据库性能现在似乎受到 WAL 所在磁盘的写入器性能的限制。
应用程序更新非常频繁,可能是应用程序中的某些内容(我们控制并能够更改)发生了变化,这导致插入/更新效率降低,但我不知道我们如何会确定这一点。自从这种行为变化开始以来,可能已经发生了很多变化,并且自从它第一次被注意到以来已经发生了一些变化。
有没有办法确定哪些数据库/表/查询正在写入 WAL,以及(大约)数量?
如果您使用的是 PostgreSQL v13,您可以安装pg_stat_statements,它会在列中记录每个语句的 WAL 数量
wal_bytes
。所以你可以跑WAL 本身与某个 SQL 语句没有连接,但是如果您检查带有 的条目
pg_waldump
,您可以将它们连接到与数据库对象相对应的某些文件。这条路线很麻烦。升级到 v13。