
遠い将来、不要なデータの自動削除は、DBMSの最も重要なタスクの1つになるでしょう[1]。それまでの間、不要なデータを削除したり、より安価なストレージシステムに移動したりする必要があります。数百万行を削除するとします。特に条件がわかっていて、適切なインデックスがある場合は、非常に簡単な作業です。"DELETE FROM table1 WHERE col1 =:value"-もっと簡単なことはありますか?
ビデオ:

私は最初の年から、つまり2007年からHighloadプログラム委員会に参加しています。
そして私は2005年からPostgresにいます。多くのプロジェクトで使用されました。
2007年からもRuPostgesのグループ。
Meetupでは、2100人以上の参加者に成長しました。長い間サンフランシスコに次ぐ、ニューヨークに次ぐ世界第2位の規模です。
. , . Postgres. .

https://postgres.ai/ – . , , .
- , Postgres - . , , , , DBA . , .

https://www.seagate.com/files/www-content/our-story/trends/files/idc-seagate-dataage-whitepaper.pdf
VLDB -. . , , . .
– 1 000 000 . , 100 . .

https://vldb2019.github.io/files/VLDB19-keynote-2-slides.pdf
? , . . .
, , . , , .

, , , , . . , , . .

, . – . , - , . - , . . . - , , . .

, , - .

, , . . .

. , – . staging – . – . – .

. DELETE .

, , . .

. - , .
dev, staging – . , , . , .

? . , - . , , . , DELETE .

? , . ?
, review, . . DBA- . , prod, .
, - .
.
- , Postgres MySQL .
, , - .
, - , ?

DBA. DBA , : « ». , GitLab, GitHub code review , DBA prod, DBA : « ».

, disk IO , , , .

– . , prod , , staging . , 1 000 , .
, , . . , , . -.
. , , . , . , YouTube .

, ? , latency . , 100 %. , NVMe , , , . , , .
, . . Switchover. . .

- ? DBA , checkpoint tuning. , checkpoint tuning.
checkpoint? . , . , , , write-ahead log. - , , , , REDO. . , checkpoint. .

Postgres . 10-15- . checkpoint – .
c Postgres check-up, . . . - . , checkpoints 90 % .
? . Checkpoint timeout , , 10 . , .
max_wal_saze 1 . , Postgres 300-400 . checkpoint .
, , , , checkpoint , 30 , . .
, . . . max_wal_size. .
, , . . , .

, .
– max_wal_size. . 1 . DELETE .
, . , disk IO . , WAL , . . . , checkpoint . , .
max_wal_size. . , . . , 10 – , 1, 2, 4, 8 . . , prod. , Postgres .
, , DELETE, checkpoint’.
Checkpoint - – .
: DELETE , «» .

. . 1 max_wal_size , . – , . . . , DELETE .
prod, , , DELETE .

, 16 , , . – , . . , . . – . – . , , 16 .

64 , . , , - .
?

, , checkpoint tuning, , , , .
checkpoint , , , , , , , , . checkpoint , , .
checkpoint . .

. Postgres 8 , Linux 4 . full_page_writes. . , , , , .
WAL , , checkpoint , , . . 8 , , 100 . .
, .
, , checkpoint , . checkpoints, , full_page_writes = on , , . . WAL . , , .
, , .

max_wal_size, , checkpoint, wal writer. .
. ? , , checkpoint . REDO . .
, checkpoint , , kill -9 Postgres .
, , , . . REDO .
, . -, checkpoint, , . , -, . checkpoints -, , , WAL checkpoint. . . .
max_wal_size , , max_wal_size 64 , 10 . – . -. , - : « ? 3-5 ?». .
. Patroni. , , . autofailover Postgres. GitLab Data Egret .
autofailover, 30 , 10 ? , . . . , .
, . , , - 10 .
- , autofailover. , , 64, 100 – . . , .

, , , max_wal_size =1, 8, . . , . ?
, , . .
. , «BEGIN, DELETE, ROLLBACK», DELETE . . . , . . bloat . DELETE.
DELETE c ROLLBACK checkpoint tuning, database labs.

«i». Postgres . , . : ctid, xmid, xmax.
Ctid – . , .
, ROOLBACK . . . , . .

