SlideShare a Scribd company logo
1 of 22
Download to read offline
Parallel Vacuum
澤田 雅彦
タプル 1
タプル 2
タプル 4
タプル 3( 新 )
Vacuum とは?
削除、更新で発生したゴミタプル(不要領域)を再利用可能に
する
タプル 1
タプル 2
タプル 3
タプル 4
タプル 1
タプル 2
タプル 3( 旧 )
タプル 4
タプル 3( 新 )
タプル 3 を
更新 VACUUM
空き領域マ
ップ( FSM)
可視性
マップ( VM)
可視性
マップ( VM)
更新
※VACUUM はその他統計情報の更新、末尾の切り詰めも行
Vacuum の挙動(インデックスあり)
テーブルをス
キャンし続
け、ゴミタプ
ルを探す
テーブルのゴ
ミタプルを回
収する
インデックス
のゴミタプル
を回収する
(インデック
ス個数分)
完了!
開始
メモリがいっぱいにな
った or
テーブルの末尾に到達
テーブルの末尾に到達
まだテーブルの末尾ま
で到達していない
スキャンし終わったけ
ど、ゴミがなかった
インデックス
のクリーンア
ップ
Vacuum の挙動(インデックスあり)
テーブルスキャン
テーブル VACUUM
インデックス
VACUUM
テーブルスキャン中にゴミタプルが一定量
(maintenance_work_mem) 溜まったら、テーブルとインデックス
を Vacuum とする
Scan(Collect) Phase
Vacuum Phase
maintenance_work_mem に
入るだけの量が対象
※ インデックスが 2 つあるとき
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
インデックスが指す先が上記にあれば回収する
(シーケンシャルアクセスになる)
(ゴミタプル情報がちゃんと揃っている必要が
ある)
Vacuum の挙動(インデックスなし)
テーブルスキャン
テーブル VACUUM
テーブルスキャン→テーブル Vacuum をひたすら繰り返す。
maintenance_work_mem は使わない。
Vacuum をパラレル化したい
• Visibility Map があるからとはいえ巨大テーブルの VACUUM は
きつい
• パラレルクエリ機構を使って VACUUM もパラレル化したい
• ディスク I/O をより消費するのでそこが注意点
どのように並列化するか
• 並列化できる箇所は色々ある
• テーブルのスキャン(ゴミ集め)
• テーブルの VACUUM
• インデックスの VACUUM
• 複数インデックスの VACUUM
など
どのように並列化するか:案①
テーブルをスキャンするワーカ、 Vacuum するワーカに分ける
(役割別にして、バケツリレー)
• 分かりやすい
• 並列数をどのように割り当てるか
• ランダムアクセスになりそう
• 転送コスト
W1 W2 W3 W4
テーブルスキャ
ン
テーブル
VACUUM
インデックス
VACUUM
どのように並列化するか:案②
テーブルを範囲で分割して、各ワーカがスキャン、 Vacuum のど
ちらもやる
(担当領域を分けて、独立して作業)
各ワーカは独立して、スキャン、
• Vacuum の処理が可能
• ランダムアクセスがすごいことになりそう
W1 W2 W3 W4
400 番~ 500
番ブロックを
担当する!
テーブルスキャ
ン
テーブル
VACUUM
インデックス
VACUUM
どのように並列化するか:案③
先頭からパラレルスキャンして、ゴミタプル情報を共有する
(各作業単位で並列化する)
• ディスクアクセスはシーケンシャルになる
• VACUUM する時、再度スキャンに戻る時に
• 同期をとる必要がある
• ( 元のテーブルサイズ )/( 並列度 ) の
• テーブルを VACUUM しているのと
• 同じ
W1 W2 W3 W4
テーブルスキャ
ン
テーブル
VACUUM
インデックス
VACUUM
今のところ「案③」を実装
• Parallel Seq Scan 的にページを先
頭から読む
• ゴミタプルを共有領域に記録する
• ゴミタプルが”揃ったら”次へ
ゴミタプ
ル情報
ゴミタプ
ル情報
• 全員でテーブル VACUUM をする
• ゴミタプル情報は各ワーカーが取り合う
• 1 インデックスを 1 ワーカが担当
• “ 全員のインデックス VACUUM が完了し
たら”、ゴミタプル情報をクリアゴミタプ
ル情報
以下繰り返し
テーブルスキャ
ン
テーブル
VACUUM
インデックス
VACUUM
• ゴミタプル情報を共有し、各ワーカーが排他的に格納
• インデックス Vacuum は 1 インデックスを 1 ワーカに割当
今のところ「案③」を実装
が、スライドを書いていたら気づいた
• Parallel Seq Scan 的にページを先頭
から読む
• ゴミタプルを共有領域に記録する
• ゴミタプルが”揃ったら”次へ
• テーブル VACUUM までは各々やって良
い(たぶん)ゴミタプ
ル情報
ゴミタプ
ル情報
• 全員でテーブル VACUUM をする
• ゴミタプル情報は各ワーカーが取り合う
• 1 インデックスを 1 ワーカが担当
• パラレルインデックススキャンがあるの
で、そこもパラレルにできるかも
• 全員のインデックス VACUUM が完了した
ら、ゴミタプル情報をクリア
ゴミタプ
ル情報 以下繰り返し
最後にもう一つ
Group Locking でも競合してほしい問題
• Group Locking とは?
• パラレルクエリ用に開発された Regular Lock(Heavyweight Lock) に関
連する機能
• パラレルクエリのグループ内のワーカー達は Regular Lock が競合しな
い
• 例)同じパラレルクエリのワーカーたちは同時に AccessExclusiveLock が取得で
きる
• これまでのパラレルクエリには便利!
• ただ、パラレル DML 、パラレル Vacuum を考えるとリレーショ
ンの拡張に問題がある
Group Locking でも競合してほしい問題
• リレーションの拡張ロックはパラレルワーカー同士でも競合す
る必要がある
• INSERT 、 UPDATE 時に新しいテーブルのページを確保する時
• Visibility Map 更新時に新しいページを確保する時
• CREATE INDEX で新しいインデックスのページを確保する時
• 「パラレル Vacuum の前にそこを改善しようね」 by
PostgreSQL コミュニティ
現在のステータス
• 拡張ロック専用のロックマネージャを開発 ←いまここ
• パラレル Vacuum の実装
拡張ロック専用のロックマネージャを開
発中
• そんなことしていいの?
• そもそも拡張ロックについては、 Heavyweight Lock である必要性はない
• デッドロック検知とか必要ないし、もっとシンプルで良い
• なぜ拡張ロックだけ?
• 他にも同じようなロック( Heavyweight Lock じゃなくても良い)を探したけ
ど、他のは全部デッドロック検知は必要だった
• 良いところもある
• 拡張ロック専用なので、それだけに最適化できる
• メモリ使用量、速度
• その結果、 Heavyweight Lock の時の 10 倍の速度で取得、解放が可能!!
• 将来他の用途向けに機能拡張することも可能
まとめ
• Vacuum をパラレル化したいです
• より効率的なアイディア募集中!!
• 拡張ロックの改善はそろそろコミットされるかも ?
• パラレル Vacuum 開発が解禁!!
VACUUM の挙動(インデックスなし)
1 ページ読
み込み
テーブルのゴ
ミタプルを回
収する
完了!
開始
テーブルの末尾の到達

