---
title: PG-Stromの性能評価レポート～ Star Schema Benchmark を例に～
tags: 
author: [sakaik](https://convert.docswell.com/user/sakaik)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJNGGKKD78.jpg?width=480
description: 2024年3月15日に 東京・大崎で開催した『 「GPUを活用したビッグデータ分析基盤を構築しよう」PG-Strom v5リリース記念』イベントでの 表記発表資料です。  イベントURL: https://bakusokudb.connpass.com/event/311268/
published: March 18, 24
canonical: https://convert.docswell.com/s/sakaik/KYWXGD-pgstrom_ssb_report_2024
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJNGGKKD78.jpg)

「GPUを活用したビッグデータ分析基盤を構築しよう」
PG-Strom v5リリース記念イベント
PG-Stromの性能評価レポート
～ Star Schema Benchmark を例に～
2024/03/15
有限会社アートライ
坂井 恵


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YE9WWVV8E3.jpg)

3
PG-Strom(イメージ)


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GE8NNPPZ7D.jpg)

自己紹介
• 坂井 恵（さかいけい）
• 有限会社アートライ
• 日本仮想化技術株式会社「爆速DB
Powered by PG-Strom
」チームに参画中
爆速DBのアイキャッチ欲しいよね
「データベース」で「爆速」なイメー
ジで、そうそう「PostgreSQL」のエク
ステンションなのでぞうさんも！
by Sak-AI
「爆速DBイメージキャラクタ－(非公認)」


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LELPP1117R.jpg)

この時間のお話
PG-Strom基礎知識
スタースキーマベンチマーク(ssb)
ssbの理解
PG-Strom使用時のssb計測結果紹介


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JM44WW57W.jpg)

PG-Strom基礎知識(キーポイント)
概要は、この前のセッションで宮原さんが
詳細は、この後のセッションで海外さんが
説明してくれるので、私からはざっくりと説明すると：
• 数千コアを持つGPUの能力を活用した並列処理による高速化
• 内部のデータ転送バスを効率よく活用しての高速化
• Apache Arrowファイルを使用可能
• 地理空間情報(GIS)データの検索も高速


# Page. 6

![Page Image](https://bcdn.docswell.com/page/PJRWWYYZ79.jpg)

PG-Stromを使ってほしい人（私見）
• 大量のデータを持っていて、集計処理等をしたい人
• データ件数 数億件～
• データサイズ GBの後半からTB級～
• 特に 統計家 の人 にマッチしていると考えています


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PEXPPGG17X.jpg)

ベンチマーク実施の紹介


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3EKDD44MJD.jpg)

Star Schema Benchmark 概要
• OLAPでのDBMS性能測定ベンチマーク(DWH)
• 売上データを中心として、周辺テーブルと結合するクエリを実施
• 数億件単位からのデータ量で測定実施される事が多い印象(私見)


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L73RRLL2J5.jpg)

Star Schema Benchmarkのテーブル
• lineorderテーブルを中心としたスタースキーマ型のテーブル群
• 5つのテーブルからなる


# Page. 10

![Page Image](https://bcdn.docswell.com/page/87DYYNN67G.jpg)

Star Schema Benchmarkのテーブル
customer
--------------------------c_custkey
| numeric
c_name
| character varying(25)
c_address
| character varying(25)
c_city
| character(10)
c_nation
| character(15)
c_region
| character(12)
c_phone
| character(15)
c_mktsegment | character(10)
part
--------------------------p_partkey
| integer
p_name
| character varying(22)
p_mfgr
| character(6)
p_category | character(7)
p_brand1
| character(9)
p_color
| character varying(11)
p_type
| character varying(25)
p_size
| numeric
p_container | character(10)
lineorder
--------------------------lo_orderkey
| numeric
lo_linenumber
| integer
lo_custkey
| numeric
lo_partkey
| integer
lo_suppkey
| numeric
lo_orderdate
| integer
lo_orderpriority
| character(15)
lo_shippriority
| character(1)
lo_quantity
| numeric
lo_extendedprice
| numeric
lo_ordertotalprice | numeric
lo_discount
| numeric
lo_revenue
| numeric
lo_supplycost
| numeric
lo_tax
| numeric
lo_commit_date
| character(8)
lo_shipmode
| character(10)
supplier
--------------------------s_suppkey | numeric
s_name
| character(25)
s_address | character varying(25)
s_city
| character(10)
s_nation | character(15)
s_region | character(12)
s_phone
| character(15)
date1
--------------------------d_datekey
| integer
d_date
| character(18)
d_dayofweek
| character(12)
d_month
| character(9)
d_year
| integer
d_yearmonthnum
| numeric
d_yearmonth
| character(7)
d_daynuminweek
| numeric
d_daynuminmonth
| numeric
d_daynuminyear
| numeric
d_monthnuminyear
| numeric
d_weeknuminyear
| numeric
d_sellingseason
| character(12)
d_lastdayinweekfl | character(1)
d_lastdayinmonthfl | character(1)
d_holidayfl
| character(1)
d_weekdayfl
| character(1)


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJP665NZE8.jpg)