Xmax – . , Postgres , , , 0, – . , DELETE . database labs .

. DBA , : « ?». . , .
, . . DELETE . 20 , . , , , .
?
, , . , , throttling.
. , , , , , , autovacuum, , . , - , , - . .

https://postgres.ai/products/joe/
. , : « ?».
, , transaction overhead, . . . .
: , .
? , . . 50 . - , . , . - 100 , , , 100 , . .
, 10- , , - . , . . , transaction overhead . , .
. - . . . . . DELETE UPDATE.
, , , DELETE. , .
, . index scan, index only scan. . . .
, . , , - . , . database labs.
-, production . , , , . , . , - , .
, , . . . 30 , . - RESET, . . . .

https://docs.gitlab.com/ee/development/background_migrations.html
? 3 , .
. . , . . 100 , 5 , 1 000 . , . ID . .
– . Gitlab. . ID , 10 000 . - . . .
, , . .

. . , . . , , ID. ID, index only scan, heap .
, index only scan – , index scan.

, . BATCH_SIZE . , . , , , , . for update skip locked. Postgres , . . CTE – . CTE – returning *. returning id, *, .

? , . . ID created_at -. min, max . - . . .
. , , , heap only tuples updates. . . Postgres . pg_stat_user_tables . – hot updates .
, . updates, , . ( - updates, -), . . . , . . , - , , -, , .
, batches , - . .

— https://gitlab.com/snippets/1890447
Blocked autovacuum — https://gitlab.com/snippets/1889668
Blocking issue — https://gitlab.com/snippets/1890428
№ 5 . Okmeter Postgres. Postgres, , . - , - . Okmeter – , , . .
, dead tuples . , - . , , . .
IO, , .
. OLTP . , .
– ? . . autovacuum . . hot standby , . , .
, alert . . autovacuum. Avito, . , , autovacuum. , - . alert .
issues. . - - . Data Egret CTE, . . . . statement_timeout . lock_timeout .

.
, – . , . 2 – .
, production, . production.
. , . DBA , , . .
. , , REPACK . . , .
, , . -. : . , .

, , open source. GitLab. , DBA. database lab, . . , Joe. production. Joe slack, : «explain - » . DELETE , .

, 10 , database lab 10 . 10- 10 . , . , . . . .

thin provisioning. . , , . . . .
: 5 , , 30 . , . . , .
Postgres.ai . , , . . . .
, , , , . . . , , . , , . ?
. , pg_repack, , , 4- . , , 8 .
. . . . . . . . pg_repack. . , , . , . . , . , , .
pg_repack GitHub , , int 4 int 8, pg_repack . , , . , pg_repack : « », . . , . .
, .
Bloat , . , , . . . . Python, .
MySQL, . .
, 90 %. 5 %, .
! prod, - , ?
. . , , , , - . , . , , , .
! , Postgres, - , . . Postgres, - DELETE deferent - , , - ?
SQL , Postgres ? . . . .
.
, checkpoint tuning . - , , . .
, , , ? .. ?
, . Nancy, checkpoint tuning. - Postgres? , . . , . . . , auto tuning . . checkpoint tuning . . . performance, shell buffer . .
checkpoint tuning : , cloud, Nancy . max_wal_size . , .
! . , autovacuum . ? . ?
Autovacuum – , , . , , . , . , . autovacuum – . OLTP: autovacuum. hot standby feedback , autovacuum , . , , . . , – . -, . . . . , autovacuum, .
! , . , , . , . . . live, live, , 60-70 %. ,
DBA, , , — . , . , , production . . . -. , – . .
garbage select , , deleted flag
, autovacuum Postgres.
, ?
Autovacuum garbage collector.
!
! , - ?
, .
使用してはいけないテーブルをロックした場合、自分自身を保護することは可能ですか?
もちろんあります。しかし、これは鶏肉と卵のような質問です。私たち全員が将来何が起こるかを知っていれば、もちろん、私たちはすべてを素晴らしいことをします。しかし、ビジネスは変化しており、新しい列、新しいクエリがあります。そして-おっと、それを削除したいと思います。しかし、この理想的な状況は人生で起こりますが、常にではありません。しかし、全体的にはそれは良い考えです。切り捨てるだけで、それだけです。