SlideShare a Scribd company logo
8
Most read
9
Most read
13
Most read
© 2023 NTT DATA Corporation 1
第39回 PostgreSQLアンカンファレンス@オンライン
MesonでPostgreSQLをビルドしてみよう!
2023年2月20日
株式会社NTTデータ 藤井 雅雄
© 2023 NTT DATA Corporation 2
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
fujii_masao
MasaoFujii
© 2023 NTT DATA Corporation 3
本講演について
講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
今日紹介するPostgreSQL16に関する内容は、
正式リリースまでの間に変更となる可能性があることにご注意ください!!
講演資料に掲載の検証結果は、ノートPC上の簡易計測で取得したものです。
環境や条件などによっては、異なる検証結果になる可能性があるためご了承ください。
© 2023 NTT DATA Corporation 4
MesonでPostgreSQLを
ビルドしてみよう!
© 2023 NTT DATA Corporation 5
2022年9月のビルド関連ファイルへのコミット
$ git log --since 2022-09-01 --until 2022-09-30 --pretty=format:%s
configure src/tools/msvc/Solution.pm configure.ac src/include/pg_config.h.in src/include/port.h
Restore pg_pread and friends.
meson: Add initial version of meson based build system
Add definition pg_attribute_aligned() for MSVC
Harmonize more parameter names in bulk.
Remove DLLTOOL, DLLWRAP from configure / Makefile.global.in
aix: xlc: Use -Wl,-b,expfull for old compiler versions
Clean up minor inconsistencies in pg_attribute_printf() usage.
Use SIGNAL_ARGS consistently to declare signal handlers.
Bump minimum Perl version to 5.14
configure: Expand -fvisibility checks to more compilers, test for -qvisibility
Bump minimum version of Flex to 2.5.35
Bump minimum version of Bison to 2.3
Mesonベースのビルドシステムをv16からサポート。
以降、ソースツリー内で成熟させていく方針
https://wiki.postgresql.org/wiki/Meson
https://www.postgresql.org/docs/devel/install-meson.html
既存ビルドシステムの課題への対応
• Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている
• 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる
• MSVCビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリ
アルに実行される
前回PostgreSQLアンカンファレンス
資料からの再掲(*1)
(*1) PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
https://www.slideshare.net/nttdata-tech/postgresql-development-community-activities-2022-pgunconf38-nttdata
© 2023 NTT DATA Corporation 6
PostgreSQLバージョン16からMesonを使ったビルドシステムをサポート予定
既にPostgreSQLバージョン16開発版(現在のmasterブランチ)はMesonでビルド可能
MesonによるPostgreSQLのビルド方法を説明するPostgreSQLドキュメント内のページ
https://www.postgresql.org/docs/devel/install-meson.html
Mesonによるビルドシステムの各種情報を整理しているPostgreSQLコミュニティのWikiページ
https://wiki.postgresql.org/wiki/Meson
Autoconf+MakeやMSVCによる既存ビルドシステムの課題について、新しいビルドシステムで対応
• Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている
• 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる
• MSVC独自ビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリアルに実
行される(時間がかかる)
➡ 既存ビルドシステムのまま少しずつ改善することもできるが、Mesonによる近代的なビルドシステムに移行して対応する
方がよいと判断
© 2023 NTT DATA Corporation 7
Meson
高速でユーザフレンドリなオープンソースのビルドシステム
https://mesonbuild.com/
実際のビルド作業は、Ninja(スピード重視の軽量なビルドシステム)やMSBuildで実施
https://ninja-build.org/
他の大きなOSS(QEMUやGNOMEの大部分、systemdなど)でもMesonの採用が広がっている
https://mesonbuild.com/Users.html
Pythonで書かれていて貢献しやすい
実際、Mesonによるビルドシステムを提案・実装したPostgreSQLコミッタのAndresさんは、Mesonの開発にも貢献
https://github.com/mesonbuild/meson/commits?author=anarazel
© 2023 NTT DATA Corporation 8
Mesonのインストール
https://wiki.postgresql.org/wiki/Meson#Installing_Meson
MacOS
$ brew install meson
CentOS 8
# dnf -y install dnf-plugins-core
# dnf config-manager --set-enabled crb
# dnf -y install meson
© 2023 NTT DATA Corporation 9
典型的なPostgreSQLビルド方法の比較
AutoconfとMakeによる
従来から利用可能なビルド方法
MesonとNinjaによる
新しく利用可能なビルド方法
PostgreSQLの
コンパイル
$ ./configure オプション
$ make
$ meson setup ビルドディレクトリ オプション
$ cd ビルドディレクトリ
$ ninja
PostgreSQLの
インストール
$ su
# make install
# exit
$ su
# ninja install
# exit
ドキュメントの
コンパイル
$ make docs $ ninja docs
リグレッション
テスト
$ make check-world $ meson test
コマンドの比較表はPostgreSQLのWikiを参照
https://wiki.postgresql.org/wiki/Meson
© 2023 NTT DATA Corporation 10
MesonとNinjaはデフォルトでパラレル実行
makeは、コンパイルやリグレッションテストをデフォルトでシリアル実行
パラレル実行させるには、makeに-jオプションでパラレル度を指定する
ninjaは、ビルド環境のCPU数を自動的に検知して、デフォルトでコンパイルをパラレル実行
-jオプションでパラレル度を指定することも可能
meson testも、デフォルトでリグレッションテストをパラレル実行
--num-processesオプションでパラレル度を指定することも可能
© 2023 NTT DATA Corporation 11
MesonとNinjaでのいい感じ?の進捗報告
ninjaによるコンパイル時の進捗報告
meson testによるリグレッションテスト時の進捗報告
© 2023 NTT DATA Corporation 12
コンパイルやリグレッションテストの実行時間の比較
できるだけ同じ条件で各ビルドシステムによるコンパイルやリグレッションテストの実行時間を比較する。
• AutoconfとMakeによる従来からのビルドシステム
• MesonとNinjaによる新しいビルドシステム
実行時間はtimeコマンドで計測して、3回計測した中間値を結果として採用する。
ビルド環境
• MacBook Pro
• プロセッサ:2.4 GHz クアッドコアIntel Core i5
• メモリ:16 GB 2133 MHz LPDDR3
ビルド対象は、以下のIDのコミットでmasterブランチからチェックアウトしたソース
5352ca22e0 Rename force_parallel_mode to debug_parallel_query
© 2023 NTT DATA Corporation 13
実行時間を比較する"ほぼ同じ"条件のコマンド
Autoconf + Make Meson + Ninja
コンパイル
準備
./configure
--prefix=/opt/test1
--enable-debug
--enable-cassert
--enable-tap-tests
--with-lz4
--with-zstd
meson setup build
--prefix=/opt/test2
--debug
-Dcassert=true
-Dtap_tests=enabled
-Dlz4=enabled
-Dzstd=enabled
-Dbonjour=disabled -Dlibxml=disabled
-Dlibxslt=disabled -Dpam=disabled
-Dplperl=disabled -Dplpython=disabled
-Dpltcl=disabled -Dldap=disabled
PostgreSQL
コンパイル
make world-bin -j 10 -s ninja -j 10
PostgreSQL
インストール
make install ninja install
ドキュメント
コンパイル
make docs ninja docs
リグレッション
テスト
make check-world -j 10 -s meson test --num-processes 10
今回は、lz4などの一部の追加機能のみを有効化。
Mesonでは、追加機能に必要なソフトウェアがイン
ストール済であれば自動的にその追加機能が有効
になるのがデフォルトのため、今回は複数の追加機
能について明示的に無効化する。
今回は、パラレル度を明示的に10に設定
contribモジュールまでコンパイル
© 2023 NTT DATA Corporation 14
実行時間の計測結果
Autoconf + Make Meson + Ninja
コンパイル
準備
./configure
--prefix=/opt/test1
--enable-debug
--enable-cassert
--enable-tap-tests
--with-lz4
--with-zstd
meson setup build
--prefix=/opt/test2
--debug
-Dcassert=true
-Dtap_tests=enabled
-Dlz4=enabled
-Dzstd=enabled
-Dbonjour=disabled -Dlibxml=disabled
-Dlibxslt=disabled -Dpam=disabled
-Dplperl=disabled -Dplpython=disabled
-Dpltcl=disabled -Dldap=disabled
PostgreSQL
コンパイル
make world-bin -j 10 -s ninja -j 10
PostgreSQL
インストール
make install ninja install
ドキュメント
コンパイル
make docs ninja docs
リグレッション
テスト
make check-world -j 10 -s meson test --num-processes 10
105.5秒 112.6秒
413.1秒 351.6秒
60.0秒
8.2秒
34.6秒
48.2秒
10.8秒
24.3秒
© 2023 NTT DATA Corporation 15
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
まずやっとくPostgreSQLチューニング
PDF
PostgreSQLの関数属性を知ろう
PDF
Vacuum徹底解説
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
まずやっとくPostgreSQLチューニング
PostgreSQLの関数属性を知ろう
Vacuum徹底解説
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...

