From: Shigeru Hanada Date: Thu, 19 Apr 2012 05:05:31 +0000 (+0900) Subject: ドキュメントの記述やGUCパラメータの仕様を本体に合わせて修正。 X-Git-Tag: REL91_1_1_1~341 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a9c08bec53e6717f923fa9565f0f7f7dfc8d7d68;p=pghintplan%2Fpg_hint_plan.git ドキュメントの記述やGUCパラメータの仕様を本体に合わせて修正。 - ログレベル指定のパラメータ名は *_messages - debug_print* の出力ログレベルは LOG - その他記述修正 --- diff --git a/doc/pg_hint_plan-ja.html b/doc/pg_hint_plan-ja.html index b38aa39..30a885e 100644 --- a/doc/pg_hint_plan-ja.html +++ b/doc/pg_hint_plan-ja.html @@ -87,7 +87,7 @@ LOAD postgres=#

ヒントの記述方法

-

ヒントはクエリの前のブロックコメント内に、スペース、タブまたは改行のいずれかで区切って記述してください。ヒントの対象は、カッコ内にオブジェクト名または別名(エイリアス)で指定してください。

+

ヒントはクエリの前のブロックコメント内に、スペース、タブ、または改行のいずれかで区切って記述してください。ヒントの対象は、カッコ内にオブジェクト名または別名(エイリアス)で指定してください。

以下の例では、HashJoinとSeqScanヒントにより、pgbench_accountsテーブルに対するSeq Scanの結果をHash Joinする実行計画が選択されています。

@@ -113,7 +113,7 @@ postgres-#   ORDER BY a.aid;
 postgres=# 

ヒントのグループ

-

pg_hint_planで使えるヒントのグループは、スキャン方式と結合方式、結合順序、GUCパラメータの4通りに分けられます。同じグループのヒントを同じオブジェクトに対して指定した場合は、最後に指定したヒントが適用されます。各グループの具体的なヒントは、ヒント一覧を参照してください。

+

pg_hint_planで使えるヒントは、スキャン方式と結合方式、結合順序、GUCパラメータの4グループに分けられます。同じグループのヒントを同じオブジェクトに対して指定した場合は、最後に指定したヒントが適用されます。各グループの具体的なヒントは、ヒント一覧を参照してください。

スキャン方式

あるテーブルのスキャン方式を選択するかを指定できるヒントのグループで、「SeqScan」や「IndexScan」などが含まれます

