Muitos sistemas têm um padrão de acúmulo constante de dados ao longo do tempo. Além disso, a maioria deles nunca muda novamente - ou seja, eles são escritos no modo somente acréscimo .
Esses não são apenas vários tipos de registros e métricas de equipamento, mas também coisas aparentemente não relacionadas, como correspondência entre usuários ou comentários sobre notícias.
Há cerca de um ano, já escrevi sobre o modelo de organização do particionamento desses dados e as mudanças em cascata na estrutura do banco de dados causadas por isso. E hoje, usando o exemplo de nosso serviço de análise de logs de servidor PostgreSQL, analisaremos os recursos de manutenção de bancos de dados organizados dessa forma, e como uma abordagem competente (e um pouco de trabalho noturno) pode reduzir significativamente os custos de infraestrutura .
Algo que estamos carregando pesadamente no disco ...
"" . " PostgreSQL : 1 host, 1 day, 1TB" " PostgreSQL".
(. " PostgreSQL"), "" - 100% , , :
" - , - !" ?
, 200MB/s:
... .
- ?.. , ! - !
? , ? 18 maintenance-? VACUUM, ANALYZE, CREATE INDEX ..
PostgreSQL, " PostgreSQL — , ".
" ! - "
-, autoVACUUM/autoANALYZE:
, autovacuum (to prevent wraparound) - - "" , ! , "" , 150GB… .
" , - , ."
, autoANALYZE?..
ANALYZE- append-only ! , PK.
, " " - autoanalyze. :
ALTER SYSTEM SET autovacuum_analyze_scale_factor = 1;
-- , (x2)
ALTER SYSTEM SET autovacuum_analyze_threshold = 100000;
-- ... 100K
"" . , - , .
:
INSERT ... ON CONFLICT UPDATE
- append-only ""
pg_repack
MVCC, "-". .
"" , , cron-, 00:15, " " pg_repack, "" :
pgrepack — Postgres Pro Standard, . CLUSTER
VACUUM FULL
, « », . pgrepack , ,CLUSTER
.
VACUUM FREEZE
(append-only) - VACUUM FREEZE
, "" :
VACUUM FREEZE rawdata_20190419; VACUUM FREEZE rawplan_20190419; ...
!
20 , (disk busy) ~60%: