SlideShare a Scribd company logo
1 of 25
Download to read offline
Copyright©2018 NTT Corp. All Rights Reserved.
Vacuumとzheap
NTT OSSセンタ
澤田 雅彦
2018/3/30 BDI勉強会
2Copyright©2018 NTT Corp. All Rights Reserved.
自己紹介
澤田 雅彦
@sawada_masahiko
NTT OSSセンタ
NTTデータ入社(2012年)
PostgreSQLの技術サポート
PostgreSQLの本体開発
Replication, Vacuum, Distributed Transaction
PostgreSQLの周辺ツール開発
 pg_repack – オンラインメンテナンスツール
 pg_bigm – 2-gram全文検索モジュール
3Copyright©2018 NTT Corp. All Rights Reserved.
• PostgreSQLおさらい
• アーキテクチャ
• MVCC
• Vacuumの問題点と改善
• ストレージエンジンAPI
• zheap
目次
PostgreSQLの現状の話
まだ導入されていない機能の話
4Copyright©2018 NTT Corp. All Rights Reserved.
• プロセスモデル
• Postmasterプロセス:接続の受付、Backendプロセスのforkなどを行う
• Backendプロセス : SQLを処理するプロセス
• DBデータは共有バッファを使ってプロセス間で共有する
PostgreSQLのアーキテクチャ
DBデータ
(テーブル、インデックスなど)
共有バッファ WALバッファ
WAL
(トランザクションログ)
backendbackendbackend
(postgres)
postmaster wal writer
bg writer
auto
vacuum
stat
collector
logger
archiver
wal
receiver
wal
sender
wal
sender
wal
sender
wal
sender
wal
senderbg worker
その他
制御情報
startup
5Copyright©2018 NTT Corp. All Rights Reserved.
• トランザクションID(XID)
• トランザクション毎に割り当てられるID。単調増加。32bit。
• xmin : 追加したトランザクションID(INSERT/UPDATE)
• xmax : 削除したトランザクションID(DELETE/UPDATE)
• cmin : 追加したコマンドのID
• cmax : 削除したコマンドのID
コマンドIDはカーソルを利用した時等に利用される
追記型アーキテクチャ
xmin xmax cmin cmax Column
100 110 0 0 ‘A’
100 1 ‘B’
110 130 0 1 ‘A-1’
120 0 ‘C’
130 0 ‘D’
130 1 ‘A-2’
xid(100) : INSERT ‘A’;
xid(100) : INSERT ‘B’;
xid(110) : UPDATE ‘A’ -> ‘A-1’;
xid(120) : INSERT ‘C’;
xid(130) : INSERT ‘D’;
xid(130) : UPDATE ‘A-1’ -> ‘A-2’;
6Copyright©2018 NTT Corp. All Rights Reserved.
• 各トランザクションのステータスを管理するファイル
• 2bit/Txで表現
• 00 : in-progress
• 01 : committed
• 10 : aborted
• 11 : sub-transaction committed
• トランザクションIDから「どのclogファイルのどの部分
」を見るべきかがわかる
• 可視性判定の度に毎回clogを見るのは遅い
• clogの内容をタプルヘッダにキャッシュ(Hint Bitと呼ばれる)
して二回目以降はclogを見ない
clog(Commit Log)
7Copyright©2018 NTT Corp. All Rights Reserved.
• 削除済みタプルを回収して、再利用可能にする機能(
Garbage Collection)
• 実行中トランザクションの最小のxminより、タプルのxmaxが小
さい場合、回収可能
• VacuumはINSERT/DELETE/UPDATEとは競合しない
• 不要領域を再利用可能にするが、テーブルサイズは縮小
しない
• ただし、テーブルの末尾が空になった時は切り詰められる
• auto vacuum機能により、自動的にバックグラウンドで
実行される
• 頻度はテーブル毎に設定可能、”ゆっくり”vacuumする事も可能
• 「ゴミタプルがある可能性のあるブロック」を管理する
ことで効率的にVacuumする
• Visibility Mapと呼ばれる
Vacuum概要
8Copyright©2018 NTT Corp. All Rights Reserved.
Block 0 (8kB)
Block 1
:
Block 100
:
Block 198
Block 199
Vacuum概要(Visibility Mapの利用)
11 00 11 11 ..... 11 01
• Visibility Mapは2bit/blockで、1bit目で「ブロックにゴ
ミタプルがある可能性があるかどうか」を表す
• 「Xブロック目に対応するビットが1」=「Xブロック目
はVacuumしなくてよい」
• どのくらいゴミがあるかどうかはわからない
「block 0は飛ばし、block 1はVacuumする」みた
いな感じで動作する。
けど、本当はOSのプリフェッチを活かすために
、32ブロック連続で1じゃないと飛ばさない
9Copyright©2018 NTT Corp. All Rights Reserved.
• テーブルの先頭から末尾まで(※)を読んで、ゴミタプルを探す
• (※)Visibility Mapを見て、ゴミがある所だけ読む
• ゴミタプルが一定量溜まったらテーブル、インデックスのゴミを
回収する、を繰り返す
Vacuum概要(処理の流れ)
テーブル
スキャン
テーブル
Vacuum
インデックス
Vacuum
インデックスなしインデックスあり
※インデックスが2つある場合
10Copyright©2018 NTT Corp. All Rights Reserved.
1. テーブルを常に先頭から読もうとする
2. シングルプロセスでしかできない
3. インデックスを常に全て読む
4. DBの稼働状況を考慮しない
Vacuumの問題
11Copyright©2018 NTT Corp. All Rights Reserved.
• ゴミがある可能性があるブロックを管理するマップ(
Visibility Map)である程度効率化できるが、どれくらい
ゴミがあるかの情報はない
• 「テーブル内のゴミはある程度局所化されているのでは
?」という前提の元、”最もI/Oコスパの良い範囲”に集
中してVacuumをする
• 特定のIDへの更新の集中
• 特定の期間に関連するタプルへの更新の集中
テーブルを常に先頭から読もうとする
12Copyright©2018 NTT Corp. All Rights Reserved.
• TPC-C(order_line)
テーブルを常に先頭から読もうとする
13Copyright©2018 NTT Corp. All Rights Reserved.
• TPC-C(order_line)
テーブルを常に全て読もうとする
14Copyright©2018 NTT Corp. All Rights Reserved.
Vacuumの並列化
W1 W2 W3
並列化
15Copyright©2018 NTT Corp. All Rights Reserved.
1. テーブルを常に先頭から読もうとする
• “最もゴミタプルがありそうな場所”のみをVacuumする
2. シングルプロセスでしかできない
• 並列化する
3. インデックスを常に全て読む
• ゴミタプル数に応じて、インデックスツリーを辿りながら回
収対象を探す
4. DBの稼働状況を考慮しない
• リソースマネージャー?
Vacuumの問題
16Copyright©2018 NTT Corp. All Rights Reserved.
• 富士通オーストラリアの開発者が提案
• PostgreSQLのストレージ周りは、他のコンポーネントと
密に連携しているので調整が大変そう
• FDW(SQL/MEDの実装系)との比較
• FDWはDDLに対応していない
Pluggable Storage Engine
17Copyright©2018 NTT Corp. All Rights Reserved.
• 同じトランザクションモデルを使う、もしくはトランザ
クションに対応しない
• 同じWALストリームを利用する
• タプルはTID(TupleID:ブロック番号とオフセット)によ
って識別される
• ストレージによって異なるMVCCを実装できるようにす
る
• など
ストレージエンジンAPIで合意していること
18Copyright©2018 NTT Corp. All Rights Reserved.
PostgreSQLのストレージAPI
19Copyright©2018 NTT Corp. All Rights Reserved.
(参考)MySQLのストレージAPI
https://dev.mysql.com/doc/internals/en/api-reference.html
20Copyright©2018 NTT Corp. All Rights Reserved.
• EnterpriseDB社が開発中の新しいストレージフォーマット
• heap = PostgreSQLの追記型テーブルの呼称
• UNDOログを使ってin-place updateを可能にする
• 今月始めにgithubで公開&コミュニティに提案
• https://github.com/EnterpriseDB/zheap
zheap
21Copyright©2018 NTT Corp. All Rights Reserved.
• ストレージAPI対応としているが、リポジトリ上のコー
ドではストレージAPIを使っていない
• UNDOログの実装自体は一般的なもの
• 古いタプルをUNDOログに退避して、ROLLBACK時に戻す
• heapと比べて、
• ゴミタプルがたまりにくい(テーブルの肥大化を避けれる)
• タプルヘッダが小さい(xmin/xmaxはない)
• ページ毎にUNDOログへのポインタを持つ
• Vacuumが必要ない。XID周回もない。
特徴
※2018/3/30現在の情報です。将来変更されるかもし
れませんし、私がコードを見ただけなので間違っている
かもしれません。
22Copyright©2018 NTT Corp. All Rights Reserved.
• ロングトランザクションがいる限りUNDOログ領域が大
きくなる
• ロングトランザクションが終わると、undo workerが必要無くな
ったUNDOログを消す
• ページ毎にあるUNDOログへのポインタは最大4個
• ページ内の4タプル以上が同時に更新されると、ポインタの空き
ができるまで止まる
• undo workerが非同期的に必要なくなったUNDOログ領
域を削除する
• タプル削除後、領域を再利用するコードが見つけられな
かった
特徴(2)
※2018/3/30現在の情報です。将来変更されるかもし
れませんし、私がコードを見ただけなので間違っている
かもしれません。
23Copyright©2018 NTT Corp. All Rights Reserved.
イメージ
backendbackendbackend
UPDATE
INSERT
UPDATE
INSERT
UPDATE
lp
tuple
UPDATE
UNDOログ・ファイル (1ファイル = 4MB)
ページ
• 1つのbackendにつき、1つのUNDOログファイルが割り当てられる
• 各UNDOログファイルは、4MBのUNDOログセグメントに分けられている
• 削除される単位も4MBのファイル
• 各UNDOログファイルの状況は、DSMで共有
• DSMは必要になった分だけ確保されるようになっている
• $PGDATA/base/undoにUNDOログを保存。$PGDATA/pg_undoに永続化用のデ
ータを保存。
lp
tuple
24Copyright©2018 NTT Corp. All Rights Reserved.
テーブルサイズ比較
http://amitkapila16.blogspot.jp/2018/03/zheap-storage-engine-to-provide-better.html
25Copyright©2018 NTT Corp. All Rights Reserved.
• Vacuumの効率化
• 並列化
• 局所化
• zheap
• UNDOログベースのテーブル
• Vacuumが必要なくなる
• Pluggable Storage Engineが導入されるとPostgreSQL本体でも使
えるようになるかも
まとめ

More Related Content

What's hot

pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速するKohei KaiGai
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)NTT DATA Technology & Innovation
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Toshi Harada
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャKohei KaiGai
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCacheKohei KaiGai
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_BetaKohei KaiGai
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~Takanori Suzuki
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.JapanKohei KaiGai
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみMasahiko Sawada
 

What's hot (20)

pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 
PostreSQL監査
PostreSQL監査PostreSQL監査
PostreSQL監査
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介PostgreSQL9.3新機能紹介
PostgreSQL9.3新機能紹介
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
GresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフGresCubeで快適PostgreSQLライフ
GresCubeで快適PostgreSQLライフ
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
 

Similar to Vacuumとzheap

NNKproject Japanese version
NNKproject Japanese versionNNKproject Japanese version
NNKproject Japanese versionnao takatoshi
 
NNKproject Japanese version2
NNKproject Japanese version2NNKproject Japanese version2
NNKproject Japanese version2nao takatoshi
 
分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介Orb, Inc.
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2Kuniaki Igarashi
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi200918166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009Muhammad Ali
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析Akinori Abe
 
並行実行制御の最適化手法
並行実行制御の最適化手法並行実行制御の最適化手法
並行実行制御の最適化手法Sho Nakazono
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料直久 住川
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみたKohei Tokunaga
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_aTom Hayakawa
 

Similar to Vacuumとzheap (20)

ゲート方式量子コンピュータの概要
ゲート方式量子コンピュータの概要ゲート方式量子コンピュータの概要
ゲート方式量子コンピュータの概要
 
NNKproject Japanese version
NNKproject Japanese versionNNKproject Japanese version
NNKproject Japanese version
 
NNKproject Japanese version2
NNKproject Japanese version2NNKproject Japanese version2
NNKproject Japanese version2
 
分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介
 
Orb oracle
Orb oracleOrb oracle
Orb oracle
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi200918166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
2018 07-23
2018 07-232018 07-23
2018 07-23
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
 
並行実行制御の最適化手法
並行実行制御の最適化手法並行実行制御の最適化手法
並行実行制御の最適化手法
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 

More from Masahiko Sawada

PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説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...行ロックと「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 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報Masahiko Sawada
 
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLTransparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLMasahiko Sawada
 
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -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...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 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
 
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
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~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
 
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
 

More from Masahiko Sawada (20)

PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
Transparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQLTransparent Data Encryption in PostgreSQL
Transparent Data Encryption in PostgreSQL
 
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
 
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
 
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...
 
Vacuum more efficient than ever
Vacuum more efficient than everVacuum more efficient than ever
Vacuum more efficient than ever
 
Parallel Vacuum
Parallel VacuumParallel Vacuum
Parallel Vacuum
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
 
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
 
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プレ勉強会
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Vacuumとzheap

  • 1. Copyright©2018 NTT Corp. All Rights Reserved. Vacuumとzheap NTT OSSセンタ 澤田 雅彦 2018/3/30 BDI勉強会
  • 2. 2Copyright©2018 NTT Corp. All Rights Reserved. 自己紹介 澤田 雅彦 @sawada_masahiko NTT OSSセンタ NTTデータ入社(2012年) PostgreSQLの技術サポート PostgreSQLの本体開発 Replication, Vacuum, Distributed Transaction PostgreSQLの周辺ツール開発  pg_repack – オンラインメンテナンスツール  pg_bigm – 2-gram全文検索モジュール
  • 3. 3Copyright©2018 NTT Corp. All Rights Reserved. • PostgreSQLおさらい • アーキテクチャ • MVCC • Vacuumの問題点と改善 • ストレージエンジンAPI • zheap 目次 PostgreSQLの現状の話 まだ導入されていない機能の話
  • 4. 4Copyright©2018 NTT Corp. All Rights Reserved. • プロセスモデル • Postmasterプロセス:接続の受付、Backendプロセスのforkなどを行う • Backendプロセス : SQLを処理するプロセス • DBデータは共有バッファを使ってプロセス間で共有する PostgreSQLのアーキテクチャ DBデータ (テーブル、インデックスなど) 共有バッファ WALバッファ WAL (トランザクションログ) backendbackendbackend (postgres) postmaster wal writer bg writer auto vacuum stat collector logger archiver wal receiver wal sender wal sender wal sender wal sender wal senderbg worker その他 制御情報 startup
  • 5. 5Copyright©2018 NTT Corp. All Rights Reserved. • トランザクションID(XID) • トランザクション毎に割り当てられるID。単調増加。32bit。 • xmin : 追加したトランザクションID(INSERT/UPDATE) • xmax : 削除したトランザクションID(DELETE/UPDATE) • cmin : 追加したコマンドのID • cmax : 削除したコマンドのID コマンドIDはカーソルを利用した時等に利用される 追記型アーキテクチャ xmin xmax cmin cmax Column 100 110 0 0 ‘A’ 100 1 ‘B’ 110 130 0 1 ‘A-1’ 120 0 ‘C’ 130 0 ‘D’ 130 1 ‘A-2’ xid(100) : INSERT ‘A’; xid(100) : INSERT ‘B’; xid(110) : UPDATE ‘A’ -> ‘A-1’; xid(120) : INSERT ‘C’; xid(130) : INSERT ‘D’; xid(130) : UPDATE ‘A-1’ -> ‘A-2’;
  • 6. 6Copyright©2018 NTT Corp. All Rights Reserved. • 各トランザクションのステータスを管理するファイル • 2bit/Txで表現 • 00 : in-progress • 01 : committed • 10 : aborted • 11 : sub-transaction committed • トランザクションIDから「どのclogファイルのどの部分 」を見るべきかがわかる • 可視性判定の度に毎回clogを見るのは遅い • clogの内容をタプルヘッダにキャッシュ(Hint Bitと呼ばれる) して二回目以降はclogを見ない clog(Commit Log)
  • 7. 7Copyright©2018 NTT Corp. All Rights Reserved. • 削除済みタプルを回収して、再利用可能にする機能( Garbage Collection) • 実行中トランザクションの最小のxminより、タプルのxmaxが小 さい場合、回収可能 • VacuumはINSERT/DELETE/UPDATEとは競合しない • 不要領域を再利用可能にするが、テーブルサイズは縮小 しない • ただし、テーブルの末尾が空になった時は切り詰められる • auto vacuum機能により、自動的にバックグラウンドで 実行される • 頻度はテーブル毎に設定可能、”ゆっくり”vacuumする事も可能 • 「ゴミタプルがある可能性のあるブロック」を管理する ことで効率的にVacuumする • Visibility Mapと呼ばれる Vacuum概要
  • 8. 8Copyright©2018 NTT Corp. All Rights Reserved. Block 0 (8kB) Block 1 : Block 100 : Block 198 Block 199 Vacuum概要(Visibility Mapの利用) 11 00 11 11 ..... 11 01 • Visibility Mapは2bit/blockで、1bit目で「ブロックにゴ ミタプルがある可能性があるかどうか」を表す • 「Xブロック目に対応するビットが1」=「Xブロック目 はVacuumしなくてよい」 • どのくらいゴミがあるかどうかはわからない 「block 0は飛ばし、block 1はVacuumする」みた いな感じで動作する。 けど、本当はOSのプリフェッチを活かすために 、32ブロック連続で1じゃないと飛ばさない
  • 9. 9Copyright©2018 NTT Corp. All Rights Reserved. • テーブルの先頭から末尾まで(※)を読んで、ゴミタプルを探す • (※)Visibility Mapを見て、ゴミがある所だけ読む • ゴミタプルが一定量溜まったらテーブル、インデックスのゴミを 回収する、を繰り返す Vacuum概要(処理の流れ) テーブル スキャン テーブル Vacuum インデックス Vacuum インデックスなしインデックスあり ※インデックスが2つある場合
  • 10. 10Copyright©2018 NTT Corp. All Rights Reserved. 1. テーブルを常に先頭から読もうとする 2. シングルプロセスでしかできない 3. インデックスを常に全て読む 4. DBの稼働状況を考慮しない Vacuumの問題
  • 11. 11Copyright©2018 NTT Corp. All Rights Reserved. • ゴミがある可能性があるブロックを管理するマップ( Visibility Map)である程度効率化できるが、どれくらい ゴミがあるかの情報はない • 「テーブル内のゴミはある程度局所化されているのでは ?」という前提の元、”最もI/Oコスパの良い範囲”に集 中してVacuumをする • 特定のIDへの更新の集中 • 特定の期間に関連するタプルへの更新の集中 テーブルを常に先頭から読もうとする
  • 12. 12Copyright©2018 NTT Corp. All Rights Reserved. • TPC-C(order_line) テーブルを常に先頭から読もうとする
  • 13. 13Copyright©2018 NTT Corp. All Rights Reserved. • TPC-C(order_line) テーブルを常に全て読もうとする
  • 14. 14Copyright©2018 NTT Corp. All Rights Reserved. Vacuumの並列化 W1 W2 W3 並列化
  • 15. 15Copyright©2018 NTT Corp. All Rights Reserved. 1. テーブルを常に先頭から読もうとする • “最もゴミタプルがありそうな場所”のみをVacuumする 2. シングルプロセスでしかできない • 並列化する 3. インデックスを常に全て読む • ゴミタプル数に応じて、インデックスツリーを辿りながら回 収対象を探す 4. DBの稼働状況を考慮しない • リソースマネージャー? Vacuumの問題
  • 16. 16Copyright©2018 NTT Corp. All Rights Reserved. • 富士通オーストラリアの開発者が提案 • PostgreSQLのストレージ周りは、他のコンポーネントと 密に連携しているので調整が大変そう • FDW(SQL/MEDの実装系)との比較 • FDWはDDLに対応していない Pluggable Storage Engine
  • 17. 17Copyright©2018 NTT Corp. All Rights Reserved. • 同じトランザクションモデルを使う、もしくはトランザ クションに対応しない • 同じWALストリームを利用する • タプルはTID(TupleID:ブロック番号とオフセット)によ って識別される • ストレージによって異なるMVCCを実装できるようにす る • など ストレージエンジンAPIで合意していること
  • 18. 18Copyright©2018 NTT Corp. All Rights Reserved. PostgreSQLのストレージAPI
  • 19. 19Copyright©2018 NTT Corp. All Rights Reserved. (参考)MySQLのストレージAPI https://dev.mysql.com/doc/internals/en/api-reference.html
  • 20. 20Copyright©2018 NTT Corp. All Rights Reserved. • EnterpriseDB社が開発中の新しいストレージフォーマット • heap = PostgreSQLの追記型テーブルの呼称 • UNDOログを使ってin-place updateを可能にする • 今月始めにgithubで公開&コミュニティに提案 • https://github.com/EnterpriseDB/zheap zheap
  • 21. 21Copyright©2018 NTT Corp. All Rights Reserved. • ストレージAPI対応としているが、リポジトリ上のコー ドではストレージAPIを使っていない • UNDOログの実装自体は一般的なもの • 古いタプルをUNDOログに退避して、ROLLBACK時に戻す • heapと比べて、 • ゴミタプルがたまりにくい(テーブルの肥大化を避けれる) • タプルヘッダが小さい(xmin/xmaxはない) • ページ毎にUNDOログへのポインタを持つ • Vacuumが必要ない。XID周回もない。 特徴 ※2018/3/30現在の情報です。将来変更されるかもし れませんし、私がコードを見ただけなので間違っている かもしれません。
  • 22. 22Copyright©2018 NTT Corp. All Rights Reserved. • ロングトランザクションがいる限りUNDOログ領域が大 きくなる • ロングトランザクションが終わると、undo workerが必要無くな ったUNDOログを消す • ページ毎にあるUNDOログへのポインタは最大4個 • ページ内の4タプル以上が同時に更新されると、ポインタの空き ができるまで止まる • undo workerが非同期的に必要なくなったUNDOログ領 域を削除する • タプル削除後、領域を再利用するコードが見つけられな かった 特徴(2) ※2018/3/30現在の情報です。将来変更されるかもし れませんし、私がコードを見ただけなので間違っている かもしれません。
  • 23. 23Copyright©2018 NTT Corp. All Rights Reserved. イメージ backendbackendbackend UPDATE INSERT UPDATE INSERT UPDATE lp tuple UPDATE UNDOログ・ファイル (1ファイル = 4MB) ページ • 1つのbackendにつき、1つのUNDOログファイルが割り当てられる • 各UNDOログファイルは、4MBのUNDOログセグメントに分けられている • 削除される単位も4MBのファイル • 各UNDOログファイルの状況は、DSMで共有 • DSMは必要になった分だけ確保されるようになっている • $PGDATA/base/undoにUNDOログを保存。$PGDATA/pg_undoに永続化用のデ ータを保存。 lp tuple
  • 24. 24Copyright©2018 NTT Corp. All Rights Reserved. テーブルサイズ比較 http://amitkapila16.blogspot.jp/2018/03/zheap-storage-engine-to-provide-better.html
  • 25. 25Copyright©2018 NTT Corp. All Rights Reserved. • Vacuumの効率化 • 並列化 • 局所化 • zheap • UNDOログベースのテーブル • Vacuumが必要なくなる • Pluggable Storage Engineが導入されるとPostgreSQL本体でも使 えるようになるかも まとめ