Submit Search
Upload
Parallel Vacuum
•
1 like
•
1,096 views
Masahiko Sawada
Follow
PostgreSQL アンカンファレンス2017での発表資料です。PostgreSQLでパラレルにVacuumする再善策を模索中ですので、アイディアがあれば連絡ください。
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 22
Download now
Download to read offline
Recommended
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
Masahiko Sawada
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQL
Masahiko Sawada
PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
Masahiko Sawada
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Masahiko Sawada
Recommended
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
Masahiko Sawada
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQL
Masahiko Sawada
PostgreSQL 12の話
PostgreSQL 12の話
Masahiko Sawada
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
Masahiko Sawada
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Masahiko Sawada
Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQL
Masahiko Sawada
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Masahiko Sawada
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
Vacuum more efficient than ever
Vacuum more efficient than ever
Masahiko Sawada
Vacuumとzheap
Vacuumとzheap
Masahiko Sawada
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
Masahiko Sawada
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
FDW-based Sharding Update and Future
FDW-based Sharding Update and Future
Masahiko Sawada
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
Masahiko Sawada
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
pg_bigmと類似度検索
pg_bigmと類似度検索
Masahiko Sawada
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Masahiko Sawada
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
Masahiko Sawada
XID周回問題に潜む別の問題
XID周回問題に潜む別の問題
Masahiko Sawada
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
Masahiko Sawada
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
Masahiko Sawada
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
Masahiko Sawada
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
More Related Content
More from Masahiko Sawada
Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQL
Masahiko Sawada
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Masahiko Sawada
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
Vacuum more efficient than ever
Vacuum more efficient than ever
Masahiko Sawada
Vacuumとzheap
Vacuumとzheap
Masahiko Sawada
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
Masahiko Sawada
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
FDW-based Sharding Update and Future
FDW-based Sharding Update and Future
Masahiko Sawada
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
Masahiko Sawada
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
pg_bigmと類似度検索
pg_bigmと類似度検索
Masahiko Sawada
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Masahiko Sawada
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
Masahiko Sawada
XID周回問題に潜む別の問題
XID周回問題に潜む別の問題
Masahiko Sawada
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
Masahiko Sawada
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
Masahiko Sawada
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
Masahiko Sawada
More from Masahiko Sawada
(20)
Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQL
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
Vacuum more efficient than ever
Vacuum more efficient than ever
Vacuumとzheap
Vacuumとzheap
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
PostgreSQL10徹底解説
PostgreSQL10徹底解説
FDW-based Sharding Update and Future
FDW-based Sharding Update and Future
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
pg_bigmと類似度検索
pg_bigmと類似度検索
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
XID周回問題に潜む別の問題
XID周回問題に潜む別の問題
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
Recently uploaded
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Recently uploaded
(9)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Parallel Vacuum
1.
Parallel Vacuum 澤田 雅彦
2.
3.
タプル 1 タプル 2 タプル
4 タプル 3( 新 ) Vacuum とは? 削除、更新で発生したゴミタプル(不要領域)を再利用可能に する タプル 1 タプル 2 タプル 3 タプル 4 タプル 1 タプル 2 タプル 3( 旧 ) タプル 4 タプル 3( 新 ) タプル 3 を 更新 VACUUM 空き領域マ ップ( FSM) 可視性 マップ( VM) 可視性 マップ( VM) 更新 ※VACUUM はその他統計情報の更新、末尾の切り詰めも行
4.
Vacuum の挙動(インデックスあり) テーブルをス キャンし続 け、ゴミタプ ルを探す テーブルのゴ ミタプルを回 収する インデックス のゴミタプル を回収する (インデック ス個数分) 完了! 開始 メモリがいっぱいにな った or テーブルの末尾に到達 テーブルの末尾に到達 まだテーブルの末尾ま で到達していない スキャンし終わったけ ど、ゴミがなかった インデックス のクリーンア ップ
5.
Vacuum の挙動(インデックスあり) テーブルスキャン テーブル VACUUM インデックス VACUUM テーブルスキャン中にゴミタプルが一定量 (maintenance_work_mem)
溜まったら、テーブルとインデックス を Vacuum とする Scan(Collect) Phase Vacuum Phase maintenance_work_mem に 入るだけの量が対象 ※ インデックスが 2 つあるとき
6.
Vacuum の挙動(インデックスあり) • maintenance_work_mem
内にはゴミタプルを TID が入る • テーブル Vacuum ではゴミタプル情報を 1 つずつ取り出して Vacuum を実行 • インデックス Vacuum では、インデックスを先頭から見ていき、各 リーフが指すタプルがゴミタプル情報内にあるかどうかを確認する (1,4) (1,12) (3,4) (14,5) (14,7) (15,4) (16,4) (16,6) (17,5) (17,6) テーブルのゴミタプル情報 ■ テーブル Vacuum 「 TID を取ってき Vacuum する」の繰り返し (シーケンシャルアクセスになる) ■ インデックス Vacuum インデックスが指す先が上記にあれば回収する (シーケンシャルアクセスになる) (ゴミタプル情報がちゃんと揃っている必要が ある)
7.
Vacuum の挙動(インデックスなし) テーブルスキャン テーブル VACUUM テーブルスキャン→テーブル
Vacuum をひたすら繰り返す。 maintenance_work_mem は使わない。
8.
Vacuum をパラレル化したい • Visibility
Map があるからとはいえ巨大テーブルの VACUUM は きつい • パラレルクエリ機構を使って VACUUM もパラレル化したい • ディスク I/O をより消費するのでそこが注意点
9.
どのように並列化するか • 並列化できる箇所は色々ある • テーブルのスキャン(ゴミ集め) •
テーブルの VACUUM • インデックスの VACUUM • 複数インデックスの VACUUM など
10.
どのように並列化するか:案① テーブルをスキャンするワーカ、 Vacuum するワーカに分ける (役割別にして、バケツリレー) •
分かりやすい • 並列数をどのように割り当てるか • ランダムアクセスになりそう • 転送コスト W1 W2 W3 W4 テーブルスキャ ン テーブル VACUUM インデックス VACUUM
11.
どのように並列化するか:案② テーブルを範囲で分割して、各ワーカがスキャン、 Vacuum のど ちらもやる (担当領域を分けて、独立して作業) 各ワーカは独立して、スキャン、 •
Vacuum の処理が可能 • ランダムアクセスがすごいことになりそう W1 W2 W3 W4 400 番~ 500 番ブロックを 担当する! テーブルスキャ ン テーブル VACUUM インデックス VACUUM
12.
どのように並列化するか:案③ 先頭からパラレルスキャンして、ゴミタプル情報を共有する (各作業単位で並列化する) • ディスクアクセスはシーケンシャルになる • VACUUM
する時、再度スキャンに戻る時に • 同期をとる必要がある • ( 元のテーブルサイズ )/( 並列度 ) の • テーブルを VACUUM しているのと • 同じ W1 W2 W3 W4 テーブルスキャ ン テーブル VACUUM インデックス VACUUM
13.
今のところ「案③」を実装 • Parallel Seq
Scan 的にページを先 頭から読む • ゴミタプルを共有領域に記録する • ゴミタプルが”揃ったら”次へ ゴミタプ ル情報 ゴミタプ ル情報 • 全員でテーブル VACUUM をする • ゴミタプル情報は各ワーカーが取り合う • 1 インデックスを 1 ワーカが担当 • “ 全員のインデックス VACUUM が完了し たら”、ゴミタプル情報をクリアゴミタプ ル情報 以下繰り返し テーブルスキャ ン テーブル VACUUM インデックス VACUUM • ゴミタプル情報を共有し、各ワーカーが排他的に格納 • インデックス Vacuum は 1 インデックスを 1 ワーカに割当
14.
今のところ「案③」を実装
15.
が、スライドを書いていたら気づいた • Parallel Seq
Scan 的にページを先頭 から読む • ゴミタプルを共有領域に記録する • ゴミタプルが”揃ったら”次へ • テーブル VACUUM までは各々やって良 い(たぶん)ゴミタプ ル情報 ゴミタプ ル情報 • 全員でテーブル VACUUM をする • ゴミタプル情報は各ワーカーが取り合う • 1 インデックスを 1 ワーカが担当 • パラレルインデックススキャンがあるの で、そこもパラレルにできるかも • 全員のインデックス VACUUM が完了した ら、ゴミタプル情報をクリア ゴミタプ ル情報 以下繰り返し
16.
最後にもう一つ
17.
Group Locking でも競合してほしい問題 •
Group Locking とは? • パラレルクエリ用に開発された Regular Lock(Heavyweight Lock) に関 連する機能 • パラレルクエリのグループ内のワーカー達は Regular Lock が競合しな い • 例)同じパラレルクエリのワーカーたちは同時に AccessExclusiveLock が取得で きる • これまでのパラレルクエリには便利! • ただ、パラレル DML 、パラレル Vacuum を考えるとリレーショ ンの拡張に問題がある
18.
Group Locking でも競合してほしい問題 •
リレーションの拡張ロックはパラレルワーカー同士でも競合す る必要がある • INSERT 、 UPDATE 時に新しいテーブルのページを確保する時 • Visibility Map 更新時に新しいページを確保する時 • CREATE INDEX で新しいインデックスのページを確保する時 • 「パラレル Vacuum の前にそこを改善しようね」 by PostgreSQL コミュニティ
19.
現在のステータス • 拡張ロック専用のロックマネージャを開発 ←いまここ • パラレル
Vacuum の実装
20.
拡張ロック専用のロックマネージャを開 発中 • そんなことしていいの? • そもそも拡張ロックについては、
Heavyweight Lock である必要性はない • デッドロック検知とか必要ないし、もっとシンプルで良い • なぜ拡張ロックだけ? • 他にも同じようなロック( Heavyweight Lock じゃなくても良い)を探したけ ど、他のは全部デッドロック検知は必要だった • 良いところもある • 拡張ロック専用なので、それだけに最適化できる • メモリ使用量、速度 • その結果、 Heavyweight Lock の時の 10 倍の速度で取得、解放が可能!! • 将来他の用途向けに機能拡張することも可能
21.
まとめ • Vacuum をパラレル化したいです •
より効率的なアイディア募集中!! • 拡張ロックの改善はそろそろコミットされるかも ? • パラレル Vacuum 開発が解禁!!
22.
VACUUM の挙動(インデックスなし) 1 ページ読 み込み テーブルのゴ ミタプルを回 収する 完了! 開始 テーブルの末尾の到達
Download now