PG-Strom v5.0

ずいぶんご無沙汰のブログ記事となりました。今回は、設計を一新して速く、頑強になった PG-Strom v5.0 をご紹介します。 なぜ再設計が必要だったのか? 前バージョンの PG-Strom v3.x シリーズの基本的な設計は、2018年のPG-Strom v2.0の頃から大きく変わっ…

Fluentd向けApache Arrowプラグインについて

構想は半年ほど前?ここ一ヶ月ほど集中して開発に取り組んでいた、Fluentd向けApache Arrowプラグインがようやく動くようになったので、今回はこちらのモジュールについてご紹介します。そもそもPG-Stromは、IoT/M2M領域で大量に発生するデータを高速に処理…

半精度浮動小数点型(Float2)について

このエントリはPostgreSQL Advent Calendar 2021に参加しています。実は、現在開発中の別の機能について書きたかったのですが、間に合いませんでした。反省。 そこで、急遽ネタを用意したのが、反省、はんせい、はんせいど…ふどうしょうすうてん(ピコーン!!と…

PCI-E 4.0がやってきた!

突然ですが、サーバを新調しました。EPYC2搭載サーバ+PCIe4.0対応SSDx4キター。 pic.twitter.com/SB7UxdR6pP— 海外 浩平|KaiGai Kohei (@kkaigai) 2021年10月15日 昨年、先行して NVIDIA A100 を調達していたのですが、手持ちのサーバ自体はSkylake-SpでPCI…

HyperLogLogを使ったカーディナリティの推測(補足)

少し、こちらのフォローアップ記事となります。kaigai.hatenablog.comブログ公開後、何件かコメントをいただきました。PG-StromでCOUNT(distinct KEY) にHyperLogLogを使うお話。専用の関数を使うのかと思ったら、パラメータのon/offでCOUNT自体の計算方法(…

HyperLogLogを使ったカーディナリティの推測

高校生の頃までは滋賀県に住んでいた事もあり、夜、勉強の合間に、KBS京都で放送されていた『日髙のり子のはいぱぁナイト』を聞いており、日々ネタを考えては、番組へハガキを投稿する常連だった*1のですが(←勉強はどうした)、今回は、PG-Stromに実装した…

Apache Arrowの統計情報を使ったログ検索の爆速化

PostgreSQLにはBRINインデックス(Block Range Index)という機能があり、ログデータに付属するタイムスタンプ値など、近しい値を持ったデータが物理的に近接するという特徴を持っているとき、検索範囲を効率的に絞り込むために使用する事ができる。この機能…

GPUDirect SQL on NFS-over-RDMAを試す

タイトルでほぼほぼ出オチですが、先日、NVIDIAからCUDA Toolkit 11.4と共にリリースされた新機能GPUDirect Storage 1.0のドキュメントを読んでいると、面白い記述を見つけた。曰く、MOFEDドライバ5.3以降と、Mellanox Connect-X4/5の組み合わせで、NFS-over…

Pg2Arrowに『ぐるぐるSQL』モードをつけてみた。

先月、ツイッタランドに『ぐるぐるSQL』なるワードが降臨した。qiita.comこれは要するに、あるクエリの結果を取得しつつ、結果行から読み出した値をキーとして別のクエリを繰り返し実行するタイプのクエリを揶揄したもので、まぁ、通信遅延やパース処理、DB…

GPUメモリストア(Gstore_Fdw)

この記事は「PostgreSQL Advent Calendar 2020」の 16日目です。GPU版PostGISの他に、今年のPG-Stromの機能強化のうち比較的大きめのものについてもご紹介したいと思います。 GPUメモリストア(Gstore_Fdw)とは GPUデバイスメモリ上に予め確保した領域にデ…

GPU版PostGISとGiSTインデックス対応

今年も早いもので気がついたら Advent Calendar の季節ですが、今回のこちらの記事は RDBMS-GIS(MySQL,PostgreSQLなど) Advent Calendar 2020 - Qiita の 12/5(土) のものです。2020年はこの辺からスタートして、かなり性能的に面白いところまで持ってくるこ…

mysql2arrowでMySQLからデータを抜く

以前からPG-Stromのパッケージにpg2arrowというユーティリティを同梱しており、これを使うと、PostgreSQLに投げたクエリからApache Arrow形式のファイルを作成する事ができる。kaigai.hatenablog.com qiita.com昨年、当初のバージョンを作った時から、内部的…

Writable Arrow_Fdwと、PL/CUDAがお払い箱になる話

昨年ラストのブログ記事は、pg2arrowに--appendモードを付けてApache Arrowファイルへの追記を行うというトピックだった。kaigai.hatenablog.com実は内部的には、PG-StromのArrow_Fdwとpg2arrowのコードは大半を共有していて*1、入り口がスタンドアロンのlib…

Dive into Apache Arrow(その4)- pg2arrow で追記モード

先日、Apache Arrow 東京ミートアップ 2019というイベントに参加させていただいた。発表時の様子(photo by 畔勝さん)発表自体は、SSD-to-GPU Direct SQLからArrow_Fdw、4GPU+16SSDによる最近のベンチマークの紹介などで、目新しいものというよりは総集編で…

CitusDB + PG-StromでScale-up+outする。

PostgreSQL Advent Calendar 2019の14日目です。PG-Stromの開発をやってると、しばしば聞かれるのが『マルチノードの並列処理って対応してるんですか?』という質問。まぁ、『対応しておりませんし、対応する予定もございません』という回答になるんですが、…

CUDA10.2 の Virtual Memory Management 機能を試してみる

11月21日にリリースされた CUDA 10.2 の Release Note を読んでみると、さらっと『Added support for CUDA Virtual Memory Management APIs.』という一文が。以前から、ManagedなGPUデバイスメモリをマルチプロセスで共有できるようにしてほしいと、機能リク…

Billion rows processed per second at a single-node PostgreSQL

I have worked on benchmarking of PG-Strom at a large hardware configuration for a couple of months. Due to the server models we had, our benchmark results had been usually measured at a small 1U rack server with 1CPU, 1GPU and 3-4 NVME-SSD…

秒速で10億レコードを処理する話

これまでのPG-Stromの性能測定といえば、自社保有機材の関係もあり、基本的には1Uラックサーバに1CPU、1GPU、3~4台のNVME-SSDを載せた構成のハードウェアが中心だった。*1 ただソフトウェア的にはマルチGPUやNVME-SSDのストライピングに対応しており、能力…

Asymmetric Partition-wise JOIN

久々に PostgreSQL 本体機能へのパッチを投げたので、それの解説をしてみる。PostgreSQL: Re: Asymmetric partition-wise JOIN 背景:Partition-wise JOIN PostgreSQLのパーティションを使ったときに、全く同一のパーティションの切り方をして、かつパーティ…

技術負債を返した話(Pre-built GPU Binary対応)

最もプリミティブなPG-Stromの処理は、ユーザが入力したSQLを元にCUDA CのGPUプログラムを自動生成し、これを実行時コンパイル。ここで生成されたGPUバイナリを用いて、ストレージから読み出したデータをGPUで並列処理するという一連の流れである。 後にJOIN…

SSDtoGPU Direct SQL on Columnar-store (Apache Arrow)

I have recently worked on development of FDW for Apache Arrow files; including SSDtoGPU Direct SQL support of PG-Strom. Apache Arrow is a column-oriented data format designed for application independent data exchange, supported by not a sm…

Dive into Apache Arrow(その3)- SSD-to-GPU Direct SQL対応

ここ最近取り組んでいた Arrow_Fdw 機能がようやく動くようになったので、性能ベンチマークを行ってみた。 今回のエントリでは順を追って説明する事にしてみたい。 Arrow_Fdwとは PostgreSQLにはFDW (Foreign Data Wrapper) という機能があり、PostgreSQL管…

Dive into Apache Arrow(その2)- pg2arrow

前回のエントリで Apache Arrow のフォーマットについて調べていたが、これのゴールは、外部テーブル(Foreign Table)を介してApache Arrowファイルを読み出し、高速に集計・解析処理を実行する事にある。 特にPG-Stromの場合はSSD-to-GPU Direct SQLという…

Dive into Apache Arrow(その1)

Arrow_Fdwを作るモチベーション 昨年、かなり頑張ってマルチGPUや拡張I/Oボックスを使用してシングルノードのクエリ処理性能10GB/sを達成できた。ただ一方で、PG-StromがPostgreSQLのデータ構造をそのまま使えるという事は、トランザクショナルに蓄積された…

PL/CUDAを使ってロジスティック回帰分析を実装してみた

PostgreSQL Advent Calendar 2018の6日目です。PG-Stromはアナリティクス向けにPL/CUDAというユーザ定義SQL関数を実装する機能を持っており、SQL処理の中で計算ヘビーな部分をCUDA Cで記述したGPUプログラムで実行させるという事ができる。 SQL関数としてPL/…

PGconf.EU 2018参加レポート

10/23~26にかけて、ポルトガル・リスボンで開催されたPGconf.EU2018へ参加してきました。 リスボンへはドイツ駐在中の2013年に一度旅行で訪れた事があり、個人的にも懐かしい、5年ぶりの訪問となります。PGconf.EUとは、PostgreSQLの欧州ユーザコミュニティ…

スキャン速度10GB/sへの挑戦~その④ 完結編~

今回のエントリは、ここ1年ほど取り組んでいた PG-Strom による大量データのスキャン・集計処理性能改善の取り組みが、当面の目標であったシングルノード10GB/sを達成したという完結編です。(長かった) 要素技術:SSD-to-GPUダイレクトSQL 先ず、PG-Strom…

PostgreSQLとcupyを繋ぐ~機械学習基盤としてのPG-Stromその①~

世間の機械学習屋さんは、機械学習・統計解析のライブラリにデータを食わせる時に、どうやってデータを入力しているのだろうか? 話を聞くに、データを一度CSV形式に落とし込んで、それをPythonスクリプトで読み込むというパターンが多いようではある。ただ…

時系列データ/BRINインデックス対応

PG-StromにBRINインデックス対応機能を実装してみた。まずは、以下のEXPLAIN ANALYZEの実行結果をご覧いただきたい。 条件句で参照しているymd列は日付型(date)で、テーブルにデータを挿入する際には意図的に日付順にINSERTを行っている。 postgres=# EXPL…

Partition-wise GpuJoin/GpuPreAgg

PostgreSQL v10以降ではテーブルパーティショニングの機能が入っており、値の範囲、または値のリストによってテーブルをいくつかのパーティションに分割する事が可能となっている。遅まきながら、PG-Stromにパーティションを意識した実行計画を作成するよう…