Star Schema Benchmarkのクエリ
• Q1～Q4 の4パート、計13個のクエリ
• 各パートの特徴(一部)
• Q1ではグルーピングなしで2テーブル結合での抽出
• Q2からQ4は4~5テーブル結合で、様々なグルーピング


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2EV33PKM7Q.jpg)

Star Schema Benchmark
のクエリ(参考)


# Page. 13

![Page Image](https://bcdn.docswell.com/page/57G33PQXJL.jpg)

データ件数
(参考)ssbデータ生成時の与パラメタと件数の対応
TABLE
s10
s20
300,000
600,000
1,500,000
2,556
2,556
part
800,000
supplier
100,000
customer
date1
lineorder
s50
s100
s200
s400
3,000,000
6,000,000
12,000,000
2,556
2,556
2,556
2,556
1,000,000
1,200,000
1,400,000
1,600,000
1,800,000
200,000
500,000
1,000,000
2,000,000
4,000,000
59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434
2,400,012,063
lineorder生成時間
約30分
約65分
lineorderサイズ(¥d+)
175GB
350GB


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4EQ552K5JP.jpg)

データ件数
(参考)ssbデータ生成時の与パラメタと件数の対応
TABLE
s10
s20
300,000
600,000
1,500,000
2,556
2,556
part
800,000
supplier
100,000
customer
date1
lineorder
s50
s100
s200
s400
3,000,000
6,000,000
12,000,000
2,556
2,556
2,556
2,556
1,000,000
1,200,000
1,400,000
1,600,000
1,800,000
200,000
500,000
1,000,000
2,000,000
4,000,000
59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434
2,400,012,063


# Page. 15

![Page Image](https://bcdn.docswell.com/page/KJ499LPV71.jpg)

Star Schema Benchmark 概要まとめ
• lineorderテーブルを中心とする 5つのテーブル
• Q1_1 から Q4_3 までの13個のクエリ
• データ生成時のパラメタで件数を調整できるが、
今回は、lineorderが24億件のデータセットで実施


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE1KKL94JG.jpg)

今回の
Star Schema Benchmark実施条件
• CPU: AMD EPYC 7443 24-Core Processor
(24 cores/48 Processsors)
• OS : Red Hat Enterprise Linux release 8.8 (Ootpa)
• Memory : 131,330,728 kB
• GPU : NVIDIA A100 80GB PCIe (6,912 Cuda cores)
• CUDA Version : 12.3
• PostgreSQL Version : 16.1


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GEWDDVQZJ2.jpg)

Star Schema Benchmark実施結果 (s=400)
PG-Strom async=18
(sec)
ssbm処理時間 s=400 CPU(青) vs GPU(橙) (async=18)
90
x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31
x3.25 x3.26 x3.22
x4.62
x3.49
Q4_1
Q4_2
x3.71
80
70
60
50
40
30
20
10
0
Q1_1
Q1_2
Q1_3
Q2_1
Q2_2
Q2_3
Q3_1
Q3_2
Q3_3
Q3_4
Q4_3


# Page. 18

