自己紹介 長田悠吾 (Yugo Nagata) SRA OSS, Inc. 日本支社 PostgreSQL 技術支援 コンサルティング PostgreSQL インターナル講座講師 研究開発 Copyright 2018 SRA OSS, Inc. Japan All right

Similar documents
PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

PostgreSQL解析ドキュメント

PostgreSQL 11 新機能解説 オープンソースカンファレンス 2018 Tokyo/Fall SRA OSS, Inc. 日本支社近藤雄太 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 1

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

スライド 1

スライド 1

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

PostgreSQL 9.4 評価検証報告 SRA OSS, Inc. 日本支社高塚遙 :55 ~ 16:30 PostgreSQL 9.4 最新情報セミナー Copyright 2014 SRA OSS, Inc. Japan All rights reserved. 1

計算機アーキテクチャ

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

PowerPoint プレゼンテーション

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

スライド 1

Source Insight

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

Java言語 第1回

PostgreSQL10 を導入! 大規模データ分析事例からみる DWH としての PostgreSQL 活用のポイント 2017/12/5 株式会社 NTT データ 2017 NTT DATA

Zabbix で PostgreSQL を監視! pg_monz のご紹介 Zabbix Conference Japan 年 11 月 20 日 SRA OSS, Inc. 日本支社マーケティング部

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

ShikumiBunkakai_2011_10_29

10th Developer Camp - B5

JavaプログラミングⅠ

24th Embarcadero Developer Camp

プログラミング基礎

PostgreSQL 9.3パーティションの効果検証

Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup Apache Arrow Powered by Rabbit 2.2.2

データベースアクセス

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

Javaの作成の前に

スライド 1

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

プレポスト【問題】

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

初心者にもできるアメブロカスタマイズ新2016.pages

次期バージョン PostgreSQL 10 の 新機能とその後の方向性 SRA OSS, Inc. 日本支社 マーケティング部 PostgreSQL 技術グループ 長田 悠吾 db tech showcase OSS

今さら聞けない!? Oracle入門 ~後編~

- 2 Copyright (C) All Rights Reserved.

Microsoft PowerPoint - 講義補助資料2017.pptx

XNA Framework

PostgreSQL インサイド概要 SRA OSS, Inc. 日本支社石井達夫

メディプロ1 Javaプログラミング補足資料.ppt

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

PowerGres Plus V9.1 のご紹介 PostgreSQL をベースに信頼性とセキュリティをプラス SRA OSS,Inc. 日本支社マーケティング部 2015/10 Copyright 2015 SRA OSS, Inc. Japan All rights reserved. 1

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Microsoft Word - tutorial3-dbreverse.docx

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

クエリの作成が楽になるUDF

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

プログラミング入門1

Copyright All Rights Reserved. -2 -!

勉強会の流れ Google API の概要 デモ curl で実際に体験 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 2

WEBシステムのセキュリティ技術

ソフト活用事例③自動Rawデータ管理システム

人工知能入門

UIOUSBCOM.DLLコマンドリファレンス

Transcription:

PostgreSQL 11 で登場した JIT コンパイルって 結局何者? (What is JIT Compilation Introduced in PostgreSQL 11? ) 長田悠吾 (Yugo Nagata)/ SRA OSS, Inc. 日本支社 PGConf.ASIA 2018 2018.12.12

自己紹介 長田悠吾 (Yugo Nagata) チーフエンジニア @ SRA OSS, Inc. 日本支社 PostgreSQL 技術支援 コンサルティング PostgreSQL インターナル講座講師 研究開発 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 2

PostgreSQL 11 PostgreSQL 11 の新機能として JIT コンパイル基盤が導入 実行時間を向上させるため クエリプランの一部分に対し実行時 (JIT) コンパイ ルを追加した この機能を使うには LLVM が必要である JIT コンパイル? LLVM? Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 3

