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
1.3k
ウォンテッドリーのマイクロサービス運用・開発を加速する kube
kkato1
0
240
論理レプリケーションを使ったDB統合
kkato1
0
1k
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
280
DNSルックアップの回数制限でハマった話
kkato1
1
620
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
800
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Side Projects
sachag
455
43k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
970
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
4 Signs Your Business is Dying
shpigford
186
22k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
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/