SlideShare a Scribd company logo
1 of 35
Download to read offline
地理情報を爆速で処理するPG-Stromの新機能
~GPU版PostGISとそれを支えるGPUメモリストア~
HeteroDB,Inc
Chief Architect & CEO
KaiGai Kohei <kaigai@heterodb.com>
HeteroDB社について
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能2
会社概要
 商号 ヘテロDB株式会社
 創業 2017年7月4日
 拠点 品川区北品川5-13-15
 事業内容 高速データベース製品の販売
GPU&DB領域の技術コンサルティング
ヘテロジニアスコンピューティング技術を
データベース領域に適用し、
誰もが使いやすく、安価で高速なデータ解析基盤を提供する。
代表者プロフィール
 海外 浩平(KaiGai Kohei)
 OSS開発者コミュニティにおいて、PostgreSQLやLinux kernelの
開発に10年以上従事。主にセキュリティ・FDW等の分野でアッ
プストリームへの貢献。
 IPA未踏ソフト事業において“天才プログラマー”認定 (2006)
 GPU Technology Conference Japan 2017でInception Awardを受賞
PG-Stromとは?
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能3
【機能】
 集計/解析ワークロードの透過的なGPU高速化
 SQLからGPUプログラムを自動生成し並列実行
 SSD-to-GPU Direct SQLによるPCIeバスレベルの最適化
 GPUメモリにデータを常駐。OLTPワークロードとの共存
 一部PostGIS関数のサポート。位置情報分析を高速化
PG-Strom: GPUとNVME/PMEMの能力を最大限に引き出し、
テラバイト級のデータを高速処理するPostgreSQL向け拡張モジュール
App
GPU
off-loading
for IoT/Big-Data
for ML/Analytics
➢ SSD-to-GPU Direct SQL
➢ Columnar Store (Arrow_Fdw)
➢ GPU Memory Store (Gstore_Fdw)
➢ Asymmetric Partition-wise
JOIN/GROUP BY
➢ BRIN-Index Support
➢ NVME-over-Fabric Support
➢ Inter-process Data Frame
for Python scripts
➢ Procedural Language for
GPU native code (w/ cuPy)
➢ PostGIS Support
NEW
NEW
ログ収集デーモン:
ターゲット:IoT/M2Mログの集計・解析処理
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能4
Manufacturing Logistics Mobile Home electronics
なぜPostgreSQLか?
 シングルノードで処理できるならそっちの方が運用が楽
 エンジニアが慣れ親しんが技術で、運用ノウハウの蓄積が豊富
JBoF: Just Bunch of Flash
NVME-over-Fabric
(RDMA)
DB管理者
BIツール(可視化)
機械学習アプリケーション
(E.g, 異常検知など)
共通データ
フレーム PG-Strom
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能5
PostGISについて
PostGISって?(1/2)
▌概要
 点(Point)、線(LineString)、多角形(Polygon)等のジオメトリ要素、
およびそれらの間の演算を PostgreSQL で実行するための拡張モジュール
 演算の例 … 包含(Contains)、交差(Crosses)、接合(Touch)など
 GiSTインデックスに対応して高速な検索を実現
 2005年に PostGIS 1.0 がリリース。以降、15年にわたって継続的開発。
© GAIA RESOURCES
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能6
地理情報マスタセンサーデータ
位置情報(座標)を
含むデータを大量に生成
都道府県・市区町村などを単位とするデータの集計や絞り込み
【IoT/M2Mデータに対しての想定利用シーン】
PostGISって?(2/2)
▌データ型
 Geometry(投影座標系)、Geography(地理座標系)
▌ジオメトリ生成の例
 geometry ST_MakePoint(float8 x, float8 y[, float8 z])
 geometry ST_MakeLine(geometry point1, geometry point2)
…など
▌空間関係演算の例
 float8 ST_Distance(geometry g1, geometry g2)
 float8 ST_Distance(geography gg1, geography gg2)
 bool ST_DWithin(geometry g1, geometry g2, float8 distance)
 float8 ST_Area(geometry g1)
 bool ST_Contains(geometry g1, geometry g2)
 bool ST_Crosses(geometry g1, geometry g2)
…など
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能7
Geometry型と空間関係演算の例
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能8
St_Distance(a,b)
ジオメトリ間の距離
St_Crosses(a,b)
ジオメトリの交差判定
St_Contains(a,b)
ジオメトリの包含判定
高速化手法(1/3)- Bounding Box
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能9
▌Bounding Boxとは
 複雑な形状のポリゴンを包摂する最も小さな矩形領域
 (x1,y1) - (x2,y2) で表現できるのでデータ量が少ない
 PostgreSQL / PostGISが geometry 型を保存する時に自動的に生成される。
▌Bounding Boxの効果
 空間関係演算を行う前に、『明らかに接していない』ものを識別できる。
➔ 重なりを含むジオメトリのみ判定を行う事で、計算リソースを節約。
明らかに接していない
共通部分を持つ可能性
高速化手法(2/3)- GiSTインデックス
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能10
▌GiSTインデックスとは
 GiST(Generalized Search Tree)は、ツリー構造を持つインデックスを一般化
したフレームワーク。
 PostGISのGeometry型は、GiST上にR木を実装したもの
▌GiSTのR木でできること
 包含(@演算子)や重なり(&&演算子)判定で、インデックスを用いた絞込み
 特に多数のポリゴン×ポイントの重なり判定で計算量が増大しやすい
➔ 事前の絞り込みで計算量を抑え込む
# 国土地理院の市町村形状データをインポート
$ shp2pgsql N03-20_200101.shp | psql gistest
gistest=# ¥d+
List of relations
Schema | Name | Type | Owner | Size |
--------+-------------+----------+--------+------------+
public | geo_japan | table | kaigai | 243 MB |
gistest=# ¥di+
List of relations
Schema | Name | Type | Owner | Table | Size |
--------+--------------------+-------+--------+-----------+---------+
public | geo_japan_pkey | index | kaigai | geo_japan | 2616 kB |
public | geo_japan_geom_idx | index | kaigai | geo_japan | 14 MB |
高速化手法(3/3)- CPU並列
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能11
▌CPU並列とは
 PostgreSQL v9.6の新機能で、テーブルのスキャン(+ 条件句の評価)を複数プロ
セスで並列実行するもの。
 SQL関数・演算子が副作用を伴わず、ある程度の絞り込みが期待できる場合。