Outline Just-in-Time (JIT) コンパイルとは LLVM とは PostgreSQL のクエリ処理の中で どのように使用されているか Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 4

コンパイラ (compiler) 高水準言語によるソースコードから 機械語に ( あるいは 元のプログ ラムよりも低い水準のコードに ) 変換するプログラム (Wikipedia) コード から コード への変換 コード コード コンパイル 変換後のコード コンピュータにより直接的に実行可能な機械語 ( ネイティブコード ) 元のプログラムよりも低水準な中間言語 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 5

事前 (AOT) コンパイル 事前 (Ahead-of-Time: AOT) コンパイラ アプリケーション実行前に事前にコンパイルするコンパイラ C 言語 ソースコード (.c) を機械語 ( ネイティブコード ) に変換 PostgreSQL バイナリのビルド Java C 言語 機械語 ソースコード (.java) バイトコード (.class) バイトコードは Java 仮想マシン (JVM) で実行可能 Java バイト コード Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 6

インタプリタ (interpreter) プログラミング言語で書かれたソースコードないし中間表現を逐次 解釈しながら実行するプログラム (Wikipedia) コードを 頭から順番に解釈しながら実行 長所 事前にコンパイルを必要としない 特定のアーキテクチャに依存しないプログラム 短所 実行時の性能の低さ Java JVM によるバイトコードの解釈実行 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 7

実行時 (JIT) コンパイル 実行時 (Just-in-Time:JIT) コンパイラ ソフトウェアの実行時にコードのコンパイルを行い実行速度の向上を図るコンパイラ Java 実行頻度の高いメソッドを実行時にネイティブコードにコンパイル Java Python + Numba 事前 (AOT) コンパイル バイト コード 実行時 (JIT) コンパイル 機械語 指定した関数を実行時にコンパイルして実行 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 8

PostgreSQL 11 における JIT コンパイル SQL 中に含まれる 式 WHERE 句 ターゲットリスト 集約関数 タプルの deforming ディスク上のタプルを インメモリの形式に変換する処理 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 9

パーサー PostgreSQL のクエリ処理 構文解析 アナライザ 意味解析 システムカタログを参照し テーブルや演算子 型などの情報を追加 リライタ クエリツリーの書き換え プランナ クエリを処理するための最適な実行計画を生成 エクゼキュータ クエリの実行 問い合わせを受信問い合わせ文字列パース処理パーサー raw parse tree アナライズ処理アナライザ query tree リライト処理リライタ rewrite 後のquery tree プラン処理プランナ ( オプティマイザ ) plan tree エグゼキュート処理 エグゼキュータ Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 10

パーサ (Parser) パース処理 SQL の文字列を解析し パースツリーという木構造に変換する 例 )SELECT a, b FROM tbl WHERE c < 10 AND d = 3; 問い合わせを受信 パース処理パーサー アナライズ処理 問い合わせ文字列 raw parse tree アナライザ query tree リライト処理 SELECT WHERE リライタ rewrite 後のquery tree プラン処理プランナ ( オプティマイザ ) plan tree Target List FROM AND エグゼキュート処理エグゼキュータ a b tbl < = c 10 d 3 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 11

アナライザ (Analyzer) アナライズ処理 問い合わせを受信 問い合わせ文字列 システムカタログを参照しながら パースツリーに 必要な情報を追加して クエリツリーに変換 追加される情報 パース処理パーサー raw parse tree アナライズ処理アナライザ query tree リライト処理 リライタ テーブルの OID スキーマサーチパスを考慮して参照されるテーブルを確定 テーブルに含まれる列名も調べられる 型の OID rewrite 後のquery tree プラン処理プランナ ( オプティマイザ ) plan tree エグゼキュート処理エグゼキュータ 定数などの型を確定する 演算子の OID 列や定数の型から 使用される演算子を確定する Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 12

