Eu tenho um banco de dados PostgreSQL 11 que hospeda vários bancos de dados, alguns dos quais contêm tabelas que são inseridas e atualizadas com frequência. Recentemente, a quantidade de dados gravados em arquivos WAL aumentou muito (cerca de 400%), embora eu acredite que o número de inserções no banco de dados tenha aumentado apenas cerca de 20%.
Como consequência, não apenas estamos usando mais disco, mas o desempenho do nosso banco de dados agora parece limitado pelo desempenho do gravador dos discos em que os WALs estão.
O aplicativo é atualizado com muita frequência, e pode ser que algo no aplicativo (que controlamos e podemos alterar) tenha mudado, o que está causando inserções/atualizações menos eficientes, mas não sei como podemos identificaria isso. Provavelmente houve muitas mudanças desde que essa mudança de comportamento começou, e várias desde que foi notada pela primeira vez.
Existe uma maneira de determinar quais bancos de dados/tabelas/consultas estão gravando no WAL e em qual quantidade (aproximada)?
Se você estiver usando o PostgreSQL v13, poderá instalar pg_stat_statements , que registra a quantidade de WAL por instrução na
wal_bytes
coluna. Então você poderia correrO próprio WAL não tem conexão com uma determinada instrução SQL, mas se você examinar as entradas com
pg_waldump
, poderá conectá-las a determinados arquivos, que correspondem a objetos de banco de dados. Esse caminho é complicado.Atualize para v13.