Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PostgreSQLのVACUUMとは
Search
Ken Kato
February 17, 2025
3
3.3k
PostgreSQLのVACUUMとは
Ken Kato
February 17, 2025
Tweet
Share
More Decks by Ken Kato
See All by Ken Kato
初めてのPostgreSQLメジャーバージョンアップ
kkato1
0
1k
ウォンテッドリーのマイクロサービス運用・開発を加速する kube
kkato1
0
210
論理レプリケーションを使ったDB統合
kkato1
0
930
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
270
DNSルックアップの回数制限でハマった話
kkato1
1
580
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
760
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Rails Girls Zürich Keynote
gr2m
95
14k
Agile that works and the tools we love
rasmusluckow
330
21k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
Into the Great Unknown - MozCon
thekraken
40
2k
Being A Developer After 40
akosma
90
590k
Designing for Performance
lara
610
69k
How GitHub (no longer) Works
holman
315
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Transcript
© 2024 Wantedly, Inc. PostgreSQLのVACUUMとは めぐろLT #24 Feb. 17 2025
- Ken Kato
© 2024 Wantedly, Inc. 自己紹介 加藤 健 所属:ウォンテッドリー株式会社 職種:インフラエンジニア 業務:AWS上でKubernetes、PostgreSQLを運用
X: @kkato25
© 2024 Wantedly, Inc. はじめに • VACUUMはPostgreSQL固有のもの • PostgreSQL =
VACUUMという印象を持つ人もいるくらい特徴的な機能 • VACUUMがどんなものか、ざっくり理解してもらえたら 🙆
© 2024 Wantedly, Inc. VACUUMとは VACUUM = 掃除機 ガベージコレクション的なやつ
© 2024 Wantedly, Inc. アーキテクチャの違い 追記型アーキテクチャ 更新型アーキテクチャ Oracle MySQL SQL
Server PostgreSQL
© 2024 Wantedly, Inc. 更新型アーキテクチャ (UPDATE) レコードA レコードB レコードC レコードD
レコードE レコードA レコードB' レコードC レコードD レコードE UPDATE
© 2024 Wantedly, Inc. 追記型アーキテクチャ (UPDATE) レコードA レコードB レコードC レコードD
レコードE レコードA レコードB レコードC レコードD レコードE レコードB’ UPDATE 削除フラグ
© 2024 Wantedly, Inc. 更新型アーキテクチャ (DELETE) レコードA レコードB レコードC レコードD
レコードE レコードA レコードB レコードC レコードE DELETE
© 2024 Wantedly, Inc. 追記型アーキテクチャ (DELETE) レコードA レコードB レコードC レコードD
レコードE レコードA レコードB レコードC レコードD レコードE DELETE 削除フラグ
© 2024 Wantedly, Inc. VACUUM レコードA レコードB レコードC レコードD レコードE
レコードA レコードB レコードC レコードE VACUUM 削除フラグ 不要行を再利用可能な状態にする
© 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発生
© 2024 Wantedly, Inc. AUTOVACUUM テーブル内の不要行の数や割合を元に自動的にVACUUMを実行する • autovacuum_vacuum_threshold (不要行の数) •
autovacuum_vacuum_scale_factor (不要行の割合) 基本的にはAUTOVACUUMに任せれば大丈夫!
© 2024 Wantedly, Inc. AUTOVACUUMの天敵 AUTOVACUUMが実行されたにも関わらず、不要行が削除されないケースがある • 「tuples: 0 removed,
31451545 remain, 28808942 are dead but not yet removable, oldest xmin: 69055180」 主な原因は「ロングトランザクション」 • 全てのトランザクションが参照しないことがわかっているデータのみを VACUUMできる • あるトランザクションが長時間実行中だと、そのトランザクションが開始された後に削除された行は VACUUMできない
© 2024 Wantedly, Inc. まとめ • PostgreSQLでは追記型アーキテクチャを採用している ◦ DELETE /
UPDATE時には、実際に削除は行われず、削除フラグをつけている • VACUUM: 削除フラグのついた行を再利用可能な状態にすること • AUTOVACUUM: 自動的にVACUUMを実行してくれる • 不要行が削除されない場合、ロングトランザクションを疑う
© 2024 Wantedly, Inc. Wantedly Tech Night ~ウォンテッドリーで内製している開発用ツールの紹介 ~
© 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/