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とは.pdf
Search
Ken Kato
September 21, 2024
Technology
0
24
PostgreSQLのVACUUMとは.pdf
Ken Kato
September 21, 2024
Tweet
Share
More Decks by Ken Kato
See All by Ken Kato
論理レプリケーションを使ったDB統合
kkato1
0
530
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
180
DNSルックアップの回数制限でハマった話
kkato1
1
330
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
650
Other Decks in Technology
See All in Technology
CNAPPから考えるAWSガバナンスの実践と最適化
yuobayashi
5
610
教師なし学習の基礎
kanojikajino
4
340
ObservabilityCON on the Road Tokyoの見どころ
hamadakoji
0
160
SIEMによるセキュリティログの可視化と分析を通じた信頼性向上プロセスと実践
coconala_engineer
1
2.7k
DevSecOps入門:Security Development Lifecycleによる開発プロセスのセキュリティ強化
yuriemori
0
220
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
17
5.7k
もし今からGraphQLを採用するなら
kazukihayase
8
3.6k
Tech Blog執筆のモチベート向上作戦
imamura_ko_0314
0
680
2025-01-24-SRETT11-OpenTofuについてそろそろ調べてみるか
masasuzu
0
180
ソフトウェアアーキテクトのための意思決定術: Software Architecture and Decision-Making
snoozer05
PRO
17
3.7k
ブロックチェーンR&D企業における SREの実態 / SRE Kaigi 2025
datachain
0
3.6k
あなたの興味は信頼性?それとも生産性? SREとしてのキャリアに悩むみなさまに伝えたい選択肢
jacopen
6
2.5k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Why Our Code Smells
bkeepers
PRO
335
57k
Done Done
chrislema
182
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Invisible Side of Design
smashingmag
299
50k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
370
Visualization
eitanlees
146
15k
Building Your Own Lightsaber
phodgson
104
6.2k
Code Reviewing Like a Champion
maltzj
521
39k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Site-Speed That Sticks
csswizardry
3
300
Transcript
© 2024 Wantedly, Inc. PostgreSQLのVACUUMとは Tech Lunch Sep. 19 2024
- Ken Kato
© 2024 Wantedly, Inc. はじめに • VACUUMはPostgreSQL固有のもので、PostgreSQL = VACUUMという人がい るくらい特徴的な機能
• 普段意識することはほとんどないが、たまにVACUUMに関するアラートがなる ◦ この辺り前提を知っておくと障害対応がスムーズに
© 2024 Wantedly, Inc. VACUUMとは VACUUM = 掃除機 ガベージコレクション的なやつ
© 2024 Wantedly, Inc. アーキテクチャの違い 追記型アーキテクチャ 更新型アーキテクチャ Oracle MySQL SQL
Server PostgreSQL
© 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. 更新型アーキテクチャ (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. 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. おまけ • ROLLBACKした時の挙動ってどうなるんだろう? ◦ INSERT ->
ROLLBACKした場合、追加した行はそのままテーブル内に残る ◦ DELETE -> ROLLBACKした場合、削除フラグが撤去される • 再利用可能になった行はどうなるんだろう? ◦ 再利用可能になった行は空き領域マップで管理されており、そこを参照して新しいレコードを挿入す る • なんで追記型アーキテクチャを採用したの? ◦ 追記型アーキテクチャのメリットとしては、読み取りと書き込みのロック競合を回避できる
© 2024 Wantedly, Inc. 追記型アーキテクチャのメリット レコードA レコードB レコードC レコードD レコードE
T1 (読み取り) T2 (書き込み) BEGIN SELECT COMMIT レコードA レコードB レコードC レコードD レコードE BEGIN UPDATE B COMMIT レコードA レコードB’ レコードC レコードD レコードE レコードA レコードB レコードC レコードD レコードE レコードB’ SELECT
© 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/