@@ -138,11 +138,11 @@ postgres=# pg_hint_plan.enable - on のとき、pg_hint_planの機能を有効にします。on + pg_hint_planの機能を有効または無効にします。on pg_hint_plan.debug_print - on のとき、プランナが実行計画を生成するときに用いたヒントを表示します。off -pg_hint_plan.parse_message - 指定したヒントに対して、どのメッセージ階層を表示するかを指定します。有効な値は、debug5、debug4、debug3、debug2、debug1、log、info、notice、warningまたはerrorです。info + pg_hint_planのデバッグ出力を有効にします。メッセージはLOGメッセージレベルで出力されますので、デフォルトではサーバログに出力され、クライアントには渡されません。off +pg_hint_plan.parse_messages + 指定したヒントを解釈できなかった場合に、どのメッセージ階層でログを出力するかを指定します。有効な値は、debug5、debug4、debug3、debug2、debug1、log、info、notice、warning、またはerrorです。fatalとpanicは指定できません。info diff --git a/expected/prepare-9.1.out b/expected/prepare-9.1.out index e30f04e..89f4328 100644 --- a/expected/prepare-9.1.out +++ b/expected/prepare-9.1.out @@ -1,6 +1,7 @@ LOAD 'pg_hint_plan'; SET pg_hint_plan.enable TO on; SET pg_hint_plan.debug_print TO true; +SET client_min_messages TO 'LOG'; EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; QUERY PLAN -------------------------------------------- @@ -26,7 +27,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id -- 9.2:PREPAREでヒント句を指定しても、実行計画は制御できない /* NestLoop(t1 t2) */ PREPARE p1 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; -INFO: /* +LOG: /* NestLoop(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p1; @@ -43,7 +44,7 @@ EXPLAIN (COSTS false) EXECUTE p1; -- 9.2:パラメータがない場合は、1回目のEXPLAINで実行計画が決定する /* NestLoop(t1 t2) */ PREPARE p2 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; -INFO: /* +LOG: /* NestLoop(t1 t2) */ /* HashJoin(t1 t2) */ @@ -81,7 +82,7 @@ EXPLAIN (COSTS false) EXECUTE p2; -- 9.2:5回目のEXPLAINまでヒント句を指定しても、6回目以降は本来の実行計画に戻る /* NestLoop(t1 t2) */ PREPARE p3 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; -INFO: /* +LOG: /* NestLoop(t1 t2) */ /* HashJoin(t1 t2) */ @@ -173,7 +174,7 @@ EXPLAIN (COSTS false) EXECUTE p3 (10); -- 9.2:6回目のEXPLAINまでヒント句を指定すると、7回目以降も実行計画が固定される /* NestLoop(t1 t2) */ PREPARE p4 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; -INFO: /* +LOG: /* NestLoop(t1 t2) */ /* HashJoin(t1 t2) */ @@ -266,7 +267,7 @@ EXPLAIN (COSTS false) EXECUTE p4 (10); -- 9.2:6回目のEXPLAINでヒント句を指定すると、7回目以降も実行計画を制御できる /* NestLoop(t1 t2) */ PREPARE p5 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; -INFO: /* +LOG: /* NestLoop(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p5 (10); @@ -356,7 +357,7 @@ EXPLAIN (COSTS false) EXECUTE p5 (10); -- 9.2:7回目以降のEXPLAINでヒント句を指定しても、以降も実行計画は制御できない /* NestLoop(t1 t2) */ PREPARE p6 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; -INFO: /* +LOG: /* NestLoop(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p6 (10); @@ -445,7 +446,7 @@ EXPLAIN (COSTS false) EXECUTE p6 (10); -- 9.2:実行計画が固定されたあと、ANALYZEをすると1回目のEXECUTEで実行計画が固定される /* NestLoop(t1 t2) */ PREPARE p7 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; -INFO: /* +LOG: /* NestLoop(t1 t2) */ /* HashJoin(t1 t2) */ @@ -585,7 +586,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN diff --git a/expected/prepare-9.2.out b/expected/prepare-9.2.out index 813e790..748c6a5 100644 --- a/expected/prepare-9.2.out +++ b/expected/prepare-9.2.out @@ -1,6 +1,7 @@ LOAD 'pg_hint_plan'; SET pg_hint_plan.enable TO on; SET pg_hint_plan.debug_print TO true; +SET client_min_messages TO 'LOG'; EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; QUERY PLAN ------------------------------------------------- @@ -42,7 +43,7 @@ EXPLAIN (COSTS false) EXECUTE p1; PREPARE p2 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p2; -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -83,7 +84,7 @@ EXPLAIN (COSTS false) EXECUTE p2; PREPARE p3 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p3 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -99,7 +100,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p3 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -115,7 +116,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p3 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -131,7 +132,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p3 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -147,7 +148,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p3 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -200,7 +201,7 @@ EXPLAIN (COSTS false) EXECUTE p3 (10); PREPARE p4 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -216,7 +217,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -232,7 +233,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -248,7 +249,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -264,7 +265,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -280,7 +281,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p4 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -379,10 +380,10 @@ EXPLAIN (COSTS false) EXECUTE p5 (10); /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p5 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -398,7 +399,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p5 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -414,7 +415,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p5 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -528,7 +529,7 @@ EXPLAIN (COSTS false) EXECUTE p6 (10); PREPARE p7 AS SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > $1; /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -544,7 +545,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -560,7 +561,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -576,7 +577,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -592,7 +593,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -608,7 +609,7 @@ HashJoin(t1 t2) /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN @@ -697,7 +698,7 @@ EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id /* HashJoin(t1 t2) */ EXPLAIN (COSTS false) EXECUTE p7 (10); -INFO: /* +LOG: /* HashJoin(t1 t2) */ QUERY PLAN diff --git a/pg_hint_plan.c b/pg_hint_plan.c index b38316e..b7dc10e 100644 --- a/pg_hint_plan.c +++ b/pg_hint_plan.c @@ -56,7 +56,7 @@ PG_MODULE_MAGIC; #define HINT_ARRAY_DEFAULT_INITSIZE 8 #define parse_ereport(str, detail) \ - ereport(pg_hint_plan_parse_message, \ + ereport(pg_hint_plan_parse_messages, \ (errmsg("hint syntax error at or near \"%s\"", (str)), \ errdetail detail)) @@ -175,9 +175,9 @@ static void set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblE /* GUC variables */ static bool pg_hint_plan_enable = true; static bool pg_hint_plan_debug_print = false; -static int pg_hint_plan_parse_message = INFO; +static int pg_hint_plan_parse_messages = INFO; -static const struct config_enum_entry parse_message_level_options[] = { +static const struct config_enum_entry parse_messages_level_options[] = { {"debug", DEBUG2, true}, {"debug5", DEBUG5, false}, {"debug4", DEBUG4, false}, @@ -257,12 +257,12 @@ _PG_init(void) NULL, NULL); - DefineCustomEnumVariable("pg_hint_plan.parse_message", + DefineCustomEnumVariable("pg_hint_plan.parse_messages", "Messege level of the parse error.", NULL, - &pg_hint_plan_parse_message, + &pg_hint_plan_parse_messages, INFO, - parse_message_level_options, + parse_messages_level_options, PGC_USERSET, 0, NULL, @@ -456,7 +456,7 @@ PlanHintDump(PlanHint *hint) if (!hint) { - elog(INFO, "no hint"); + elog(LOG, "no hint"); return; } @@ -559,7 +559,7 @@ PlanHintDump(PlanHint *hint) appendStringInfoString(&buf, "*/"); - elog(INFO, "%s", buf.data); + elog(LOG, "%s", buf.data); pfree(buf.data); } @@ -687,7 +687,7 @@ set_config_options(List *options, GucContext context) if (result > 0) result = set_config_option(hint->name, hint->value, context, PGC_S_SESSION, GUC_ACTION_SAVE, true, - pg_hint_plan_parse_message); + pg_hint_plan_parse_messages); } return save_nestlevel; diff --git a/sql/prepare.sql b/sql/prepare.sql index 89ed91f..e1af461 100644 --- a/sql/prepare.sql +++ b/sql/prepare.sql @@ -1,6 +1,7 @@ LOAD 'pg_hint_plan'; SET pg_hint_plan.enable TO on; SET pg_hint_plan.debug_print TO true; +SET client_min_messages TO 'LOG'; EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id; EXPLAIN (COSTS false) SELECT count(*) FROM t1, t2 WHERE t1.id = t2.id AND t1.id > 10;