Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
16
PostgreSQLのVACUUMとは.pdf
Ken Kato
September 21, 2024
Tweet
Share
More Decks by Ken Kato
See All by Ken Kato
論理レプリケーションを使ったDB統合
kkato1
0
310
ウォンテッドリーにおけるk8sマニフェストの管理方法
kkato1
0
140
DNSルックアップの回数制限でハマった話
kkato1
1
290
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
620
Other Decks in Technology
See All in Technology
最近のUplift Modeling手法にRでトライ
hskksk
0
130
店舗向けSaaSにおける 顧客要望活用の実践アプローチ(20241205_pmconf)
yujirooo
0
3.3k
12/4(水)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #3 with AWS Heroes)
minorun365
PRO
2
420
間違いだらけのポストモーテム - ホントに役立つレビューはこうだ!
jacopen
5
1k
.NET のUnified AI Building Blocks 入門...!
okazuki
0
190
Advancing the 3D Geospatial Ecosystem in Japan via Global Collaborations
osgeojp
0
180
2024 眼科AIコンテスト手法解説スライド 第5回日本眼科AI学会総会
minamikoyasuganka
0
120
Amazon Bedrock Multi-Agent Collaboration Workshop の紹介 - ワークショップでAIエージェントを学ぼう
nasuvitz
3
310
プロセス改善とE2E自動テストによる、プロダクトの品質向上事例
tomasagi
1
3.8k
2024/12/05 AITuber本著者によるAIキャラクター入門 - AITuberの基礎からソフトウェア設計、失敗談まで
sr2mg4
2
580
[GDG DevFest Bangkok 2024] - The Future of Retail E-commerce with Gemini AI
punsiriboo
0
300
セキュリティ系アップデート全体像と AWS Organizations 新ポリシー「宣言型ポリシー」を紹介 / reGrowth 2024 Security
masahirokawahara
0
180
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.2k
Scaling GitHub
holman
458
140k
Documentation Writing (for coders)
carmenintech
65
4.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
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/