▌PostGISのCPU並列対応
 PostGIS 3.0で対応。ほとんどの関数・演算子が “parallel safe” として定義
PostgreSQL v9.5以前 PostgreSQL v9.6以降
Leader Worker-1 Worker-2
新機能①
GPU版PostGIS
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能12
なぜGPUでSQLを高速化できるのか?
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能13
▌GPUの特徴
 ワンチップに数千演算コアを搭載する計算能力
 1.0TB/sに迫るメモリバンド
➔ 「同じ演算を多量のデータに対して実行する」ために作られたプロセッサ
(e.g 行列演算)
▌SQLワークロードの特性
 「同じ処理を大量の行に対して実行する」
(例:WHERE句の評価、JOINやGROUP BY処理)
SQL処理の中でも、全件スキャンを伴うようなワークロードに強い
GPUに実装された数千コアの
実行ユニットが、個々の行を
並列に評価する。
PG-StromにおけるPostGIS対応(Jul-2020現在)
▌ジオメトリ生成
 geometry st_makepoint(float8,float8,...)
2点から Point ジオメトリを生成する
▌空間関係演算
 float8 st_distance(geometry,geometry)
2つのジオメトリ間の距離を導出する
 bool st_dwithin(geometry,geometry,float8)
ジオメトリが、指定したジオメトリから
指定した距離内にある場合に真を返す。
 bool st_contains(geometry,geometry)
ジオメトリ1がジオメトリ2を完全に包含
する場合に真を返す。
 bool st_crosses(geometry,geometry)
与えられたジオメトリが共通の内部の点を持ち、
かつそうでない点を持つ場合に真を返す。
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能14
GPUでPostGIS関数を実行する(1/2)
postgres=# ¥d _gistest
Table "public._gistest"
Column | Type | Collation | Nullable | Default
--------+----------+-----------+----------+--------------------------------------
id | integer | | not null | nextval('_gistest_id_seq'::regclass)
a | geometry | | |
b | geometry | | |
postgres=# explain verbose select * from _gistest where st_contains(a,b);
QUERY PLAN
------------------------------------------------------------------------------------
Custom Scan (GpuScan) on public._gistest (cost=4251.50..4251.50 rows=1 width=196)
Output: id, a, b
GPU Filter: st_contains(_gistest.a, _gistest.b)
GPU Preference: None
Kernel Source: /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.4.gpu
Kernel Binary: /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.5.ptx
(6 rows)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能15
GPUでPostGIS関数を実行する(2/2)
$ less /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.4.gpu
:
#include "cuda_postgis.h"
#include "cuda_gpuscan.h"
DEVICE_FUNCTION(cl_bool)
gpuscan_quals_eval(kern_context *kcxt,
kern_data_store *kds,
ItemPointerData *t_self,
HeapTupleHeaderData *htup)
{
void *addr __attribute__((unused));
pg_geometry_t KVAR_2;
pg_geometry_t KVAR_3;
assert(htup != NULL);
EXTRACT_HEAP_TUPLE_BEGIN(addr, kds, htup);
EXTRACT_HEAP_TUPLE_NEXT(addr);
pg_datum_ref(kcxt,KVAR_2,addr); // pg_geometry_t
EXTRACT_HEAP_TUPLE_NEXT(addr);
pg_datum_ref(kcxt,KVAR_3,addr); // pg_geometry_t
EXTRACT_HEAP_TUPLE_END();
return EVAL(pgfn_st_contains(kcxt, KVAR_2, KVAR_3));
}
:
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能16
列A、列Bから
ジオメトリ型の
データをロード
ロードしたデータで
GPU版 st_contains() 関数を
呼出し
SQLのWHERE句を
評価するために
自動生成された関数
他にもサポートするPostGIS関数は?
 float St_Area(geometry)
✓ ポリゴンの面積を返す。面積単位はSRIDに基づく。
 geometry St_Centroid(geometry)
✓ ジオメトリの幾何学的重心を返す。
 float St_Length(geometry)
✓ LineStringの二次元長を返す。
 bool St_Overlaps(geometry, geometry)
✓ ジオメトリが共有空間を持つかどうかを判定する。
 bool St_Touches(geometry, geometry)
✓ ジオメトリが外周で接触しているかどうかを判定する。
 bool St_Within(geometry, geometry)
✓ ジオメトリAが完全にジオメトリBの内側にあるかどうかを判定する。
.... など。
 その他、よく使う関数に関しては “Fast Path” ロジックの実装も
✓ 例えば、Polygon対PointのSt_Contains()など、汎用ロジック(St_Relate()関数)ではなく
専用の実装を設ける事で、高速に結果を返せるようになっている。
基本はユーザさんの要望ベースで順次機能拡張
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能17
GiSTインデックスへの対応
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能18
▌前提
 ポリゴン定義の数は、ポイント(GPSデータ等)に比べると数が少ない。
 GiST(R木)インデックスはBounding Boxだけを保持するので、ポリゴン定義データ
に比べると、通常は圧倒的にコンパクトなサイズとなる。
➔ GPUメモリに十分載せうるサイズである事が一般的
▌GPUでGiST(R木)インデックスを参照できれば
 数十万ポリゴン × 数億ポイントの突合といった規模のワークロードを、
一般的なWHERE句の評価と同程度の負荷で処理できる公算が高い。
 現在、技術課題を検討中
ポリゴン×ポイントの突合を圧倒的に高速化する(予定)
WIP
GiST(R木)インデックス
ポリゴン定義
点データを含む
テーブル
数千スレッドが
並列に
インデックスを
探索
新機能②
GPUメモリストア(Gstore_Fdw)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能19
IoT/M2MデータのライフサイクルとPG-Stromの機能
時系列データ
(数TB~)
前処理済みデータ
リアルタイムデータ
ETL・
前処理
課題:
大容量データの保存・読出し
課題:
高頻度な更新と高速な解析処理の両立
Apache Arrow対応
(Arrow_Fdw)
SSD-to-GPU
Direct SQL
BRIN-Index
GPU Memory Store
(Gstore_Fdw)
RuntimeGPUCodeGeneration
PostGIS/JSONdatasupport
NEWNEW
PG-Strom機能群
データ量:大
データ量:小
従来のスコープ
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能20
背景と課題
▌GPUとホストメモリは“遠い”
 通常、GPUはPCI-Eバスを介してホストシステムと接続する。
 PCI-E Gen 3.0 x16レーンだと、片方向 16GB/s 「しかない」
行って帰ってのレイテンシは数十マイクロ秒単位。
 DRAMの転送速度は140GB/sでレイテンシは100ns程度。
もしL1/L2に載っていれば数ns単位でアクセス可能
出展:https://gist.github.com/eshelman/343a1c46cb3fba142c1afdcdeec17646
▌高い更新頻度
 もし100万デバイスが10秒に一度、
現在位置を更新するなら?
➔ 単純 UPDATE を毎秒10万回実行。
➔ 1.0sec / 10万 = 10us
▌リアルタイム性に対する要請
 利用者が検索、解析したいのは、
「その時点での最新の状態」
➔ 後でまとめてバッチ、では通用しない。
GPU
Device
RAM
RAMCPU
900GB/s
140GB/s
16GB/s
PCI-E
Gen3.0
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能21
Gstore_Fdwアーキテクチャ
REDOログを利用してGPUメモリ側を非同期に更新する。
検索クエリの実行前に更新を適用すれば辻褄は合う!
Host Memory
Store
REDO Log
Buffer
Base File Redo File
Host
Memory
Storage
GPU
Device
Memory
Store
PostgreSQL Backend
(OLTP系)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能22
PostgreSQL Backend
(OLTP系)
PostgreSQL Backend
(OLTP系)
INSERT
UPDATE
DELETE
ログ追記
更新系処理では
一切GPUにタッチしない
Gstore_Fdwアーキテクチャ
REDOログを利用してGPUメモリ側を非同期に更新する。
検索クエリの実行前に更新を適用すれば辻褄は合う!
Host Memory
Store
REDO Log
Buffer
Base File Redo File
Host
Memory
Storage
GPU
Device
Memory
Store
PostgreSQL
BG-Worker
(GPUバッファ管理)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能23
①未適用分のログ転送
GPU Kernel
to apply
REDO Log
数千スレッドで動作
ほぼ一瞬で適用できる
②GPUカーネルの起動
Gstore_Fdwアーキテクチャ
REDOログを利用してGPUメモリ側を非同期に更新する。
検索クエリの実行前に更新を適用すれば辻褄は合う!
Host Memory
Store
REDO Log
Buffer
Base File Redo File
Host
Memory
Storage
GPU
Device
Memory
Store
PostgreSQL
Backend
(解析系SQL)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能24
①未適用分のログ転送
GPU Kernel
to apply
REDO Log
SQL処理の前に REDO ログを
適用すれば、辻褄はあう
(一貫性が保たれる)
GPU Kernel
to execute
SQL
②GPUカーネルの起動
Gstore_Fdw外部テーブルの定義
CREATE FOREIGN TABLE ft (
id int,
x float,
y float,
z text
) server gstore_fdw
options (gpu_device_id '1',
base_file '/opt/pgdata-dev/ft.base',
redo_log_file '/opt/pmem-dev/ft.redo’,
max_num_rows '4000000',
primary_key 'id');
(補足)
 base_fileはNVMEストレージ上に配置するのが望ましい。
✓ mmap(2)してバイト単位のランダムアクセスが多発するため、
PMEMの微妙なアクセスの遅さが性能差として見えてしまう。
 redo_log_fileはPMEM上に配置するのが望ましい。
✓ トランザクションのコミット時にREDOログを永続化する必要があるため。
追記書き出しのみだが、細かい単位でCPUキャッシュをフラッシュする。
(逆にブロックデバイスのようなfsyncは必要ないが)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能25
更新処理のパフォーマンス(1/2)
--- 200万行を投入
INSERT INTO ft (SELECT x, 100*random(),
100*random(),
md5(x::text)
FROM generate_series(1,2000000) x);
--- 以下のクエリを pgbench で投入
--- (クライアント数:20を想定)
UPDATE ft SET x = 100*random(),
y = 100*random()
WHERE id = (SELECT 20*(100000.0*random())::int + :client_id);
--- 実行計画
EXPLAIN ....;
QUERY PLAN
-------------------------------------------------------------------
Update on ft (cost=0.02..100.03 rows=10000 width=58)
InitPlan 1 (returns $0)
-> Result (cost=0.00..0.02 rows=1 width=4)
-> Foreign Scan on ft (cost=0.00..100.01 rows=10000 width=58)
Filter: (id = $0)
Index Cond: id = $0
(6 rows)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能26
更新処理のパフォーマンス(2/2)
$ pgbench -p 6543 postgres -n -f test.sql -c 20 -j 10 -T 10
transaction type: test.sql
scaling factor: 1
query mode: simple
number of clients: 20
number of threads: 10
duration: 10 s
number of transactions actually processed: 1236401
latency average = 0.162 ms
tps = 123631.393482 (including connections establishing)
tps = 123674.819689 (excluding connections establishing)
(補足)
 まだ排他ロックで実装している箇所があり、クライアント数が20を越えた辺りで
サチり始める。
➔ Row-Idの払い出しや、REDOログの書き込み位置などロックレス化できるハズ。
 PostgreSQLの通常テーブル(on NVME-SSD):
20クライアント 65k TPS、80クライアント160k TPS程度
 通常テーブルと外部テーブルの内部ロジックの違いに起因する差異は未検証
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能27
検索処理のパフォーマンス(1/2)
--- GpuScan (GPU版PostGIS) + Gstore_Fdw
=# SELECT count(*) FROM ft
WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90,¥
10 90,10 10))’, st_makepoint(x,y));
count
-------
94440
(1 row)
Time: 75.466 ms
--- 通常版PostGIS + PostgreSQLテーブル
=# SET pg_strom.enabled = off;
SET
=# SELECT count(*) FROM tt
WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90,¥
10 90,10 10))', st_makepoint(x,y));
count
-------
94440
(1 row)
Time: 332.300 ms
200万個のPointから、
指定領域内の数をカウント
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能28
検索処理のパフォーマンス(2/2)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能29
(100,100)
(0,0)
(90,90)
(90,10)
(90,12)(12,12)
(12,88) (90,88)
(10,90)
(10,10)
この領域内に含まれる
点(Point)を抽出した
テーブル ft および tt には
(0,0)~(100,100)の範囲内に
ランダムに 200万個の点を格納
検索+更新処理のパフォーマンス
--- 裏で更新処理を実行
$ pgbench -p 6543 postgres -n -f test.sql -c 15 -T 60
:
duration: 60 s
number of transactions actually processed: 9188638
latency average = 0.098 ms
tps = 153143.595549 (including connections establishing)
tps = 153148.363454 (excluding connections establishing)
--- ヘビーな更新処理中に GPU での集計クエリを実行
=# SELECT count(*) FROM ft
WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90, ¥
10 90,10 10))', st_makepoint(x,y));
2020-07-26 17:26:12.283 JST [261916] LOG: gstore_fdw: Log applied (nitems=635787,
length=54396576, pos 750323824 => 787623328)
count
-------
94629
(1 row)
Time: 136.456 ms
ヘビーな更新処理中であっても、若干の処理速度低下で応答
集計処理の開始時点で、GPU側ストアを
最新の状態にリフレッシュするため、
未適用のREDOログを 63.5 万件適用している
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能30
実行環境
従来と異なり、NVMEは必須ではないのでH/W要件が緩い。
WIP
モデル名 p3.2xlarge p3.8xlarge p3.16xlarge NC6s v NC12s v3 NC24s v3
vCPU 8 core 32 core 64 core 6 core 12 core 24 core
RAM 61GB 244GB 488GB 112 GB 224 GB 448 GB
GPU 1 x Tesla V100
(16GB; 5120C)
4 x Tesla V100
(16GB; 5120C)
8 x Tesla V100
(16GB; 5120C)
1 x Tesla V100
(16GB; 5120C)
2 x Tesla V100
(16GB; 5120C)
4 x Tesla V100
(16GB; 5120C)
オンデマンド
料金 4.324USD/h 16.906USD/h 32.682USD/h ¥299.22/h ¥782.91/h ¥711.74/h
※ オンデマンド料金は、各社東京リージョンの本体のみ単価(2020/7/26現在)で記載。
今後のマイルストーン
 マシンイメージの提供(2020-4Q頃?)
 AWS Marketplace / Azure Marketplace への登録
 ドキュメント、ガイダンスの整備
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能31
PG-Strom v3.0に向けて
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能32
▌PostGIS関連
 サポート対象 PostGIS 関数・演算子の拡充
 GiSTインデックスの対応
▌Gstore_Fdw関連
 マルチGPU対応
 バックアップ・レプリケーション機能の実装
 スケーラビリティ改善(ロックレス化)
 可変長データの持ち方改良
▌その他
 AWS/Azure向けの動作検証、マシンイメージ作成
 ドキュメント作成
2020年内の正式リリースに向けて開発・テスト実施中
トランザクションの対応
 SAVEPOINT, ROLLBACK TO SAVEPOINT も使用可能
 トランザクション分離レベルは Read-Committed のみ
 他の GPU-DB では(INSERT/UPDATE/DELETE対応していても)非対応
✓ OmniSCI, Kinetica, SQreamDB, Brytlyt のドキュメントを調査
GPU-DBでは珍しく、トランザクションのRollbackにも対応
=# BEGIN;
BEGIN;
=# INSERT INTO ft VALUES (9999999, random(), random(), 'this is test record');
INSERT 0 1
postgres=# SELECT * FROM ft WHERE id > 9000000;
id | x | y | z
---------+--------------------+--------------------+---------------------
9999999 | 0.4181428498515025 | 0.5861937164356661 | this is test record
(1 row)
postgres=# ABORT;
ROLLBACK
postgres=# SELECT * FROM ft WHERE id > 9000000;
id | x | y | z
----+---+---+---
(0 rows)
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能34
バックアップ&レプリケーション
REDO Log Buffer
Redo File
GSTORE_TX_LOG__INSERT
GSTORE_TX_LOG__DELETE
GSTORE_TX_LOG__COMMIT
GSTORE_TX_LOG__INSERT
GSTORE_TX_LOG__COMMIT
PostgreSQL
Backend
PostgreSQL
Backend
追記
追記
WIP
専用SQL関数
pgstrom.gstore_fdw_replication() Backup Tool
(開発中)
Backup File
Master Server
Base File
Replication Client
(SQL関数; WIP)
Online read-only replica
REDOログの転送
爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能35

More Related Content

What's hot

20190516_DLC10_PGStrom
20190516_DLC10_PGStrom20190516_DLC10_PGStrom
20190516_DLC10_PGStromKohei KaiGai
 
pgconfasia2016 lt ssd2gpu
pgconfasia2016 lt ssd2gpupgconfasia2016 lt ssd2gpu
pgconfasia2016 lt ssd2gpuKohei KaiGai
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineGeotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineRyousuke Wayama
 
20170310_InDatabaseAnalytics_#1
20170310_InDatabaseAnalytics_#120170310_InDatabaseAnalytics_#1
20170310_InDatabaseAnalytics_#1Kohei KaiGai
 
20170329_BigData基盤研究会#7
20170329_BigData基盤研究会#720170329_BigData基盤研究会#7
20170329_BigData基盤研究会#7Kohei KaiGai
 
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...Insight Technology, Inc.
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_TokyoKohei KaiGai
 
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstromKohei KaiGai
 
20180914 GTCJ INCEPTION HeteroDB
20180914 GTCJ INCEPTION HeteroDB20180914 GTCJ INCEPTION HeteroDB
20180914 GTCJ INCEPTION HeteroDBKohei KaiGai
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)Kohei KaiGai
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】Kohei KaiGai
 
20171212_GTCJapan_InceptionSummt_HeteroDB
20171212_GTCJapan_InceptionSummt_HeteroDB20171212_GTCJapan_InceptionSummt_HeteroDB
20171212_GTCJapan_InceptionSummt_HeteroDBKohei KaiGai
 
20180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #1020180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #10Kohei KaiGai
 
An Intelligent Storage?
An Intelligent Storage?An Intelligent Storage?
An Intelligent Storage?Kohei KaiGai
 
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_FdwKohei 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
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速するKohei KaiGai
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望Kohei KaiGai
 

What's hot (20)

20190516_DLC10_PGStrom
20190516_DLC10_PGStrom20190516_DLC10_PGStrom
20190516_DLC10_PGStrom
 
pgconfasia2016 lt ssd2gpu
pgconfasia2016 lt ssd2gpupgconfasia2016 lt ssd2gpu
pgconfasia2016 lt ssd2gpu
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 onlineGeotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
Geotiff.jsで始めるリアルタイム演算 in foss4g japan 2020 online
 
20170310_InDatabaseAnalytics_#1
20170310_InDatabaseAnalytics_#120170310_InDatabaseAnalytics_#1
20170310_InDatabaseAnalytics_#1
 
20170329_BigData基盤研究会#7
20170329_BigData基盤研究会#720170329_BigData基盤研究会#7
20170329_BigData基盤研究会#7
 
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom
 
20180914 GTCJ INCEPTION HeteroDB
20180914 GTCJ INCEPTION HeteroDB20180914 GTCJ INCEPTION HeteroDB
20180914 GTCJ INCEPTION HeteroDB
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
 
20171212_GTCJapan_InceptionSummt_HeteroDB
20171212_GTCJapan_InceptionSummt_HeteroDB20171212_GTCJapan_InceptionSummt_HeteroDB
20171212_GTCJapan_InceptionSummt_HeteroDB
 
20180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #1020180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #10
 
An Intelligent Storage?
An Intelligent Storage?An Intelligent Storage?
An Intelligent Storage?
 
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 

Similar to 20200806_PGStrom_PostGIS_GstoreFdw

GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]Kohei KaiGai
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 
20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_HistoryKohei KaiGai
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JPKohei KaiGai
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfaceKohei KaiGai
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_FdwKohei KaiGai
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -griddb
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)Kosuke Kida
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算智啓 出川
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersShota TAMURA
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境DNA Data Bank of Japan center
 
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
 
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送Google Cloud Platform - Japan
 
45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄Yukio Saito
 
JTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineJTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineHaruka Takatsuka
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Ryo Sasaki
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~griddb
 

Similar to 20200806_PGStrom_PostGIS_GstoreFdw (20)

GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
 
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw20190314 PGStrom Arrow_Fdw
20190314 PGStrom Arrow_Fdw
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB - 強化された時系列データ管理・検索機能について -
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
RAPIDS 概要
RAPIDS 概要RAPIDS 概要
RAPIDS 概要
 
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境
[DDBJ Challenge 2016] 遺伝研スーパーコンピュータのビッグデータ解析環境
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
 
45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄
 
JTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineJTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontline
 
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
 

More from Kohei KaiGai

20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_APIKohei KaiGai
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_countKohei KaiGai
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_IndexKohei KaiGai
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGISKohei KaiGai
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_ProcessingKohei KaiGai
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_BetaKohei KaiGai
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGaiKohei KaiGai
 
20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - EnglishKohei KaiGai
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigDataKohei KaiGai
 
20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA UnconferenceKohei KaiGai
 
20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQLKohei KaiGai
 
20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multiKohei KaiGai
 
20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdwKohei KaiGai
 
20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_ENKohei KaiGai
 

More from Kohei KaiGai (14)

20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
 
20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English20181212 - PGconfASIA - LT - English
20181212 - PGconfASIA - LT - English
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
 
20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference20181210 - PGconf.ASIA Unconference
20181210 - PGconf.ASIA Unconference
 
20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL20181116 Massive Log Processing using I/O optimized PostgreSQL
20181116 Massive Log Processing using I/O optimized PostgreSQL
 
20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi20181016_pgconfeu_ssd2gpu_multi
20181016_pgconfeu_ssd2gpu_multi
 
20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw20181025_pgconfeu_lt_gstorefdw
20181025_pgconfeu_lt_gstorefdw
 
20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN20180920_DBTS_PGStrom_EN
20180920_DBTS_PGStrom_EN
 

20200806_PGStrom_PostGIS_GstoreFdw

  • 2. HeteroDB社について 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能2 会社概要  商号 ヘテロDB株式会社  創業 2017年7月4日  拠点 品川区北品川5-13-15  事業内容 高速データベース製品の販売 GPU&DB領域の技術コンサルティング ヘテロジニアスコンピューティング技術を データベース領域に適用し、 誰もが使いやすく、安価で高速なデータ解析基盤を提供する。 代表者プロフィール  海外 浩平(KaiGai Kohei)  OSS開発者コミュニティにおいて、PostgreSQLやLinux kernelの 開発に10年以上従事。主にセキュリティ・FDW等の分野でアッ プストリームへの貢献。  IPA未踏ソフト事業において“天才プログラマー”認定 (2006)  GPU Technology Conference Japan 2017でInception Awardを受賞
  • 3. PG-Stromとは? 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能3 【機能】  集計/解析ワークロードの透過的なGPU高速化  SQLからGPUプログラムを自動生成し並列実行  SSD-to-GPU Direct SQLによるPCIeバスレベルの最適化  GPUメモリにデータを常駐。OLTPワークロードとの共存  一部PostGIS関数のサポート。位置情報分析を高速化 PG-Strom: GPUとNVME/PMEMの能力を最大限に引き出し、 テラバイト級のデータを高速処理するPostgreSQL向け拡張モジュール App GPU off-loading for IoT/Big-Data for ML/Analytics ➢ SSD-to-GPU Direct SQL ➢ Columnar Store (Arrow_Fdw) ➢ GPU Memory Store (Gstore_Fdw) ➢ Asymmetric Partition-wise JOIN/GROUP BY ➢ BRIN-Index Support ➢ NVME-over-Fabric Support ➢ Inter-process Data Frame for Python scripts ➢ Procedural Language for GPU native code (w/ cuPy) ➢ PostGIS Support NEW NEW
  • 4. ログ収集デーモン: ターゲット:IoT/M2Mログの集計・解析処理 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能4 Manufacturing Logistics Mobile Home electronics なぜPostgreSQLか?  シングルノードで処理できるならそっちの方が運用が楽  エンジニアが慣れ親しんが技術で、運用ノウハウの蓄積が豊富 JBoF: Just Bunch of Flash NVME-over-Fabric (RDMA) DB管理者 BIツール(可視化) 機械学習アプリケーション (E.g, 異常検知など) 共通データ フレーム PG-Strom
  • 5. 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能5 PostGISについて
  • 6. PostGISって?(1/2) ▌概要  点(Point)、線(LineString)、多角形(Polygon)等のジオメトリ要素、 およびそれらの間の演算を PostgreSQL で実行するための拡張モジュール  演算の例 … 包含(Contains)、交差(Crosses)、接合(Touch)など  GiSTインデックスに対応して高速な検索を実現  2005年に PostGIS 1.0 がリリース。以降、15年にわたって継続的開発。 © GAIA RESOURCES 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能6 地理情報マスタセンサーデータ 位置情報(座標)を 含むデータを大量に生成 都道府県・市区町村などを単位とするデータの集計や絞り込み 【IoT/M2Mデータに対しての想定利用シーン】
  • 7. PostGISって?(2/2) ▌データ型  Geometry(投影座標系)、Geography(地理座標系) ▌ジオメトリ生成の例  geometry ST_MakePoint(float8 x, float8 y[, float8 z])  geometry ST_MakeLine(geometry point1, geometry point2) …など ▌空間関係演算の例  float8 ST_Distance(geometry g1, geometry g2)  float8 ST_Distance(geography gg1, geography gg2)  bool ST_DWithin(geometry g1, geometry g2, float8 distance)  float8 ST_Area(geometry g1)  bool ST_Contains(geometry g1, geometry g2)  bool ST_Crosses(geometry g1, geometry g2) …など 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能7
  • 8. Geometry型と空間関係演算の例 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能8 St_Distance(a,b) ジオメトリ間の距離 St_Crosses(a,b) ジオメトリの交差判定 St_Contains(a,b) ジオメトリの包含判定
  • 9. 高速化手法(1/3)- Bounding Box 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能9 ▌Bounding Boxとは  複雑な形状のポリゴンを包摂する最も小さな矩形領域  (x1,y1) - (x2,y2) で表現できるのでデータ量が少ない  PostgreSQL / PostGISが geometry 型を保存する時に自動的に生成される。 ▌Bounding Boxの効果  空間関係演算を行う前に、『明らかに接していない』ものを識別できる。 ➔ 重なりを含むジオメトリのみ判定を行う事で、計算リソースを節約。 明らかに接していない 共通部分を持つ可能性
  • 10. 高速化手法(2/3)- GiSTインデックス 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能10 ▌GiSTインデックスとは  GiST(Generalized Search Tree)は、ツリー構造を持つインデックスを一般化 したフレームワーク。  PostGISのGeometry型は、GiST上にR木を実装したもの ▌GiSTのR木でできること  包含(@演算子)や重なり(&&演算子)判定で、インデックスを用いた絞込み  特に多数のポリゴン×ポイントの重なり判定で計算量が増大しやすい ➔ 事前の絞り込みで計算量を抑え込む # 国土地理院の市町村形状データをインポート $ shp2pgsql N03-20_200101.shp | psql gistest gistest=# ¥d+ List of relations Schema | Name | Type | Owner | Size | --------+-------------+----------+--------+------------+ public | geo_japan | table | kaigai | 243 MB | gistest=# ¥di+ List of relations Schema | Name | Type | Owner | Table | Size | --------+--------------------+-------+--------+-----------+---------+ public | geo_japan_pkey | index | kaigai | geo_japan | 2616 kB | public | geo_japan_geom_idx | index | kaigai | geo_japan | 14 MB |
  • 11. 高速化手法(3/3)- CPU並列 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能11 ▌CPU並列とは  PostgreSQL v9.6の新機能で、テーブルのスキャン(+ 条件句の評価)を複数プロ セスで並列実行するもの。  SQL関数・演算子が副作用を伴わず、ある程度の絞り込みが期待できる場合。 ▌PostGISのCPU並列対応  PostGIS 3.0で対応。ほとんどの関数・演算子が “parallel safe” として定義 PostgreSQL v9.5以前 PostgreSQL v9.6以降 Leader Worker-1 Worker-2
  • 13. なぜGPUでSQLを高速化できるのか? 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能13 ▌GPUの特徴  ワンチップに数千演算コアを搭載する計算能力  1.0TB/sに迫るメモリバンド ➔ 「同じ演算を多量のデータに対して実行する」ために作られたプロセッサ (e.g 行列演算) ▌SQLワークロードの特性  「同じ処理を大量の行に対して実行する」 (例:WHERE句の評価、JOINやGROUP BY処理) SQL処理の中でも、全件スキャンを伴うようなワークロードに強い GPUに実装された数千コアの 実行ユニットが、個々の行を 並列に評価する。
  • 14. PG-StromにおけるPostGIS対応(Jul-2020現在) ▌ジオメトリ生成  geometry st_makepoint(float8,float8,...) 2点から Point ジオメトリを生成する ▌空間関係演算  float8 st_distance(geometry,geometry) 2つのジオメトリ間の距離を導出する  bool st_dwithin(geometry,geometry,float8) ジオメトリが、指定したジオメトリから 指定した距離内にある場合に真を返す。  bool st_contains(geometry,geometry) ジオメトリ1がジオメトリ2を完全に包含 する場合に真を返す。  bool st_crosses(geometry,geometry) 与えられたジオメトリが共通の内部の点を持ち、 かつそうでない点を持つ場合に真を返す。 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能14
  • 15. GPUでPostGIS関数を実行する(1/2) postgres=# ¥d _gistest Table "public._gistest" Column | Type | Collation | Nullable | Default --------+----------+-----------+----------+-------------------------------------- id | integer | | not null | nextval('_gistest_id_seq'::regclass) a | geometry | | | b | geometry | | | postgres=# explain verbose select * from _gistest where st_contains(a,b); QUERY PLAN ------------------------------------------------------------------------------------ Custom Scan (GpuScan) on public._gistest (cost=4251.50..4251.50 rows=1 width=196) Output: id, a, b GPU Filter: st_contains(_gistest.a, _gistest.b) GPU Preference: None Kernel Source: /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.4.gpu Kernel Binary: /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.5.ptx (6 rows) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能15
  • 16. GPUでPostGIS関数を実行する(2/2) $ less /var/lib/pgdata/pgsql_tmp/pgsql_tmp_strom_21028.4.gpu : #include "cuda_postgis.h" #include "cuda_gpuscan.h" DEVICE_FUNCTION(cl_bool) gpuscan_quals_eval(kern_context *kcxt, kern_data_store *kds, ItemPointerData *t_self, HeapTupleHeaderData *htup) { void *addr __attribute__((unused)); pg_geometry_t KVAR_2; pg_geometry_t KVAR_3; assert(htup != NULL); EXTRACT_HEAP_TUPLE_BEGIN(addr, kds, htup); EXTRACT_HEAP_TUPLE_NEXT(addr); pg_datum_ref(kcxt,KVAR_2,addr); // pg_geometry_t EXTRACT_HEAP_TUPLE_NEXT(addr); pg_datum_ref(kcxt,KVAR_3,addr); // pg_geometry_t EXTRACT_HEAP_TUPLE_END(); return EVAL(pgfn_st_contains(kcxt, KVAR_2, KVAR_3)); } : 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能16 列A、列Bから ジオメトリ型の データをロード ロードしたデータで GPU版 st_contains() 関数を 呼出し SQLのWHERE句を 評価するために 自動生成された関数
  • 17. 他にもサポートするPostGIS関数は?  float St_Area(geometry) ✓ ポリゴンの面積を返す。面積単位はSRIDに基づく。  geometry St_Centroid(geometry) ✓ ジオメトリの幾何学的重心を返す。  float St_Length(geometry) ✓ LineStringの二次元長を返す。  bool St_Overlaps(geometry, geometry) ✓ ジオメトリが共有空間を持つかどうかを判定する。  bool St_Touches(geometry, geometry) ✓ ジオメトリが外周で接触しているかどうかを判定する。  bool St_Within(geometry, geometry) ✓ ジオメトリAが完全にジオメトリBの内側にあるかどうかを判定する。 .... など。  その他、よく使う関数に関しては “Fast Path” ロジックの実装も ✓ 例えば、Polygon対PointのSt_Contains()など、汎用ロジック(St_Relate()関数)ではなく 専用の実装を設ける事で、高速に結果を返せるようになっている。 基本はユーザさんの要望ベースで順次機能拡張 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能17
  • 18. GiSTインデックスへの対応 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能18 ▌前提  ポリゴン定義の数は、ポイント(GPSデータ等)に比べると数が少ない。  GiST(R木)インデックスはBounding Boxだけを保持するので、ポリゴン定義データ に比べると、通常は圧倒的にコンパクトなサイズとなる。 ➔ GPUメモリに十分載せうるサイズである事が一般的 ▌GPUでGiST(R木)インデックスを参照できれば  数十万ポリゴン × 数億ポイントの突合といった規模のワークロードを、 一般的なWHERE句の評価と同程度の負荷で処理できる公算が高い。  現在、技術課題を検討中 ポリゴン×ポイントの突合を圧倒的に高速化する(予定) WIP GiST(R木)インデックス ポリゴン定義 点データを含む テーブル 数千スレッドが 並列に インデックスを 探索
  • 20. IoT/M2MデータのライフサイクルとPG-Stromの機能 時系列データ (数TB~) 前処理済みデータ リアルタイムデータ ETL・ 前処理 課題: 大容量データの保存・読出し 課題: 高頻度な更新と高速な解析処理の両立 Apache Arrow対応 (Arrow_Fdw) SSD-to-GPU Direct SQL BRIN-Index GPU Memory Store (Gstore_Fdw) RuntimeGPUCodeGeneration PostGIS/JSONdatasupport NEWNEW PG-Strom機能群 データ量:大 データ量:小 従来のスコープ 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能20
  • 21. 背景と課題 ▌GPUとホストメモリは“遠い”  通常、GPUはPCI-Eバスを介してホストシステムと接続する。  PCI-E Gen 3.0 x16レーンだと、片方向 16GB/s 「しかない」 行って帰ってのレイテンシは数十マイクロ秒単位。  DRAMの転送速度は140GB/sでレイテンシは100ns程度。 もしL1/L2に載っていれば数ns単位でアクセス可能 出展:https://gist.github.com/eshelman/343a1c46cb3fba142c1afdcdeec17646 ▌高い更新頻度  もし100万デバイスが10秒に一度、 現在位置を更新するなら? ➔ 単純 UPDATE を毎秒10万回実行。 ➔ 1.0sec / 10万 = 10us ▌リアルタイム性に対する要請  利用者が検索、解析したいのは、 「その時点での最新の状態」 ➔ 後でまとめてバッチ、では通用しない。 GPU Device RAM RAMCPU 900GB/s 140GB/s 16GB/s PCI-E Gen3.0 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能21
  • 22. Gstore_Fdwアーキテクチャ REDOログを利用してGPUメモリ側を非同期に更新する。 検索クエリの実行前に更新を適用すれば辻褄は合う! Host Memory Store REDO Log Buffer Base File Redo File Host Memory Storage GPU Device Memory Store PostgreSQL Backend (OLTP系) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能22 PostgreSQL Backend (OLTP系) PostgreSQL Backend (OLTP系) INSERT UPDATE DELETE ログ追記 更新系処理では 一切GPUにタッチしない
  • 23. Gstore_Fdwアーキテクチャ REDOログを利用してGPUメモリ側を非同期に更新する。 検索クエリの実行前に更新を適用すれば辻褄は合う! Host Memory Store REDO Log Buffer Base File Redo File Host Memory Storage GPU Device Memory Store PostgreSQL BG-Worker (GPUバッファ管理) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能23 ①未適用分のログ転送 GPU Kernel to apply REDO Log 数千スレッドで動作 ほぼ一瞬で適用できる ②GPUカーネルの起動
  • 24. Gstore_Fdwアーキテクチャ REDOログを利用してGPUメモリ側を非同期に更新する。 検索クエリの実行前に更新を適用すれば辻褄は合う! Host Memory Store REDO Log Buffer Base File Redo File Host Memory Storage GPU Device Memory Store PostgreSQL Backend (解析系SQL) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能24 ①未適用分のログ転送 GPU Kernel to apply REDO Log SQL処理の前に REDO ログを 適用すれば、辻褄はあう (一貫性が保たれる) GPU Kernel to execute SQL ②GPUカーネルの起動
  • 25. Gstore_Fdw外部テーブルの定義 CREATE FOREIGN TABLE ft ( id int, x float, y float, z text ) server gstore_fdw options (gpu_device_id '1', base_file '/opt/pgdata-dev/ft.base', redo_log_file '/opt/pmem-dev/ft.redo’, max_num_rows '4000000', primary_key 'id'); (補足)  base_fileはNVMEストレージ上に配置するのが望ましい。 ✓ mmap(2)してバイト単位のランダムアクセスが多発するため、 PMEMの微妙なアクセスの遅さが性能差として見えてしまう。  redo_log_fileはPMEM上に配置するのが望ましい。 ✓ トランザクションのコミット時にREDOログを永続化する必要があるため。 追記書き出しのみだが、細かい単位でCPUキャッシュをフラッシュする。 (逆にブロックデバイスのようなfsyncは必要ないが) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能25
  • 26. 更新処理のパフォーマンス(1/2) --- 200万行を投入 INSERT INTO ft (SELECT x, 100*random(), 100*random(), md5(x::text) FROM generate_series(1,2000000) x); --- 以下のクエリを pgbench で投入 --- (クライアント数:20を想定) UPDATE ft SET x = 100*random(), y = 100*random() WHERE id = (SELECT 20*(100000.0*random())::int + :client_id); --- 実行計画 EXPLAIN ....; QUERY PLAN ------------------------------------------------------------------- Update on ft (cost=0.02..100.03 rows=10000 width=58) InitPlan 1 (returns $0) -> Result (cost=0.00..0.02 rows=1 width=4) -> Foreign Scan on ft (cost=0.00..100.01 rows=10000 width=58) Filter: (id = $0) Index Cond: id = $0 (6 rows) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能26
  • 27. 更新処理のパフォーマンス(2/2) $ pgbench -p 6543 postgres -n -f test.sql -c 20 -j 10 -T 10 transaction type: test.sql scaling factor: 1 query mode: simple number of clients: 20 number of threads: 10 duration: 10 s number of transactions actually processed: 1236401 latency average = 0.162 ms tps = 123631.393482 (including connections establishing) tps = 123674.819689 (excluding connections establishing) (補足)  まだ排他ロックで実装している箇所があり、クライアント数が20を越えた辺りで サチり始める。 ➔ Row-Idの払い出しや、REDOログの書き込み位置などロックレス化できるハズ。  PostgreSQLの通常テーブル(on NVME-SSD): 20クライアント 65k TPS、80クライアント160k TPS程度  通常テーブルと外部テーブルの内部ロジックの違いに起因する差異は未検証 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能27
  • 28. 検索処理のパフォーマンス(1/2) --- GpuScan (GPU版PostGIS) + Gstore_Fdw =# SELECT count(*) FROM ft WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90,¥ 10 90,10 10))’, st_makepoint(x,y)); count ------- 94440 (1 row) Time: 75.466 ms --- 通常版PostGIS + PostgreSQLテーブル =# SET pg_strom.enabled = off; SET =# SELECT count(*) FROM tt WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90,¥ 10 90,10 10))', st_makepoint(x,y)); count ------- 94440 (1 row) Time: 332.300 ms 200万個のPointから、 指定領域内の数をカウント 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能28
  • 29. 検索処理のパフォーマンス(2/2) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能29 (100,100) (0,0) (90,90) (90,10) (90,12)(12,12) (12,88) (90,88) (10,90) (10,10) この領域内に含まれる 点(Point)を抽出した テーブル ft および tt には (0,0)~(100,100)の範囲内に ランダムに 200万個の点を格納
  • 30. 検索+更新処理のパフォーマンス --- 裏で更新処理を実行 $ pgbench -p 6543 postgres -n -f test.sql -c 15 -T 60 : duration: 60 s number of transactions actually processed: 9188638 latency average = 0.098 ms tps = 153143.595549 (including connections establishing) tps = 153148.363454 (excluding connections establishing) --- ヘビーな更新処理中に GPU での集計クエリを実行 =# SELECT count(*) FROM ft WHERE st_contains('polygon ((10 10,90 10,90 12,12 12,12 88,90 88,90 90, ¥ 10 90,10 10))', st_makepoint(x,y)); 2020-07-26 17:26:12.283 JST [261916] LOG: gstore_fdw: Log applied (nitems=635787, length=54396576, pos 750323824 => 787623328) count ------- 94629 (1 row) Time: 136.456 ms ヘビーな更新処理中であっても、若干の処理速度低下で応答 集計処理の開始時点で、GPU側ストアを 最新の状態にリフレッシュするため、 未適用のREDOログを 63.5 万件適用している 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能30
  • 31. 実行環境 従来と異なり、NVMEは必須ではないのでH/W要件が緩い。 WIP モデル名 p3.2xlarge p3.8xlarge p3.16xlarge NC6s v NC12s v3 NC24s v3 vCPU 8 core 32 core 64 core 6 core 12 core 24 core RAM 61GB 244GB 488GB 112 GB 224 GB 448 GB GPU 1 x Tesla V100 (16GB; 5120C) 4 x Tesla V100 (16GB; 5120C) 8 x Tesla V100 (16GB; 5120C) 1 x Tesla V100 (16GB; 5120C) 2 x Tesla V100 (16GB; 5120C) 4 x Tesla V100 (16GB; 5120C) オンデマンド 料金 4.324USD/h 16.906USD/h 32.682USD/h ¥299.22/h ¥782.91/h ¥711.74/h ※ オンデマンド料金は、各社東京リージョンの本体のみ単価(2020/7/26現在)で記載。 今後のマイルストーン  マシンイメージの提供(2020-4Q頃?)  AWS Marketplace / Azure Marketplace への登録  ドキュメント、ガイダンスの整備 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能31
  • 32. PG-Strom v3.0に向けて 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能32 ▌PostGIS関連  サポート対象 PostGIS 関数・演算子の拡充  GiSTインデックスの対応 ▌Gstore_Fdw関連  マルチGPU対応  バックアップ・レプリケーション機能の実装  スケーラビリティ改善(ロックレス化)  可変長データの持ち方改良 ▌その他  AWS/Azure向けの動作検証、マシンイメージ作成  ドキュメント作成 2020年内の正式リリースに向けて開発・テスト実施中
  • 33.
  • 34. トランザクションの対応  SAVEPOINT, ROLLBACK TO SAVEPOINT も使用可能  トランザクション分離レベルは Read-Committed のみ  他の GPU-DB では(INSERT/UPDATE/DELETE対応していても)非対応 ✓ OmniSCI, Kinetica, SQreamDB, Brytlyt のドキュメントを調査 GPU-DBでは珍しく、トランザクションのRollbackにも対応 =# BEGIN; BEGIN; =# INSERT INTO ft VALUES (9999999, random(), random(), 'this is test record'); INSERT 0 1 postgres=# SELECT * FROM ft WHERE id > 9000000; id | x | y | z ---------+--------------------+--------------------+--------------------- 9999999 | 0.4181428498515025 | 0.5861937164356661 | this is test record (1 row) postgres=# ABORT; ROLLBACK postgres=# SELECT * FROM ft WHERE id > 9000000; id | x | y | z ----+---+---+--- (0 rows) 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能34
  • 35. バックアップ&レプリケーション REDO Log Buffer Redo File GSTORE_TX_LOG__INSERT GSTORE_TX_LOG__DELETE GSTORE_TX_LOG__COMMIT GSTORE_TX_LOG__INSERT GSTORE_TX_LOG__COMMIT PostgreSQL Backend PostgreSQL Backend 追記 追記 WIP 専用SQL関数 pgstrom.gstore_fdw_replication() Backup Tool (開発中) Backup File Master Server Base File Replication Client (SQL関数; WIP) Online read-only replica REDOログの転送 爆速Webinar#01 - 地理情報を爆速で処理する PG-Strom の新機能35