Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQLのVACUUMとは

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Ken Kato Ken Kato
February 17, 2025
3.4k

 PostgreSQLのVACUUMとは

Avatar for Ken Kato

Ken Kato

February 17, 2025
Tweet

Transcript

  1. © 2024 Wantedly, Inc. はじめに • VACUUMはPostgreSQL固有のもの • PostgreSQL =

    VACUUMという印象を持つ人もいるくらい特徴的な機能 • VACUUMがどんなものか、ざっくり理解してもらえたら 🙆
  2. © 2024 Wantedly, Inc. 更新型アーキテクチャ (UPDATE) レコードA レコードB レコードC レコードD

    レコードE レコードA レコードB' レコードC レコードD レコードE UPDATE
  3. © 2024 Wantedly, Inc. 追記型アーキテクチャ (UPDATE) レコードA レコードB レコードC レコードD

    レコードE レコードA レコードB レコードC レコードD レコードE レコードB’ UPDATE 削除フラグ
  4. © 2024 Wantedly, Inc. 更新型アーキテクチャ (DELETE) レコードA レコードB レコードC レコードD

    レコードE レコードA レコードB レコードC レコードE DELETE
  5. © 2024 Wantedly, Inc. 追記型アーキテクチャ (DELETE) レコードA レコードB レコードC レコードD

    レコードE レコードA レコードB レコードC レコードD レコードE DELETE 削除フラグ
  6. © 2024 Wantedly, Inc. VACUUM レコードA レコードB レコードC レコードD レコードE

    レコードA レコードB レコードC レコードE VACUUM 削除フラグ 不要行を再利用可能な状態にする
  7. © 2024 Wantedly, Inc. レコードG レコードH レコードI レコードJ レコードK レコードL

    レコードM レコードG レコードH レコードI レコードJ レコードK レコードL レコードM VACUUMが行われないと... レコードA レコードB レコードC レコードD レコードE レコードB’ レコードF • ディスク容量の増加 • パフォーマンスの低下 ◦ 不要行のスキャン ◦ メモリに乗り切らずディスク I/O発生
  8. © 2024 Wantedly, Inc. AUTOVACUUMの天敵 AUTOVACUUMが実行されたにも関わらず、不要行が削除されないケースがある • 「tuples: 0 removed,

    31451545 remain, 28808942 are dead but not yet removable, oldest xmin: 69055180」 主な原因は「ロングトランザクション」 • 全てのトランザクションが参照しないことがわかっているデータのみを VACUUMできる • あるトランザクションが長時間実行中だと、そのトランザクションが開始された後に削除された行は VACUUMできない
  9. © 2024 Wantedly, Inc. まとめ • PostgreSQLでは追記型アーキテクチャを採用している ◦ DELETE /

    UPDATE時には、実際に削除は行われず、削除フラグをつけている • VACUUM: 削除フラグのついた行を再利用可能な状態にすること • AUTOVACUUM: 自動的にVACUUMを実行してくれる • 不要行が削除されない場合、ロングトランザクションを疑う
  10. © 2024 Wantedly, Inc. 参考 • https://www.postgresql.jp/document/16/html/routine-vacuuming. html • https://masahikosawada.github.io/2021/12/22/MVCC-and-GC-in-

    PostgreSQL/ • https://www.slideshare.net/slideshow/vacuum-250648997/25064 8997 • https://www.fujitsu.com/jp/products/software/resources/feature- stories/postgres/article-index/architecture-overview/