リライタ (Rewriter) リライト処理 問い合わせを受信 問い合わせ文字列 パースツリーを書き換えを行う VIEW や RULE の機能を実現 ビュー に対する SELECTは 定義された SQL クエリの実行に書き換えられる ビュー に対する更新クエリは 実テーブルの更新に書き換えられる 自動更新可能ビュー パース処理パーサー アナライズ処理 アナライザ リライト処理 リライタ プラン処理 プランナ ( オプティマイザ ) エグゼキュート処理 エグゼキュータ raw parse tree query tree rewrite 後の query tree plan tree Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 13

プランナ (Planner) プラン処理 クエリツリーから クエリの 実行計画 を生成 クエリ実行の推定コストを見積もる 最もコストが少なく 実行時間が短いと思われるプランを選択する 実行計画はプランツリーという木構造で表される 問い合わせを受信 パース処理パーサー アナライズ処理 アナライザ リライト処理 リライタ プラン処理 問い合わせ文字列 raw parse tree query tree rewrite 後の query tree プランナ ( オプティマイザ ) plan tree エグゼキュート処理エグゼキュータ Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 14

エクゼキュータ (Executor) エクゼキュート処理 プランツリーを実行して フロントエンドに結果を返す 各ノードを再帰的に実行 各ノードはタプルを1 行ずつ返す 上位のノードは下位ノードを呼び出し その結果返ってきたタプルを受け取って処理する タプル 問い合わせを受信問い合わせ文字列パース処理パーサー raw parse tree アナライズ処理アナライザ query tree リライト処理リライタ rewrite 後のquery tree プラン処理 プランナ ( オプティマイザ ) タプル エクゼキュータ ノード タプル plan tree エグゼキュート処理 エグゼキュータ エクゼキュータ ノード エクゼキュータ ノード タプル タプル Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 15

プランツリー実行の具体例 SELECT * FROM t1 INNER JOIN t2 USING(i) WHERE t1.i < 10; QUERY PLAN -------------------------------------------------------- Nested Loop (cost=0.00..2.03 rows=1 width=12) Join Filter: (t1.i = t2.i) -> Seq Scan on t1 (cost=0.00..1.01 rows=1 width=8) Filter: (i < 10) -> Seq Scan on t2 (cost=0.00..1.01 rows=1 width=8) (4 rows) フロントエンド ExecNestLoop (t1.i = t2.i) (i < 10) アウター プラン インナー プラン t1 ExecScan ExecSeqScan ExecSeqScan ExecScan t2 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 16

式の表現 (expression) WHERE 句の条件などに含まれる式も 木構造で表現される 例 )WHERE tbl.c < 10 AND tbl.d = 3 AND < = カラム値 tbl.c 定数 10 カラム値 tbl.d 定数 3 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 17

式 ( 9.6) PostgreSQL 9.6 までは 式も再帰的に行われていた 各ノードを評価する毎に 関数を実行 上位ノードは下位ノードを評価した結果を利用 関数呼び出しのオーバヘッドが高かった 評価 AND 評価 WHERE tbl.c < 10 AND tbl.d = 3 < = 評価評価評価評価 カラム値 tbl.c 定数 10 カラム値 tbl.d 定数 3 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 18

式 (10 ) 木構造を以下のような中間表現 (ExprState) に変換 (= コンパイル ) してから 実行 (= インタプ リタ ) EEOP_SCAN_FETCHSOME ( タプルの取り出し ) EEOP_SCAN_VAR (tbl.c) WHERE tbl.c < 10 AND tbl.d = 3 EEOP_CONST (10) EEOP_FUNEXPR_STRICT (< ) EEOP_BOOL_AND_STEP_FIRST (AND) 変換 < AND = EEOP_SCN_VAR (tbl.d) EEOP_CONST (3) カラム値 tbl.c 定数 10 カラム値 tbl.d 定数 3 EEOP_FUNCEXPR_STRICT (= ) EEOP_BOOL_AND_STEP_LAST (AND) 関数呼び出しコストが削減され エクゼキュータの実行が高速化 それでもなお 条件分岐が多いのがネック Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 19

