世界を動かす技術を、日本語で。

Postgresよりも81%高速なクエリプランを生成する4Bモデルのトレーニング

2026年9月17日原文(rohanbansal.com)

概要

  • クエリオプティマイザ の品質と課題についてLeisらの研究をもとに解説
  • Postgres のクエリプラン生成の難しさとその理由の説明
  • 結合順序最適化 のNP困難性と組み合わせ爆発の具体例
  • pg_hint_plan によるクエリプラン誘導の実験的アプローチ
  • 言語モデル によるヒント自動生成の可能性とその意義の考察

クエリオプティマイザはどれほど優秀か?

  • 2015年、Leisらが「クエリオプティマイザの実力」に関する研究を発表
    • 10年後にも同じ問いを再調査
    • 10年の研究進展にも関わらず、 理想的な最適化には未到達
  • Postgres はテーブル内データの全情報を持つが、最適化は極めて難解
    • 特に 結合順序最適化(join ordering) はNP困難問題
  • 良いクエリオプティマイザ :高速なプラン生成
    • 悪いクエリオプティマイザ :遅いプランを選択
  • 検証容易性 :良し悪しは実行時間で単軸評価が可能
  • 言語モデル は検証容易なタスクに強く、強化学習で高速プラン生成行動を強化可能

実験概要:小型言語モデルを用いたPostgres最適化

  • 小型オープンウェイトモデル をSFTと強化学習で後学習
    • Postgresのデフォルトプラン を凌駕するプラン生成の可否を検証
  • 主な成果
    • 4Bモデルで113問の結合多用クエリに対し 44.7%のレイテンシ短縮
    • Linuxページキャッシュ干渉を抑えた測定環境 の構築
    • ノイズ耐性を持つRLスコアリング手法 の設計
    • RL計算を2台に分散 (vLLM+トレーナーとPostgresコンテナ)
    • 500以上のGPT-6 Astraエージェント軌跡によるオフポリシー蒸留

クエリオプティマイザの内部構造

  • IMDbデータセット を例にテーブル構造を解説
    • title(1M行)、movie_companies(2M行)、company_name(100k行)、company_type、kind_type
  • 例:2000年代に最も多くのタイトルを出した日本企業を求めるSQL
  • WHERE句の選択的述語 (フィルタ条件)がプラン選択に大きく影響
  • 結合順序
    • 3テーブル結合で2通りの有効な結合木
    • カーディナリティ (行数)計算例
      • フィルタ前:どの順序でも2M行を次の結合に渡す
      • フィルタ後:日本企業5k、2000年代タイトル200kと仮定
        • (cn'⋈mc)→100k→t'で20k行、(t'⋈mc)→400k→cn'で20k行
        • 前者が4倍効率的

組み合わせ爆発と現実的な最適化の困難さ

  • 結合アルゴリズム (ハッシュ、マージ、ネストループ)や順序、スキャン方式の組み合わせ
  • 例:3テーブルでも 4,608通り 以上のプラン
    • 実際には並列化や集約方式も加味されさらに増加
  • Postgres はすべてのプランを評価せず、動的計画法や遺伝的アルゴリズムで探索空間を削減

カーディナリティ推定の限界

  • Postgres は正確なカーディナリティを事前に知ることができない
    • 実際に結合を実行して数えるのは現実的でない
  • pg_statistic テーブルの統計情報と 一様分布仮定 に依存
    • 一様分布仮定が崩れると推定が大きく外れる
    • 早期結合での誤推定が後続すべてに波及し、誤ったプラン選択に繋がる

Postgresの挙動を変える方法

  • Postgres はコスト最小プランを自動選択
    • コストモデル自体を変更するにはソースコード改変が必要
  • pg_hint_plan 拡張
    • SQLコメントでヒントを与え、特定のプランを強制
      • 例:/*+ HashJoin(a b) SeqScan(a)*/
      • 指定通りのプランが実際に選択される

言語モデルによるヒント自動生成の意義

  • pg_hint_plan を使えば、ヒント次第でより良いプランを選択可能
  • 言語モデル がクエリと統計情報をもとに最適なヒントを自動生成できれば
    • Postgresの限界を突破する新たな最適化手法 の可能性
  • 単なるカーディナリティ推定モデルの精度向上 だけでは不十分
    • プラン全体の最適化行動学習 が本質的な課題