More Related Content

More from Masahiko Sawada

Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLBloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLMasahiko Sawada
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Masahiko Sawada
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説Masahiko Sawada
 
Vacuum more efficient than ever
Vacuum more efficient than everVacuum more efficient than ever
Vacuum more efficient than everMasahiko Sawada
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~Masahiko Sawada
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
FDW-based Sharding Update and Future
FDW-based Sharding Update and FutureFDW-based Sharding Update and Future
FDW-based Sharding Update and FutureMasahiko Sawada
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorMasahiko Sawada
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介Masahiko Sawada
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索Masahiko Sawada
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundMasahiko Sawada
 
XID周回問題に潜む別の問題
XID周回問題に潜む別の問題XID周回問題に潜む別の問題
XID周回問題に潜む別の問題Masahiko Sawada
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールMasahiko Sawada
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Masahiko Sawada
 
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Masahiko Sawada
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 

More from Masahiko Sawada (20)

Bloat and Fragmentation in PostgreSQL
Bloat and Fragmentation in PostgreSQLBloat 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...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
 
Vacuum more efficient than ever
Vacuum more efficient than everVacuum more efficient than ever
Vacuum more efficient than ever
 
Vacuumとzheap
VacuumとzheapVacuumとzheap
Vacuumとzheap
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
FDW-based Sharding Update and Future
FDW-based Sharding Update and FutureFDW-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 contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
 
XID周回問題に潜む別の問題
XID周回問題に潜む別の問題XID周回問題に潜む別の問題
XID周回問題に潜む別の問題
 
PostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツールPostgreSQL共有バッファと関連ツール
PostgreSQL共有バッファと関連ツール
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
 
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~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)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の 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...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~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)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

Parallel Vacuum