![Page Image](https://bcdn.docswell.com/page/47ZGG4WLE3.jpg)

Star Schema Benchmark
• 前のページの結果はPG-Stromのpg_strom.max_async_task パラ
メタの値を &quot;18&quot; に設定して実施したもの（これが最適値だった）
• pg_strom.max_async_task パラメタ値により速度は変化(環境に依存)
• 例として pg_strom.max_async_task = 12 で実施した結果を次
ページに示す


# Page. 19

![Page Image](https://bcdn.docswell.com/page/YJ6YY3GM7V.jpg)

Star Schema Benchmark実施結果 (s=400)
PG-Strom async=12
(sec)
ssbm s=400
90
x2.39 x2.40 x2.40 x2.18
x1.93
x2.15 x2.15
x2.26
x2.38 x2.38 x3.27
x2.86
x2.89
80
70
60
50
40
30
20
10
0
Q1_1
Q1_2
Q1_3
Q2_1
Q2_2
Q2_3
Q3_1
CPU
GPU
avg.
avg.
Q3_2
Q3_3
Q3_4
Q4_1
Q4_2
Q4_3


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GJ5GGLVQJ4.jpg)

再掲
Star Schema Benchmark実施結果 (s=400)
(sec)
PG-Strom async=18
90
ssbm s=400 CPU vs GPU(async=18)
x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31
x3.25 x3.26 x3.22
x4.62
x3.49
x3.71
80
70
60
50
40
30
20
10
0
Q1_1
Q1_2
Q1_3
Q2_1
Q2_2
Q2_3
Q3_1
Q3_2
Q3_3
Q3_4
Q4_1
Q4_2
Q4_3


# Page. 21

![Page Image](https://bcdn.docswell.com/page/9E2YYL3WER.jpg)

(参考) s10～s400 results (処理時間) (unit. ms)
ssbm on Shachi s=10
4,000
3,000
ssbm on Shachi s=20
5,000
12,000
4,000
10,000
8,000
3,000
2,000
6,000
2,000
1,000
4,000
1,000
0
2,000
0
CPU
GPU
avg.
avg.
0
ssbm on Shachi s=100
20,000
15,000
10,000
5,000
0
ssbm on Shachi s=50
CPU
GPU
CPU
GPU
avg.
avg.
avg.
avg.
ssbm on Shachi s=200
ssbm on Shachi s=400
50,000
100,000
40,000
80,000
30,000
60,000
20,000
40,000
10,000
20,000
0
0
CPU
GPU
CPU
GPU
CPU
GPU
avg.
avg.
avg.
avg.
avg.
avg.


# Page. 22

![Page Image](https://bcdn.docswell.com/page/D7YGGQ197M.jpg)

件数増大に伴うCPU/GPU処理時間変化
s=10での実施結果を 1.0 とした場合の処理時間の比率
データサイズごとの処理時間比（CPU）
(sec)
(横軸：sパラメタ値）
データサイズごとの処理時間比（GPU）
(sec)
70
45
40
60
35
50
30
40
25
30
20
15
20
10
10
0
5
0
50
100
150
200
250
300
350
Q1_1
Q1_2
Q1_3
Q2_1
Q2_2
Q2_3
Q3_2
Q3_3
Q3_4
Q4_1
Q4_2
Q4_3
400
Q3_1
450
0
0
50
100
150
200
250
300
350
Q1_1
Q1_2
Q1_3
Q2_1
Q2_2
Q2_3
Q3_2
Q3_3
Q3_4
Q4_1
Q4_2
Q4_3
400
Q3_1
→ ssb計測に於いて、PG-Strom(GPU)では、件数の増大に伴う処理
時間がリニアとなる
450


# Page. 23

![Page Image](https://bcdn.docswell.com/page/VENGGK2DJ8.jpg)

(付録)PG-Stromパッケージを使用したssb実施方法
• PG-Stromのソースコードを取得
• https://github.com/heterodb/pg-strom
• pg-strom/test/ssbm に移動し、データ生成ツールを make
• → dbgen-ssbm ツールの実行ファイルが生成される
• PostgreSQL上に ssb DBとテーブル群を作成
• $ createdb -Upostgres ssb --tablespace=XXXX
• $ psql -Upostgres ssb -f ./ssbm-ddl.sql
• データを生成
time
time
time
time
time
echo
echo
echo
echo
echo
&quot;¥¥copy
&quot;¥¥copy
&quot;¥¥copy
&quot;¥¥copy
&quot;¥¥copy
customer
date1
part
supplier
lineorder
• ベンチマーク実行
FROM
FROM
FROM
FROM
FROM
PROGRAM
PROGRAM
PROGRAM
PROGRAM
PROGRAM
&#039;./dbgen-ssbm
&#039;./dbgen-ssbm
&#039;./dbgen-ssbm
&#039;./dbgen-ssbm
&#039;./dbgen-ssbm
-Tc
-Td
-Tp
-Ts
-Tl
-X
-X
-X
-X
-X
-s
-s
-s
-s
-s
100&#039;
100&#039;
100&#039;
100&#039;
100&#039;
DELIMITER
DELIMITER
DELIMITER
DELIMITER
DELIMITER
&#039;|&#039;;&quot;
&#039;|&#039;;&quot;
&#039;|&#039;;&quot;
&#039;|&#039;;&quot;
&#039;|&#039;;&quot;
|
|
|
|
|
psql
psql
psql
psql
psql
-Upostgres
-Upostgres
-Upostgres
-Upostgres
-Upostgres
ssb
ssb
ssb
ssb
ssb
• $ ./run-ssbm.sh ssb
またはユーザ名を指定する場合は、
• $ ./run-ssbm.sh &quot;-Upostgres ssb&quot;
• 結果ログ確認
• ~/ssbm-logs/ に出力されたログを確認する
• explain の結果とクエリ実施結果が出力されます
ログファイル例:
log_strom_*_20240315a.txt
log_strom_*_20240315b.txt
log_strom_*_20240315c.txt
log_pgsql_*_20240315a.txt
log_pgsql_*_20240315b.txt
log_pgsql_*_20240315c.txt


# Page. 24

![Page Image](https://bcdn.docswell.com/page/Y79WWV1873.jpg)

今日のおはなし（まとめ）
• PG-Stromの概要概要を紹介しました。GPU＋内部転送速度
• ベンチマーク手法のひとつである Star Schema Benchmark(ssb)
がどのようなものかを紹介しました
• PG-Stromを用いたssbベンチマーク結果を紹介しました
• PG-Stromを用いたssbベンチマーク実施方法を紹介しました


# Page. 25

![Page Image](https://bcdn.docswell.com/page/G78NNP4ZJD.jpg)

お問い合わせ先
メールにて
sales@VirtualTech.jp
評価したい等々、
お気軽にお問い合わせください