What's hot (20)

PDF
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PDF
使ってみませんか?pg_hint_plan
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL 15の新機能を徹底解説
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
使ってみませんか?pg_hint_plan
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 15の新機能を徹底解説
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
Ad

Similar to MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料) (20)

PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
PostgreSQL9.3新機能紹介
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PDF
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PPTX
エンジニアのための Azure 基礎知識
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
PPTX
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PostgreSQL9.3新機能紹介
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
エンジニアのための Azure 基礎知識
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Ad

More from NTT DATA Technology & Innovation (20)

PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
2025年現在のNewSQL (最強DB講義 #36 発表資料)
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)

MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2023 NTT DATA Corporation 1 第39回 PostgreSQLアンカンファレンス@オンライン MesonでPostgreSQLをビルドしてみよう! 2023年2月20日 株式会社NTTデータ 藤井 雅雄
  • 2. © 2023 NTT DATA Corporation 2 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ fujii_masao MasaoFujii
  • 3. © 2023 NTT DATA Corporation 3 本講演について 講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech 今日紹介するPostgreSQL16に関する内容は、 正式リリースまでの間に変更となる可能性があることにご注意ください!! 講演資料に掲載の検証結果は、ノートPC上の簡易計測で取得したものです。 環境や条件などによっては、異なる検証結果になる可能性があるためご了承ください。
  • 4. © 2023 NTT DATA Corporation 4 MesonでPostgreSQLを ビルドしてみよう!
  • 5. © 2023 NTT DATA Corporation 5 2022年9月のビルド関連ファイルへのコミット $ git log --since 2022-09-01 --until 2022-09-30 --pretty=format:%s configure src/tools/msvc/Solution.pm configure.ac src/include/pg_config.h.in src/include/port.h Restore pg_pread and friends. meson: Add initial version of meson based build system Add definition pg_attribute_aligned() for MSVC Harmonize more parameter names in bulk. Remove DLLTOOL, DLLWRAP from configure / Makefile.global.in aix: xlc: Use -Wl,-b,expfull for old compiler versions Clean up minor inconsistencies in pg_attribute_printf() usage. Use SIGNAL_ARGS consistently to declare signal handlers. Bump minimum Perl version to 5.14 configure: Expand -fvisibility checks to more compilers, test for -qvisibility Bump minimum version of Flex to 2.5.35 Bump minimum version of Bison to 2.3 Mesonベースのビルドシステムをv16からサポート。 以降、ソースツリー内で成熟させていく方針 https://wiki.postgresql.org/wiki/Meson https://www.postgresql.org/docs/devel/install-meson.html 既存ビルドシステムの課題への対応 • Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている • 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる • MSVCビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリ アルに実行される 前回PostgreSQLアンカンファレンス 資料からの再掲(*1) (*1) PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料) https://www.slideshare.net/nttdata-tech/postgresql-development-community-activities-2022-pgunconf38-nttdata
  • 6. © 2023 NTT DATA Corporation 6 PostgreSQLバージョン16からMesonを使ったビルドシステムをサポート予定 既にPostgreSQLバージョン16開発版(現在のmasterブランチ)はMesonでビルド可能 MesonによるPostgreSQLのビルド方法を説明するPostgreSQLドキュメント内のページ https://www.postgresql.org/docs/devel/install-meson.html Mesonによるビルドシステムの各種情報を整理しているPostgreSQLコミュニティのWikiページ https://wiki.postgresql.org/wiki/Meson Autoconf+MakeやMSVCによる既存ビルドシステムの課題について、新しいビルドシステムで対応 • Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている • 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる • MSVC独自ビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリアルに実 行される(時間がかかる) ➡ 既存ビルドシステムのまま少しずつ改善することもできるが、Mesonによる近代的なビルドシステムに移行して対応する 方がよいと判断
  • 7. © 2023 NTT DATA Corporation 7 Meson 高速でユーザフレンドリなオープンソースのビルドシステム https://mesonbuild.com/ 実際のビルド作業は、Ninja(スピード重視の軽量なビルドシステム)やMSBuildで実施 https://ninja-build.org/ 他の大きなOSS(QEMUやGNOMEの大部分、systemdなど)でもMesonの採用が広がっている https://mesonbuild.com/Users.html Pythonで書かれていて貢献しやすい 実際、Mesonによるビルドシステムを提案・実装したPostgreSQLコミッタのAndresさんは、Mesonの開発にも貢献 https://github.com/mesonbuild/meson/commits?author=anarazel
  • 8. © 2023 NTT DATA Corporation 8 Mesonのインストール https://wiki.postgresql.org/wiki/Meson#Installing_Meson MacOS $ brew install meson CentOS 8 # dnf -y install dnf-plugins-core # dnf config-manager --set-enabled crb # dnf -y install meson
  • 9. © 2023 NTT DATA Corporation 9 典型的なPostgreSQLビルド方法の比較 AutoconfとMakeによる 従来から利用可能なビルド方法 MesonとNinjaによる 新しく利用可能なビルド方法 PostgreSQLの コンパイル $ ./configure オプション $ make $ meson setup ビルドディレクトリ オプション $ cd ビルドディレクトリ $ ninja PostgreSQLの インストール $ su # make install # exit $ su # ninja install # exit ドキュメントの コンパイル $ make docs $ ninja docs リグレッション テスト $ make check-world $ meson test コマンドの比較表はPostgreSQLのWikiを参照 https://wiki.postgresql.org/wiki/Meson
  • 10. © 2023 NTT DATA Corporation 10 MesonとNinjaはデフォルトでパラレル実行 makeは、コンパイルやリグレッションテストをデフォルトでシリアル実行 パラレル実行させるには、makeに-jオプションでパラレル度を指定する ninjaは、ビルド環境のCPU数を自動的に検知して、デフォルトでコンパイルをパラレル実行 -jオプションでパラレル度を指定することも可能 meson testも、デフォルトでリグレッションテストをパラレル実行 --num-processesオプションでパラレル度を指定することも可能
  • 11. © 2023 NTT DATA Corporation 11 MesonとNinjaでのいい感じ?の進捗報告 ninjaによるコンパイル時の進捗報告 meson testによるリグレッションテスト時の進捗報告
  • 12. © 2023 NTT DATA Corporation 12 コンパイルやリグレッションテストの実行時間の比較 できるだけ同じ条件で各ビルドシステムによるコンパイルやリグレッションテストの実行時間を比較する。 • AutoconfとMakeによる従来からのビルドシステム • MesonとNinjaによる新しいビルドシステム 実行時間はtimeコマンドで計測して、3回計測した中間値を結果として採用する。 ビルド環境 • MacBook Pro • プロセッサ:2.4 GHz クアッドコアIntel Core i5 • メモリ:16 GB 2133 MHz LPDDR3 ビルド対象は、以下のIDのコミットでmasterブランチからチェックアウトしたソース 5352ca22e0 Rename force_parallel_mode to debug_parallel_query
  • 13. © 2023 NTT DATA Corporation 13 実行時間を比較する"ほぼ同じ"条件のコマンド Autoconf + Make Meson + Ninja コンパイル 準備 ./configure --prefix=/opt/test1 --enable-debug --enable-cassert --enable-tap-tests --with-lz4 --with-zstd meson setup build --prefix=/opt/test2 --debug -Dcassert=true -Dtap_tests=enabled -Dlz4=enabled -Dzstd=enabled -Dbonjour=disabled -Dlibxml=disabled -Dlibxslt=disabled -Dpam=disabled -Dplperl=disabled -Dplpython=disabled -Dpltcl=disabled -Dldap=disabled PostgreSQL コンパイル make world-bin -j 10 -s ninja -j 10 PostgreSQL インストール make install ninja install ドキュメント コンパイル make docs ninja docs リグレッション テスト make check-world -j 10 -s meson test --num-processes 10 今回は、lz4などの一部の追加機能のみを有効化。 Mesonでは、追加機能に必要なソフトウェアがイン ストール済であれば自動的にその追加機能が有効 になるのがデフォルトのため、今回は複数の追加機 能について明示的に無効化する。 今回は、パラレル度を明示的に10に設定 contribモジュールまでコンパイル
  • 14. © 2023 NTT DATA Corporation 14 実行時間の計測結果 Autoconf + Make Meson + Ninja コンパイル 準備 ./configure --prefix=/opt/test1 --enable-debug --enable-cassert --enable-tap-tests --with-lz4 --with-zstd meson setup build --prefix=/opt/test2 --debug -Dcassert=true -Dtap_tests=enabled -Dlz4=enabled -Dzstd=enabled -Dbonjour=disabled -Dlibxml=disabled -Dlibxslt=disabled -Dpam=disabled -Dplperl=disabled -Dplpython=disabled -Dpltcl=disabled -Dldap=disabled PostgreSQL コンパイル make world-bin -j 10 -s ninja -j 10 PostgreSQL インストール make install ninja install ドキュメント コンパイル make docs ninja docs リグレッション テスト make check-world -j 10 -s meson test --num-processes 10 105.5秒 112.6秒 413.1秒 351.6秒 60.0秒 8.2秒 34.6秒 48.2秒 10.8秒 24.3秒
  • 15. © 2023 NTT DATA Corporation 15 その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。