SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Copyright © 2013 NTT DATA Corporation 
2013年2月16日 NTTデータ 基盤システム事業本部 
使ってみませんか? pg_hint_plan 
PostgreSQLアンカンファレンス@東京 
第25回しくみ+アプリケーション勉強会
2 
Copyright © 2013 NTT DATA Corporation 
目次 
pg_hint_planの紹介 
デモ 
HINT句とコミュニティ 
HINT句とNTTデータ
Copyright © 2013 NTT DATA Corporation 
3 
pg_hint_planの紹介
4 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planとは? 
PostgreSQLでHINT句を使えるようにする外部モジュール 
開発元 
NTT OSSセンタ 
公開日 
2012年12月 
ライセンス 
BSD 
対応バージョン 
PostgreSQL9.1、9.2 
公開先 
http://en.sourceforge.jp/projects/pghintplan/ 
pg_hint_plan
5 
Copyright © 2013 NTT DATA Corporation 
統計 情報 
プランとは? 
シーケンシャルスキャン 
インデックススキャン 
インデックスオンリースキャン 
SQLの実行方法にも複数ある 
PostgreSQLは、統計情報から最適な方法を選択してSQL実行 
プランとは、SQLを実行する方法のこと 
どのようにSQL を実行するのが 最適だろう?
6 
Copyright © 2013 NTT DATA Corporation 
プラン選択の課題 
どのプランを選ぶかはPostgreSQL任せ 
PostgreSQLが最適なプランを選んでくれなくて性能劣化 
DBの状況変化に伴い、突然不適切なプランが選ばれて性能劣化 
商用DBは、プラン選択をDB任せにせず、ユーザに制御させる機能を提供 
PostgreSQLではGUCパラメータである程度制御可能だが、柔軟でない 
柔軟なプラン制御を外部ツールで実現 
HINT句 
統計情報 
の固定化 
DBに指示(HINT)を与えて、どのプランを選ぶかユーザ が思い通りに制御 → pg_hint_plan 
一度最適なプランを選んだら、ずっとそのプランを選ぶ ように統計情報を固定化 → pg_dbms_stats
7 
Copyright © 2013 NTT DATA Corporation 
統計 情報 
HINT句のイメージ 
シーケンシャルスキャン 
インデックススキャン 
インデックスオンリースキャン 
インデックススキャンを 選ぶように! 
HINT 
選択
8 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planでのHINT句の指定 
HINT句は、クエリ先頭のブロックコメント /*+ ... */ 内に指定 
クエリ先頭以外の/*+ */は、HINT句と見なされない 
商用DBとはHINT句の指定場所が異なるため注意 
/*+ 
SeqScan(t1) 
IndexScan(t2 t2_pkey) 
*/ 
SELECT /*+ IndexScan(t1 t1_pkey) */ 
* FROM table1 t1 JOIN table2 t2 ON (t1.key = t2.key); 
table1はシーケンシャルスキャン、 table2は主キーインデックスt2_pleyの 
インデックスキャンを指示するHINT句 
クエリ先頭以外の HINT句は無視される
9 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planがサポートするHINT句の種類 
商用DBで特に使われるHINT句をサポート 
カテゴリ 
説明 
スキャン方法 
テーブルをどの方法でスキャンするか? 
結合方法 
テーブルをどの方法で結合するか? 
結合順序 
テーブルをどの順序で結合するか? 
パラメータ設定 
プラン作成中だけ使うパラメータ設定
10 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planがサポートするHINT句の種類 
スキャン方法のHINT句 
書式 
説明 
SeqScan 
シーケンシャルスキャンを選択 
TidScan 
TIDスキャンを選択 
IndexScan 
インデックススキャンを選択 
スキャンにどのインデックスを使うか指定可能 
IndexOnlyScan 
インデックスオンリースキャンを選択(PostgreSQL9.2以降) 
スキャンにどのインデックスを使うか指定可能 
BitmapScan 
ビットマップスキャンを選択 
スキャンにどのインデックスを使うか指定可能
11 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planがサポートするHINT句の種類 
スキャン方法のHINT句 
書式 
説明 
NoSeqScan 
シーケンシャルスキャン以外で最小コストのスキャンを選択 
NoTidScan 
TIDスキャン以外で最小コストのスキャンを選択 
NoIndexScan 
インデックススキャン以外で最小コストのスキャンを選択 
NoIndexOnlyScan 
インデックスオンリースキャン以外で最小コストのスキャンを選択 
(PostgreSQL9.2以降) 
NoBitmapScan 
ビットマップスキャン以外で最小コストのスキャンを選択
12 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planがサポートするHINT句の種類 
結合方法のHINT句 
書式 
説明 
NestLoop 
ネストループ結合を選択 
HashJoin 
ハッシュ結合を選択 
MergeJoin 
マージ結合を選択 
NoNestLoop 
ネストループ結合以外で最小コストの結合を選択 
NoHashJoin 
ハッシュ結合以外で最小コストの結合を選択 
NoMergeJoin 
マージ結合以外で最小コストの結合を選択
13 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planがサポートするHINT句の種類 
結合順序のHINT句 
パラメータ設定のHINT句 
書式 
説明 
Leading 
テーブルを指定した通りの順番で結合 
書式 
説明 
Set 
プラン作成中だけGUCパラメータを指定した値に変更
Copyright © 2013 NTT DATA Corporation 
14 
デモ
15 
Copyright © 2013 NTT DATA Corporation 
インストールと設定 
インストールはいつものやり方 
$ tar zxf pg_hint_plan92-1.0.0.tar.gz 
$ cd pg_hint_plan92-1.0.0 
$ make ※USE_PGXS=1を未指定でも自動的にpgxsを使ってビルド 
$ su 
# make install 
PostgreSQLがpg_hint_planをロードするようにパラメータ設定 
$ vi $PGDATA/postgresql.conf 
shared_preload_libraries = 'pg_hint_plan' 
※custom_variable_classesはv9.2以降廃止されたため、設定不要
16 
Copyright © 2013 NTT DATA Corporation 
HINT句お試し 
単純なSQLでHINT句を使用 
=# CREATE TABLE hoge (a int, b int); 
=# INSERT INTO hoge SELECT x, x FROM generate_series(1,10000) x; 
=# CREATE INDEX aaa_idx ON hoge (a); 
=# CREATE INDEX bbb_idx ON hoge (b); 
=# VACUUM ANALYZE hoge; 
=# EXPLAIN ANALYZE 
SELECT * FROM hoge WHERE a < 9000 AND b > 10; 
/*+ BitmapScan(hoge) */ 
/*+ SeqScan(hoge) */ 
/*+ IndexScan(hoge aaa_idx) */ 
/*+ IndexScan(hoge bbb_idx) */
17 
Copyright © 2013 NTT DATA Corporation 
HINT句お試し 
複雑なSQLでHINT句を使用 
不適切なプランが選ばれた例としてコミュニティで報告されていたものをデモ用 に変更 
http://www.postgresql.org/message-id/E1TSyAf-0006st- DI@wrigleys.postgresql.org 
=# CREATE TABLE goods (id text primary key, price int, num int); 
=# (10万件のデータ挿入) 
=# CREATE INDEX goods_price_idx ON goods(price); 
=# VACUUM ANALYZE goods; 
ID、値段、個数の3列を持つ商品テーブルをイメージ 
id列は、ランダムな英数字10文字 
price列は、0~10万のランダムな数字 
num列は、0~10のランダムな数字 or NULL
18 
Copyright © 2013 NTT DATA Corporation 
HINT句お試し 
複雑なSQLでHINT句を使用 
/*+ HashJoin(goods ANY_subquery) */ 
EXPLAIN ANALYZE 
SELECT 
* 
FROM 
goods 
WHERE 
id IN ( SELECT id FROM goods ORDER BY price LIMIT 605 ) 
AND 
num IS NULL 
ORDER BY 
price DESC 
LIMIT 1; 
値段が安い商品605件のうち 
在庫がない(個数がNULLである)商品で 
最も値段が高い商品を 
1件だけ検索する 
HINT句未指定だと、プランナが不適切なプランを選択して、 低性能 
現状プランナのよい改善案はなく、WITH句を使ったSQLに 書き換えることで問題を回避する必要がある
19 
Copyright © 2013 NTT DATA Corporation 
pg_hint_planの制約 
HINT句で制御できないケース 
HINT句で選択できるプランは、プランナが選択候補として挙げられるプランのみ 
インデックス未定義の場合、インデックススキャンを選択できない 
FULL OUTER JOINでは、ネストループ結合は選択できない 
PL/pgSQLにおける制限 
PL/pgSQL関数内のクエリに直接HINT句を指定しても無視される 
関数実行時のSELECTにHINT句を指定すること 
ただし、関数内のクエリがそのまま実行されるとは限らないため、HINT句が期待どお り動作するかは保証外 
ドキュメントに、制約が詳細に列挙されているため、 
pg_hint_plan利用時には読んでおくこと!
Copyright © 2013 NTT DATA Corporation 
20 
HINT句とコミュニティ
21 
Copyright © 2013 NTT DATA Corporation 
HINT句とPostgreSQLコミュニティ 
http://wiki.postgresql.org/wiki/OptimizerHintsDiscussion
22 
Copyright © 2013 NTT DATA Corporation 
HINT句に対するコミュニティのスタンス 
PostgreSQLがHINT句をサポートすることを、長年多くの人々が望んできた が、コミュニティの現在の公式なスタンスは、 
他DBと同じやり方でHINT句を実装することに興味がない 
「他DBにはあるから、PostgreSQLにもあるべき」という提案は歓迎しな い 
他DBのHINT句には問題がある。問題を改善するアイデアがあるなら、 価値ある議論ができるかも
23 
Copyright © 2013 NTT DATA Corporation 
コミュニティが考えるHINT句の問題 
アプリケーションのコードがメンテナンスしにくくなる。クエリに指定され たHINT句は、多大なリファクタリングを必要とする 
アップグレードを邪魔する。今日役立ってるHINT句は、アップグレード後 に性能劣化の原因になるかもしれない 
DBAが、真の問題を解決する代わりに、HINT句に頼り切ってしまう。こ の悪い癖をHINT句は助長する 
HINT句はデータサイズに対してスケールしない。テーブルが小さいとき に正しかったHINTは、大きくなったときに間違ってしまう 
PostgreSQLのプランナの改善を邪魔する。HINT句の利用者は、クエリ の問題をコミュニティに報告しなくなる
24 
Copyright © 2013 NTT DATA Corporation 
コミュニティが考えるHINT句の使いどころ 
メンテナンス性を気にする必要のない単発クエリ 
様々なプランをテストして、プランナがどう動くのか見るための方法 
プランナのバグの対策 
既知の実装上のバグ 
理論上の問題。プラン見積もりの上限など
Copyright © 2013 NTT DATA Corporation 
25 
HINT句とNTTデータ
26 
Copyright © 2013 NTT DATA Corporation 
NTTデータがHINT句を必要とする理由 
性能の安定化 
基幹系システムでは、最高性能より性能の安定性の方が重要 
プランが変化することによる突然の性能向上/劣化を避けたい 
HINT句でプランを固定化し、性能を安定化させたい! 
クエリチューニングの(最終)手段 
どう頑張っても最適なプランを選んでくれないクエリのチューニング 
プランナのバグは修正済だが、マイナーバージョンのリリースまで時間が あり、システム開発に間に合わない場合のチューニング 
商用DBからPostgreSQLへのマイグレーションの促進 
HINT句のリスクは承知済。リスクのシステムへの影響を見切った上で利用
Copyright © 2013 NTT DATA Corporation 
27 
まとめ
28 
Copyright © 2013 NTT DATA Corporation 
まとめ 
HINT句は使い方次第で 
魔法の杖にも 
トラブルの元凶にもなります。 
効果とリスクを正しく理解し、 
pg_hint_planで 
PostgreSQLの一歩進んだ使い方を!
Copyright © 2011 NTT DATA Corporation 
Copyright © 2013 NTT DATA Corporation

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...NTT DATA Technology & Innovation
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)NTT DATA Technology & Innovation
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報Masahiko Sawada
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Was ist angesagt? (20)

PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Ähnlich wie 使ってみませんか?pg_hint_plan

使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_planMasao Fujii
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみMasahiko Sawada
 
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス・チューニング by Tomonari KatsumataInsight Technology, Inc.
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)Masahiko Sawada
 
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi IshikawaC34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi IshikawaInsight Technology, Inc.
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStromKohei KaiGai
 
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?ラズパイでIoTをやってみよう! | なぜ今IoTなのか?
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?SORACOM,INC
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionTetsutaro Watanabe
 
GraphX によるグラフ分析処理の実例と入門
GraphX によるグラフ分析処理の実例と入門GraphX によるグラフ分析処理の実例と入門
GraphX によるグラフ分析処理の実例と入門鉄平 土佐
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Masahiko Sawada
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~griddb
 
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki NaritaInsight Technology, Inc.
 
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...Insight Technology, Inc.
 
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori Tamura
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori TamuraB14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori Tamura
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori TamuraInsight Technology, Inc.
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネスMie Mori
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用de:code 2017
 
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例 by 株式会社日立製作所 ...
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例  by 株式会社日立製作所 ...[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例  by 株式会社日立製作所 ...
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例 by 株式会社日立製作所 ...Insight Technology, Inc.
 

Ähnlich wie 使ってみませんか?pg_hint_plan (20)

使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
 
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
 
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi IshikawaC34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
 
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?ラズパイでIoTをやってみよう! | なぜ今IoTなのか?
ラズパイでIoTをやってみよう! | なぜ今IoTなのか?
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
GraphX によるグラフ分析処理の実例と入門
GraphX によるグラフ分析処理の実例と入門GraphX によるグラフ分析処理の実例と入門
GraphX によるグラフ分析処理の実例と入門
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
 
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
NoSQL/SQLデュアルインターフェースを備えた IoT向けデータベースGridDB ~ クラウドでGridDBを使ってみましょう ~
 
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita
[B15] HiRDBのSQL実行プランはどのように決定しているのか?by Masaaki Narita
 
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
 
SQiPシンポジウムアブストラクト作成のポイント
SQiPシンポジウムアブストラクト作成のポイントSQiPシンポジウムアブストラクト作成のポイント
SQiPシンポジウムアブストラクト作成のポイント
 
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori Tamura
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori TamuraB14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori Tamura
B14 「今」を分析するストリームデータ処理技術とその可能性 by Kazunori Tamura
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例 by 株式会社日立製作所 ...
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例  by 株式会社日立製作所 ...[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例  by 株式会社日立製作所 ...
[db tech showcase Tokyo 2014] B33: 超高速データベースエンジンでのビッグデータ分析活用事例 by 株式会社日立製作所 ...
 

Mehr von NTT DATA OSS Professional Services

Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力NTT DATA OSS Professional Services
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントNTT DATA OSS Professional Services
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~NTT DATA OSS Professional Services
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~NTT DATA OSS Professional Services
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 

Mehr von NTT DATA OSS Professional Services (20)

Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力Global Top 5 を目指す NTT DATA の確かで意外な技術力
Global Top 5 を目指す NTT DATA の確かで意外な技術力
 
Spark SQL - The internal -
Spark SQL - The internal -Spark SQL - The internal -
Spark SQL - The internal -
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
Hadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返りHadoopエコシステムのデータストア振り返り
Hadoopエコシステムのデータストア振り返り
 
HDFS Router-based federation
HDFS Router-based federationHDFS Router-based federation
HDFS Router-based federation
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの新機能Ozoneの現状
 
Distributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystemDistributed data stores in Hadoop ecosystem
Distributed data stores in Hadoop ecosystem
 
Structured Streaming - The Internal -
Structured Streaming - The Internal -Structured Streaming - The Internal -
Structured Streaming - The Internal -
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
Apache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development statusApache Hadoop and YARN, current development status
Apache Hadoop and YARN, current development status
 
HDFS basics from API perspective
HDFS basics from API perspectiveHDFS basics from API perspective
HDFS basics from API perspective
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
 
20170303 java9 hadoop
20170303 java9 hadoop20170303 java9 hadoop
20170303 java9 hadoop
 
ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)ブロックチェーンの仕組みと動向(入門編)
ブロックチェーンの仕組みと動向(入門編)
 
Application of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jpApplication of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jp
 
Application of postgre sql to large social infrastructure
Application of postgre sql to large social infrastructureApplication of postgre sql to large social infrastructure
Application of postgre sql to large social infrastructure
 
Apache Hadoop 2.8.0 の新機能 (抜粋)
Apache Hadoop 2.8.0 の新機能 (抜粋)Apache Hadoop 2.8.0 の新機能 (抜粋)
Apache Hadoop 2.8.0 の新機能 (抜粋)
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~データ活用をもっともっと円滑に!~データ処理・分析基盤編を少しだけ~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 

使ってみませんか?pg_hint_plan

  • 1. Copyright © 2013 NTT DATA Corporation 2013年2月16日 NTTデータ 基盤システム事業本部 使ってみませんか? pg_hint_plan PostgreSQLアンカンファレンス@東京 第25回しくみ+アプリケーション勉強会
  • 2. 2 Copyright © 2013 NTT DATA Corporation 目次 pg_hint_planの紹介 デモ HINT句とコミュニティ HINT句とNTTデータ
  • 3. Copyright © 2013 NTT DATA Corporation 3 pg_hint_planの紹介
  • 4. 4 Copyright © 2013 NTT DATA Corporation pg_hint_planとは? PostgreSQLでHINT句を使えるようにする外部モジュール 開発元 NTT OSSセンタ 公開日 2012年12月 ライセンス BSD 対応バージョン PostgreSQL9.1、9.2 公開先 http://en.sourceforge.jp/projects/pghintplan/ pg_hint_plan
  • 5. 5 Copyright © 2013 NTT DATA Corporation 統計 情報 プランとは? シーケンシャルスキャン インデックススキャン インデックスオンリースキャン SQLの実行方法にも複数ある PostgreSQLは、統計情報から最適な方法を選択してSQL実行 プランとは、SQLを実行する方法のこと どのようにSQL を実行するのが 最適だろう?
  • 6. 6 Copyright © 2013 NTT DATA Corporation プラン選択の課題 どのプランを選ぶかはPostgreSQL任せ PostgreSQLが最適なプランを選んでくれなくて性能劣化 DBの状況変化に伴い、突然不適切なプランが選ばれて性能劣化 商用DBは、プラン選択をDB任せにせず、ユーザに制御させる機能を提供 PostgreSQLではGUCパラメータである程度制御可能だが、柔軟でない 柔軟なプラン制御を外部ツールで実現 HINT句 統計情報 の固定化 DBに指示(HINT)を与えて、どのプランを選ぶかユーザ が思い通りに制御 → pg_hint_plan 一度最適なプランを選んだら、ずっとそのプランを選ぶ ように統計情報を固定化 → pg_dbms_stats
  • 7. 7 Copyright © 2013 NTT DATA Corporation 統計 情報 HINT句のイメージ シーケンシャルスキャン インデックススキャン インデックスオンリースキャン インデックススキャンを 選ぶように! HINT 選択
  • 8. 8 Copyright © 2013 NTT DATA Corporation pg_hint_planでのHINT句の指定 HINT句は、クエリ先頭のブロックコメント /*+ ... */ 内に指定 クエリ先頭以外の/*+ */は、HINT句と見なされない 商用DBとはHINT句の指定場所が異なるため注意 /*+ SeqScan(t1) IndexScan(t2 t2_pkey) */ SELECT /*+ IndexScan(t1 t1_pkey) */ * FROM table1 t1 JOIN table2 t2 ON (t1.key = t2.key); table1はシーケンシャルスキャン、 table2は主キーインデックスt2_pleyの インデックスキャンを指示するHINT句 クエリ先頭以外の HINT句は無視される
  • 9. 9 Copyright © 2013 NTT DATA Corporation pg_hint_planがサポートするHINT句の種類 商用DBで特に使われるHINT句をサポート カテゴリ 説明 スキャン方法 テーブルをどの方法でスキャンするか? 結合方法 テーブルをどの方法で結合するか? 結合順序 テーブルをどの順序で結合するか? パラメータ設定 プラン作成中だけ使うパラメータ設定
  • 10. 10 Copyright © 2013 NTT DATA Corporation pg_hint_planがサポートするHINT句の種類 スキャン方法のHINT句 書式 説明 SeqScan シーケンシャルスキャンを選択 TidScan TIDスキャンを選択 IndexScan インデックススキャンを選択 スキャンにどのインデックスを使うか指定可能 IndexOnlyScan インデックスオンリースキャンを選択(PostgreSQL9.2以降) スキャンにどのインデックスを使うか指定可能 BitmapScan ビットマップスキャンを選択 スキャンにどのインデックスを使うか指定可能
  • 11. 11 Copyright © 2013 NTT DATA Corporation pg_hint_planがサポートするHINT句の種類 スキャン方法のHINT句 書式 説明 NoSeqScan シーケンシャルスキャン以外で最小コストのスキャンを選択 NoTidScan TIDスキャン以外で最小コストのスキャンを選択 NoIndexScan インデックススキャン以外で最小コストのスキャンを選択 NoIndexOnlyScan インデックスオンリースキャン以外で最小コストのスキャンを選択 (PostgreSQL9.2以降) NoBitmapScan ビットマップスキャン以外で最小コストのスキャンを選択
  • 12. 12 Copyright © 2013 NTT DATA Corporation pg_hint_planがサポートするHINT句の種類 結合方法のHINT句 書式 説明 NestLoop ネストループ結合を選択 HashJoin ハッシュ結合を選択 MergeJoin マージ結合を選択 NoNestLoop ネストループ結合以外で最小コストの結合を選択 NoHashJoin ハッシュ結合以外で最小コストの結合を選択 NoMergeJoin マージ結合以外で最小コストの結合を選択
  • 13. 13 Copyright © 2013 NTT DATA Corporation pg_hint_planがサポートするHINT句の種類 結合順序のHINT句 パラメータ設定のHINT句 書式 説明 Leading テーブルを指定した通りの順番で結合 書式 説明 Set プラン作成中だけGUCパラメータを指定した値に変更
  • 14. Copyright © 2013 NTT DATA Corporation 14 デモ
  • 15. 15 Copyright © 2013 NTT DATA Corporation インストールと設定 インストールはいつものやり方 $ tar zxf pg_hint_plan92-1.0.0.tar.gz $ cd pg_hint_plan92-1.0.0 $ make ※USE_PGXS=1を未指定でも自動的にpgxsを使ってビルド $ su # make install PostgreSQLがpg_hint_planをロードするようにパラメータ設定 $ vi $PGDATA/postgresql.conf shared_preload_libraries = 'pg_hint_plan' ※custom_variable_classesはv9.2以降廃止されたため、設定不要
  • 16. 16 Copyright © 2013 NTT DATA Corporation HINT句お試し 単純なSQLでHINT句を使用 =# CREATE TABLE hoge (a int, b int); =# INSERT INTO hoge SELECT x, x FROM generate_series(1,10000) x; =# CREATE INDEX aaa_idx ON hoge (a); =# CREATE INDEX bbb_idx ON hoge (b); =# VACUUM ANALYZE hoge; =# EXPLAIN ANALYZE SELECT * FROM hoge WHERE a < 9000 AND b > 10; /*+ BitmapScan(hoge) */ /*+ SeqScan(hoge) */ /*+ IndexScan(hoge aaa_idx) */ /*+ IndexScan(hoge bbb_idx) */
  • 17. 17 Copyright © 2013 NTT DATA Corporation HINT句お試し 複雑なSQLでHINT句を使用 不適切なプランが選ばれた例としてコミュニティで報告されていたものをデモ用 に変更 http://www.postgresql.org/message-id/E1TSyAf-0006st- DI@wrigleys.postgresql.org =# CREATE TABLE goods (id text primary key, price int, num int); =# (10万件のデータ挿入) =# CREATE INDEX goods_price_idx ON goods(price); =# VACUUM ANALYZE goods; ID、値段、個数の3列を持つ商品テーブルをイメージ id列は、ランダムな英数字10文字 price列は、0~10万のランダムな数字 num列は、0~10のランダムな数字 or NULL
  • 18. 18 Copyright © 2013 NTT DATA Corporation HINT句お試し 複雑なSQLでHINT句を使用 /*+ HashJoin(goods ANY_subquery) */ EXPLAIN ANALYZE SELECT * FROM goods WHERE id IN ( SELECT id FROM goods ORDER BY price LIMIT 605 ) AND num IS NULL ORDER BY price DESC LIMIT 1; 値段が安い商品605件のうち 在庫がない(個数がNULLである)商品で 最も値段が高い商品を 1件だけ検索する HINT句未指定だと、プランナが不適切なプランを選択して、 低性能 現状プランナのよい改善案はなく、WITH句を使ったSQLに 書き換えることで問題を回避する必要がある
  • 19. 19 Copyright © 2013 NTT DATA Corporation pg_hint_planの制約 HINT句で制御できないケース HINT句で選択できるプランは、プランナが選択候補として挙げられるプランのみ インデックス未定義の場合、インデックススキャンを選択できない FULL OUTER JOINでは、ネストループ結合は選択できない PL/pgSQLにおける制限 PL/pgSQL関数内のクエリに直接HINT句を指定しても無視される 関数実行時のSELECTにHINT句を指定すること ただし、関数内のクエリがそのまま実行されるとは限らないため、HINT句が期待どお り動作するかは保証外 ドキュメントに、制約が詳細に列挙されているため、 pg_hint_plan利用時には読んでおくこと!
  • 20. Copyright © 2013 NTT DATA Corporation 20 HINT句とコミュニティ
  • 21. 21 Copyright © 2013 NTT DATA Corporation HINT句とPostgreSQLコミュニティ http://wiki.postgresql.org/wiki/OptimizerHintsDiscussion
  • 22. 22 Copyright © 2013 NTT DATA Corporation HINT句に対するコミュニティのスタンス PostgreSQLがHINT句をサポートすることを、長年多くの人々が望んできた が、コミュニティの現在の公式なスタンスは、 他DBと同じやり方でHINT句を実装することに興味がない 「他DBにはあるから、PostgreSQLにもあるべき」という提案は歓迎しな い 他DBのHINT句には問題がある。問題を改善するアイデアがあるなら、 価値ある議論ができるかも
  • 23. 23 Copyright © 2013 NTT DATA Corporation コミュニティが考えるHINT句の問題 アプリケーションのコードがメンテナンスしにくくなる。クエリに指定され たHINT句は、多大なリファクタリングを必要とする アップグレードを邪魔する。今日役立ってるHINT句は、アップグレード後 に性能劣化の原因になるかもしれない DBAが、真の問題を解決する代わりに、HINT句に頼り切ってしまう。こ の悪い癖をHINT句は助長する HINT句はデータサイズに対してスケールしない。テーブルが小さいとき に正しかったHINTは、大きくなったときに間違ってしまう PostgreSQLのプランナの改善を邪魔する。HINT句の利用者は、クエリ の問題をコミュニティに報告しなくなる
  • 24. 24 Copyright © 2013 NTT DATA Corporation コミュニティが考えるHINT句の使いどころ メンテナンス性を気にする必要のない単発クエリ 様々なプランをテストして、プランナがどう動くのか見るための方法 プランナのバグの対策 既知の実装上のバグ 理論上の問題。プラン見積もりの上限など
  • 25. Copyright © 2013 NTT DATA Corporation 25 HINT句とNTTデータ
  • 26. 26 Copyright © 2013 NTT DATA Corporation NTTデータがHINT句を必要とする理由 性能の安定化 基幹系システムでは、最高性能より性能の安定性の方が重要 プランが変化することによる突然の性能向上/劣化を避けたい HINT句でプランを固定化し、性能を安定化させたい! クエリチューニングの(最終)手段 どう頑張っても最適なプランを選んでくれないクエリのチューニング プランナのバグは修正済だが、マイナーバージョンのリリースまで時間が あり、システム開発に間に合わない場合のチューニング 商用DBからPostgreSQLへのマイグレーションの促進 HINT句のリスクは承知済。リスクのシステムへの影響を見切った上で利用
  • 27. Copyright © 2013 NTT DATA Corporation 27 まとめ
  • 28. 28 Copyright © 2013 NTT DATA Corporation まとめ HINT句は使い方次第で 魔法の杖にも トラブルの元凶にもなります。 効果とリスクを正しく理解し、 pg_hint_planで PostgreSQLの一歩進んだ使い方を!
  • 29. Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation