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
23
PostgreSQLのVACUUMとは.pdf
Ken Kato
September 21, 2024
Tweet
Share
More Decks by Ken Kato
See All by Ken Kato
論理レプリケーションを使ったDB統合
kkato1
0
490
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
170
DNSルックアップの回数制限でハマった話
kkato1
1
310
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
640
Other Decks in Technology
See All in Technology
知っててうれしい HTTP Cookie を使ったセッション管理について
greendrop
1
110
20241220_S3 tablesの使い方を検証してみた
handy
4
870
20241125 - AI 繪圖實戰魔法工作坊 @ 實踐大學
dpys
1
440
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
3
180
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
1
5k
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
AIエージェントに脈アリかどうかを分析させてみた
sonoda_mj
2
130
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
4
890
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
1.8k
AWS re:Invent 2024 ふりかえり勉強会
yhana
0
700
Storage Browser for Amazon S3を触ってみた + α
miura55
0
110
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
310
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
96
5.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Being A Developer After 40
akosma
89
590k
Facilitating Awesome Meetings
lara
50
6.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
A better future with KSS
kneath
238
17k
BBQ
matthewcrist
85
9.4k
Six Lessons from altMBA
skipperchong
27
3.5k
GraphQLとの向き合い方2022年版
quramy
44
13k
A Tale of Four Properties
chriscoyier
157
23k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
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/