JIT による式評価の高速化 一般的な式を行うためには あらゆる状況に対応しなければならない 任意のテーブルに対する 任意の SQL 次の命令を事前に知ることはできない 予測のできない条件分岐 ( 処理のジャンプ ) が多くなる クエリが決まった段階で 対象のテーブル および評価すべき式も確定している 式 を予めネイティブコードにコンパイルしておき それを呼び出すように すれば 高速化できる可能性がある JIT コンパイルの出番 LLVM を使用 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 20

LLVM LLVM 任意のプログラミング言語に対応可能なコンパイラ基盤 コンパイラ作成のための 再利用可能なコンポーネントを提供 LLVM IR のレベルの最適化 新しいコンパイラ作成の時間とコストを削減 LLVM を使ったコンパイラの例 Clang, Swift, Rust 機械語のコードを出力するだけではなく JIT 実行にも対応 ソースコード フロントバックバックフロントエンド最適化エンドエンドエンド機械語中間表現中間表現 (LLVM IR) (LLVM IR) JIT 実行 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 21

Clang の場合 Clang バックエンドに LLVM を使った C/C++ 向けコンパイラ C/C++ のコードを LLVM の中間表現に変換 LLVM IR のレベルで最適化 ソースコード (C/C++) clang 中間表現 (LLVM IR) 最適化 中間表現 (LLVM IR) バックバックエンドエンド 機械語 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 22

LLVM IR LLVM で使われる内部表現言語 3つの表現形式 メモリ内のバイナリ表現 これを生成するための API が用意されている PostgreSQL はこれを使っている ディスク上でのバイナリ表現 ビットコードと呼ばれる ファイル拡張子は.bc 人間に読めるテキスト表現 ファイル拡張子は.ll Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 23

LLVM による JIT PostgreSQL の JIT 式表現の中間表現 (ExprState) を LLVMの中間表現 (LLVM IR) に変換 それを LLVM で JIT コンパイルして ネイティブコードに変換 PostgreSQL 内部から関数として実行 式表現の 中間表現 (ExprState) 式表現のツリー を変換 llvm _compile _expr PostgreSQL エクゼキュータ 最適化中間表現中間表現 (LLVM IR) (LLVM IR) 実行 ( 関数呼び出し ) バックエンド JITコンパイルネイティブコード Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 24

JIT コンパイルのタイミング クエリ実行直前 (= エクゼキュータの初期化段階 ) プランツリーの各ノードの初期化が行われる 式表現 (WHERE 条件など ) を含むノードの初期化時 : ツリー構造の式表現が中間表現 (ExprState) に変換される 続いて ExorState は LLVM IR の関数に変換される この時点ではまだコンパイルはされない クエリに含まれる全ての式表現が対象 クエリ実行時 (= エクゼキュータの実行段階 ) 実際に式を評価する時に その式評価に対応する関数が呼ばれる 初回の関数呼び出し時に 全ての関数のコンパイルがまとめて実行される Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 25

タプルの deforming ディスク上のタプルを インメモリの形式に変換する処理 式を評価するときに タプルを取り出す命令の中で行われる 例えば EEOP_SCAN_FETCHSOME タプルからカラムの値を必要な分だけ取り出す 例 ) カラムを 10 個持つテーブルの場合 CREATE TABLE tbl (a1 int, a2 text,..., a10 timestamp); SELECT a3, a7 from tbl; この場合は 7 番目のカラム (a7) までの値を取り出す (8 番目以降のカラムは必要ない ) この処理もボトルネックとなるため JIT コンパイルによる高速化の対象 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 26

padding タプルの構造 固定長のタプルヘッダ null bitmap 列の数分だけのビット列 もしNULLの列がタプル中に存在しなければnull bitmapは省略される padding バイト位置調整のための 詰めもの 列データ 型によってサイズが異なる ( 可変長の型もある ) 列と列の間には データ型に応じたpaddingが入ることがある タプルヘッダ null bitmap ( オプション ) 列 1 列 2 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 27

