多くのシステムには、時間の経過とともにデータが絶えず蓄積されるパターンがあります。さらに、それらのほとんどは二度と変更されません。つまり、追加専用モードで記述されます。
これらは、さまざまな種類のログや機器のメトリックだけでなく、ユーザー間の通信やニュースへのコメントなど、一見無関係に見えるものでもあります。
約1年前に、このようなデータのパーティション化を整理するためのモデルと、これによって引き起こされるデータベース構造のカスケード変更についてすでに書きました。そして今日は、PostgreSQLサーバーログを分析するためのサービスの例を使用して、このように編成されたデータベースのサービスの機能と、有能なアプローチ(および少しの夜間作業)がインフラストラクチャコストを大幅に削減する方法を分析します。
ディスクを大量にロードしているもの...
私たちのサービスの基盤全体が毎日のセクションに「ソーン」され、最大のスループットのために再編成されます。これについて詳しくは、「サブライトでのPostgreSQLでの書き込み:1ホスト、1日、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%: