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.5k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PostgreSQLのVACUUMとは
Ken Kato
February 17, 2025
More Decks by Ken Kato
See All by Ken Kato
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
1
290
Datadog RUMを導入するまで
kkato1
0
110
初めてのPostgreSQLメジャーバージョンアップ
kkato1
0
2k
ウォンテッドリーのマイクロサービス運用・開発を加速する kube
kkato1
0
330
論理レプリケーションを使ったDB統合
kkato1
0
1.2k
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
340
DNSルックアップの回数制限でハマった話
kkato1
1
720
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
870
Featured
See All Featured
Building Adaptive Systems
keathley
44
3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
Docker and Python
trallard
47
3.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The Language of Interfaces
destraynor
162
27k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
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/