padding タプルの deforming の JIT 化 タプルヘッダ null bitmap ( オプション ) 列 1 列 2 条件分岐が多い 値が NULL かどうかの確認が必要 カラム値を取り出すには これらの オフセット位置を計算する必要がある カラムの型によっても処理が異なる CPUボトルネック テーブルのカラム型がわかっていれば 事前に取り除ける条件分岐がある NOT NULL 制約があるカラムは NULL かどうかの確認は不要 カラムの型は事前に知ることができる JIT コンパイルによって分岐を事前に取り除くことで高速化 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 28

関数のインライン展開 (1) 式には関数の実行が含まれている 組み込み関数 sqrt, md5, random ユーザ定義関数 演算子にも関数が使用される 例 )int8 同士の等号 : int8eq() インライン展開 LLVM IR のコードからこれらの関数を呼び出すのではなく 関数の方を LLVM IR に変換してしまう 関数呼び出しのオーバヘッドを削減 Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 29

関数のインライン展開 (2) 関数のインライン展開を可能にするため PostgreSQL のソースコードは LLVM IR にコンパイルされる 拡張モジュールをインストールした場合も同様 バイナリは $pkglibdir/bitcode 以下にインストールされている $ tree postgresql/lib/bitcode/ lib/bitcode/ pg_trgm trgm_gin.bc trgm_gist.bc trgm_op.bc trgm_regexp.bc pg_trgm.index.bc postgres access brin brin.bc brin_inclusion.bc brin_minmax.bc brin_pageops.bc brin_revmap.bc brin_tuple.bc brin_validate.bc brin_xlog.bc common bufmask.bc ( 以下略 ) Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 30

JIT が有効に働く状況 CPU バウンドな状況が長時間になるようなクエリ 複雑な式表現をもつ 行数が多い 主に解析系のクエリで有効 短時間のクエリでは JIT のオーバーヘッドの方が大きくなってしまう プランナの推定コストに基づく判断 jit_above_costより大きくなる場合のみ JIT を使う jit_inline_above_cost より大きい場合には 関数のインライン化を行う jit_optimize_above_cost より大きい場合には 積極的な最適化を行う Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 31

設定パラメータ jit JIT コンパイルを使用するかどうか jit_optimize_above_cos 積極的な最適化を使用するコスト デフォルト :off jit_above_cost JIT コンパイルを使用するコストの閾値 デフォルト :100000 jit_inline_above_cost 関数のインライン化を使用するコストの閾値 デフォルト :500000 の閾値 デフォルト :500000 jit_provider JIT 機能を提供するライブラリの名前 デフォルト :llvmjit jit_dump_bitcode 生成された LLVM IR のファイル ( ビットコード :.bc) に出力 デフォルト :off Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 32

動作例 (1) Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 33

動作例 (2) EXPLAIN ANALYZE の結果 Function Scan on f100000000 g (cost=0.25..5750000.25 rows=100000000 width=40) (actual time=22073.673..233385.687 rows=100000000 loops=1) Planning Time: 0.255 ms JIT: Functions: 2 作成された関数の数実施された JIT 処理 Options: Inlining true, Optimization true, Expressions true, Deforming true Timing: Generation 1.926 ms, Inlining 5.988 ms, Optimization 36.134 ms, Emission 20.168 ms, Total 64.215 ms JIT 処理の所要時間 Execution Time: 236383.943 ms (7 rows) Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 34

まとめ PostgreSQL 11 への JIT コンパイラ導入 JIT コンパイルとは何か LLVM とは何か PostgreSQL のどこで どのように なぜ使われるのか JIT コンパイルはまだ登場したばかりの機能 今後も改善されていくはず Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 35

Thank you Copyright 2018 SRA OSS, Inc. Japan All rights reserved. 36