OSDN Git Service

バージョンなど、既存の記述から変更の合った部分を修正した。
authorMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Fri, 13 Jul 2012 06:31:52 +0000 (15:31 +0900)
committerMitsuru Hasegawa <hasegawa@metrosystems.co.jp>
Fri, 13 Jul 2012 06:31:52 +0000 (15:31 +0900)
doc/hint_list-ja.html
doc/pg_hint_plan-ja.html

index 7b2ba78..704e8b4 100644 (file)
@@ -26,7 +26,7 @@
 </tr>
 </thead>
 <tbody>
-<tr><td rowspan="10" nowrap>スキャン方式</td>
+<tr><td rowspan="8" nowrap>スキャン方式</td>
   <td nowrap>SeqScan(テーブル)</td>
   <td>指定したテーブルについて、Seq Scanを選択します。</td></tr>
 <tr><td>TidScan(テーブル)</td>
@@ -35,8 +35,6 @@
   <td>指定したテーブルについて、Index Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるIndex Scanを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。</td></tr>
 <tr><td nowrap>BitmapScan(テーブル[ インデックス...])</td>
   <td>指定したテーブルについて、Bitmap Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるインデックスを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。</td></tr>
-<tr><td nowrap>IndexOnlyScan(テーブル[ インデックス...])</td>
-  <td>指定したテーブルについて、Index Only Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるIndex Scanを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。PostgreSQL 9.2 以降でのみ有効な機能です。</td></tr>
 <tr><td nowrap>NoSeqScan(テーブル)</td>
   <td>指定したテーブルについて、Seq Scan以外でコストが最小となるスキャン方式を選択します。ただし、他のスキャン方式を選択できない場合は、Seq Scanを選択します。</td></tr>
 <tr><td nowrap>NoTidScan(テーブル)</td>
@@ -45,8 +43,6 @@
   <td>指定したテーブルについて、Index Scan以外でコストが最小となるスキャン方式を選択します。</td></tr>
 <tr><td nowrap>NoBitmapScan(テーブル)</td>
   <td>指定したテーブルについて、Bitmap Scan以外でコストが最小となるスキャン方式を選択します。</td></tr>
-<tr><td nowrap>NoIndexOnlyScan(テーブル)</td>
-  <td>指定したテーブルについて、Index Only Scan以外でコストが最小となるスキャン方式を選択します。PostgreSQL 9.2 以降でのみ有効なヒントです。</td></tr>
 
 <tr><td rowspan="6" nowrap>結合方式</td>
   <td nowrap>NestLoop(テーブル テーブル[ テーブル...])</td>
@@ -56,7 +52,7 @@
 <tr><td nowrap>MergeJoin(テーブル テーブル[ テーブル...])</td>
   <td>指定したテーブル間の結合にMerge Joinを選択します。</td></tr>
 <tr><td nowrap>NoNestLoop(テーブル テーブル[ テーブル...])</td>
-  <td>指定したテーブル間の結合にNested Loop以外の結合方式を選択します。他の結合方式を選択できない場合は、Nested Loopを選択します。</td></tr>
+  <td>指定したテーブル間の結合にNested Loop以外の結合方式を選択します。</td></tr>
 <tr><td nowrap>NoHashJoin(テーブル テーブル[ テーブル...])</td>
   <td>指定したテーブル間の結合にHash Join以外の結合方式を選択します。</td></tr>
 <tr><td nowrap>NoMergeJoin(テーブル テーブル[ テーブル...])</td>
index 2cdf77b..2dc5fc9 100644 (file)
@@ -10,7 +10,7 @@
 </head>
 
 <body>
-<h1 id="pg_hint_plan">pg_hint_plan 0.1.0</h1>
+<h1 id="pg_hint_plan">pg_hint_plan 1.0.0</h1>
 <div class="navigation">
   <a href="pg_hint_plan-ja.html">pg_hint_plan</a>
 </div>
@@ -36,7 +36,6 @@
 </ol>
 </li>
 <li><a href="#restrictions">使用上の注意と制約</a></li>
-<li><a href="#known-issues">既知の問題</a></li>
 <li><a href="#seealso">関連項目</a></li>
 <li><a href="hint_list-ja.html">Appendix A. ヒント一覧</a></li>
 </div>
 <h3 id="requirement">動作環境</h3>
 <dl>
 <dt>PostgreSQL</dt>
-  <dd>バージョン 9.1.3</dd>
-  <dd>バージョン 9.2devel 4月2日版</dd>
-<dt>動作検証済みOS</dt><dd>RHEL 6.1</dd>
+  <dd>バージョン 9.1.4</dd>
+<dt>動作検証済みOS</dt>
+  <dd>RHEL 6.1</dd>
 </dl>
 
 <h3 id="build">ビルド</h3>
-<p>pg_hint_planをソースコードからビルドする場合、pg_hint_planのソースを展開したディレクトリでmake → make installの順に実行してください。なお、pg_hint_planのビルドにはpgxsを使用するので、RPM版のPostgreSQLを使用している環境では、postgresql-devel パッケージが必要です。</p>
+<p>pg_hint_planをソースコードからビルドする場合、pg_hint_planのソースを展開したディレクトリでmake → make installの順に実行してください。make installはPostgreSQLをインストールしたOSユーザで実行してください。なお、pg_hint_planのビルドにはpgxsを使用するので、RPM版のPostgreSQLを使用している環境では、postgresql-devel パッケージが必要です。</p>
 <p>以下にビルドの例を示します。</p>
 <pre>
-$ tar xzvf pg_hint_plan-0.1.0.tar.gz
-$ cd pg_hint_plan-0.1.0
+$ tar xzvf pg_hint_plan-1.0.0.tar.gz
+$ cd pg_hint_plan-1.0.0
 $ make
-$ make install
+$ su
+# make install
 </pre>
 
 <h2 id="uninstall">アンインストール</h2>
 <p>pg_hint_planをアンインストールするには、pg_hint_planのソースを展開したディレクトリでmake uninstallを実行してください。</p>
 <p>以下にアンインストールの例を示します。</p>
 <pre>
-$ cd pg_hint_plan-0.1.0
-$ make uninstall
+$ cd pg_hint_plan-1.0.0
+$ su
+# make uninstall
 </pre>
 
 <h2 id="usage">使い方</h2>
@@ -87,7 +88,7 @@ LOAD
 postgres=# </pre>
 
 <h3 id="hint-rule">ヒントの記述方法</h3>
-<p>ヒントはクエリの前のブロックコメント内に、スペース、タブ、または改行のいずれかで区切って記述してください。ブロックコメントをヒントとして認識させるには、ブロックコメントの開始直後に+(プラス)を指定する必要があります。ヒントの対象は、カッコ内にオブジェクト名または別名(エイリアス)で指定してください。</p>
+<p>ヒントはクエリ文字列の先頭のブロックコメント内に記述してください。ブロックコメントをヒントとして認識させるには、ブロックコメントの開始直後にプラス(+)を指定する必要があります。ヒントの対象は、カッコ内にオブジェクト名または別名(エイリアス)で指定してください。オブジェクト名は、スペース、タブ、または改行のいずれかで区切って指定してください。</p>
 
 <p>以下の例では、HashJoinとSeqScanヒントにより、pgbench_accountsテーブルに対するSeq Scanの結果をHash Joinする実行計画が選択されています。</p>
 <pre>
@@ -113,24 +114,24 @@ postgres-#   ORDER BY a.aid;
 postgres=# </pre>
 
 <h3 id="hint-group">ヒントのグループ</h3>
-<p>pg_hint_planã\81§ä½¿ã\81\88ã\82\8bã\83\92ã\83³ã\83\88ã\81¯ã\80\81ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81¨çµ\90å\90\88æ\96¹å¼\8fã\80\81çµ\90å\90\88é \86åº\8fã\80\81GUCã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\81®4ã\82°ã\83«ã\83¼ã\83\97ã\81«å\88\86ã\81\91ã\82\89ã\82\8cã\81¾ã\81\99ã\80\82å\90\8cã\81\98ã\82°ã\83«ã\83¼ã\83\97ã\81®ã\83\92ã\83³ã\83\88ã\82\92å\90\8cã\81\98ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81«å¯¾ã\81\97ã\81¦æ\8c\87å®\9aã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81æ\9c\80å¾\8cã\81«æ\8c\87å®\9aã\81\97ã\81\9fã\83\92ã\83³ã\83\88ã\81\8cé\81©ç\94¨ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82å\90\84ã\82°ã\83«ã\83¼ã\83\97ã\81®å\85·ä½\93ç\9a\84ã\81ªã\83\92ã\83³ã\83\88ã\81¯ã\80\81<a href="hint_list-ja.html">ã\83\92ã\83³ã\83\88ä¸\80覧</a>ã\82\92å\8f\82ç\85§ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82</p>
+<p>pg_hint_planで使えるヒントは、スキャン方式と結合方式、結合順序、GUCパラメータの4グループに分けられます。各グループの具体的なヒントは、<a href="hint_list-ja.html">ヒント一覧</a>を参照してください。</p>
 
 <h4>スキャン方式</h4>
-<p>ã\81\82ã\82\8bã\83\86ã\83¼ã\83\96ã\83«ã\81®ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\99ã\82\8bã\81\8bã\82\92æ\8c\87å®\9aã\81§ã\81\8dã\82\8bã\83\92ã\83³ã\83\88ã\81®ã\82°ã\83«ã\83¼ã\83\97ã\81§ã\80\81ã\80\8cSeqScanã\80\8dã\82\84ã\80\8cIndexScanã\80\8dã\81ªã\81©ã\81\8cå\90«ã\81¾ã\82\8cã\81¾ã\81\99</p>
-<p>ç\89¹å®\9aã\81®ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\81\82ã\82\8bã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\97ã\81¦æ¬²ã\81\97ã\81\84å ´å\90\88ã\81¯ã\80\81ã\81\9dã\81®ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81®ã\83\92ã\83³ã\83\88ã\81¨ã\80\81対象ã\81¨ã\81ªã\82\8bã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®å\90\8då\89\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82é\80\86ã\81«ã\80\81ç\89¹å®\9aã\81®ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\81\82ã\82\8bã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\97ã\81¦æ¬²ã\81\97ã\81\8fã\81ªã\81\84å ´å\90\88ã\81¯ã\80\81Noã\81§å§\8bã\81¾ã\82\8bã\83\92ã\83³ã\83\88ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。</p>
+<p>ã\81\82ã\82\8bã\83\86ã\83¼ã\83\96ã\83«ã\81§ã\81©ã\81®ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\99ã\82\8bã\81\8bã\82\92æ\8c\87å®\9aã\81§ã\81\8dã\82\8bã\83\92ã\83³ã\83\88ã\81®ã\82°ã\83«ã\83¼ã\83\97ã\81§ã\80\81ã\80\8cSeqScanã\80\8dã\82\84ã\80\8cIndexScanã\80\8dã\81ªã\81©ã\81\8cå\90«ã\81¾ã\82\8cã\81¾ã\81\99ã\80\82</p>
+<p>ç\89¹å®\9aã\81®ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\81\82ã\82\8bã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\97ã\81¦æ¬²ã\81\97ã\81\84å ´å\90\88ã\81¯ã\80\81ã\81\9dã\81®ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81®ã\83\92ã\83³ã\83\88ã\81¨ã\80\81対象ã\81¨ã\81ªã\82\8bã\83\86ã\83¼ã\83\96ã\83«ã\81®å\90\8då\89\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82é\80\86ã\81«ã\80\81ç\89¹å®\9aã\81®ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\81¤ã\81\84ã\81¦ã\81\82ã\82\8bã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\82\92é\81¸æ\8a\9eã\81\97ã\81¦æ¬²ã\81\97ã\81\8fã\81ªã\81\84å ´å\90\88ã\81¯ã\80\81Noã\81§å§\8bã\81¾ã\82\8bã\83\92ã\83³ã\83\88ã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82å\90\8cã\81\98ã\83\86ã\83¼ã\83\96ã\83«ã\81«å¯¾ã\81\97ã\81¦è¤\87æ\95°ã\81®ã\82¹ã\82­ã\83£ã\83³æ\96¹å¼\8fã\81®ã\83\92ã\83³ã\83\88ã\82\92æ\8c\87å®\9aã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81æ\9c\80å¾\8cã\81«æ\8c\87å®\9aã\81\97ã\81\9fã\83\92ã\83³ã\83\88ã\81\8cé\81©ç\94¨ã\81\95ã\82\8cã\81¾ã\81\99。</p>
 
 <h4>結合方式</h4>
-<p>あるテーブル結合の組み合わせでどの結合方式を選択するかを指定できるヒントのグループで、「MergeJoin」や「NestLoop」などが含まれます。</p>
-<p>特定のテーブルの組み合わせについてある結合方式を選択して欲しい場合は、その結合方式のヒントと、対象となる2つ以上のテーブルの名前を指定してください。逆に、特定の結合方式を選択して欲しくない場合は、Noで始まるヒントを指定してください。</p>
+<p>あるテーブルの組み合わせでどの結合方式を選択するかを指定できるヒントのグループで、「MergeJoin」や「NestLoop」などが含まれます。</p>
+<p>特定のテーブルの組み合わせについてある結合方式を選択して欲しい場合は、その結合方式のヒントと、対象となる2つ以上のテーブルの名前を指定してください。逆に、特定のテーブルの組み合わせについてある結合方式を選択して欲しくない場合は、Noで始まるヒントを指定してください。同じテーブルの組み合わせに対して複数の結合方式のヒントを指定した場合は、最後に指定したヒントが適用されます。</p>
 <h4>結合順序</h4>
-<p>特定のテーブル結合の組み合わせでどのような順番で結合するか指定できるヒントのグループで、現在は「Leading」のみです。</p>
-<p>先に結合して欲しいテーブルから順にテーブル名またはテーブル別名を指定してください。</p>
+<p>あるテーブルの組み合わせでどのような順番で結合するかを指定できるヒントのグループで、「Leading」のみが含まれます。</p>
+<p>先に結合して欲しいテーブルから順にテーブル名または別名を指定してください。複数の結合順序のヒントを指定した場合は、最後に指定したヒントが適用されます。</p>
 <h4>GUCパラメータ</h4>
-<p>そのクエリの実行計画を作成している間だけGUCパラメータを変更できるヒントのグループで、現在は「Set」のみです。</p>
-設定したいGUCパラメータとそのパラメータの値を指定してください。ただし、指定する値に小文字とアンダースコア(_)以外の文字(大文字、数字、スペースなど)を含む場合はダブルクォート(")で囲んでください。</p>
+<p>そのクエリの実行計画を作成している間だけGUCパラメータを変更できるヒントのグループで、「Set」のみが含まれます。</p>
+<p>設定したいGUCパラメータとそのパラメータの値を指定してください。<a href="http://www.postgresql.org/docs/9.1/static/sql-set.html">SET</a>コマンドで指定できるGUCパラメータならば全て指定できますが、効果があるのは<a href="http://www.postgresql.org/docs/9.1/static/runtime-config-query.html">問い合わせ計画</a>のGUCパラメータのみです。同じGUCパラメータに対して複数のGUCパラメータのヒントを指定した場合は、最後に指定したヒントが適用されます。</p>
 
 <h3 id="hint-GUC">pg_hint_planのGUCパラメータ</h3>
-<p>pg_hint_planã\83\84ã\83¼ã\83«ã\81«é\96¢するGUCパラメータを以下に記述します。</p>
+<p>pg_hint_planã\81®å\8b\95ä½\9cã\82\92å\88¶å¾¡するGUCパラメータを以下に記述します。</p>
 <table>
 <thead>
 <tr>
@@ -145,6 +146,14 @@ postgres=# </pre>
   <td>指定したヒントを解釈できなかった場合に、どのメッセージ階層でログを出力するかを指定します。有効な値は、debug5、debug4、debug3、debug2、debug1、log、info、notice、warning、またはerrorです。fatalとpanicは指定できません。</td><td>info</td></tr>
 </tbody>
 </table>
+<p>これらのパラメータをpostgresql.confファイルに設定するには、<a href="http://www.postgresql.org/docs/9.1/static/runtime-config-custom.html#GUC-CUSTOM-VARIABLE-CLASSES">custom_variable_classes</a>に auth_delayを加える必要があります。標準的な使用例は以下のようになります。</p>
+<pre>
+# postgresql.conf
+shared_preload_libraries = 'pg_hint_plan'
+
+custom_variable_classes = 'pg_hint_plan'
+pg_hint_plan.parse_messages = 'debug2'
+</pre>
 
 <h2 id="restrictions">使用上の注意と制約</h2>
 <p>pg_hint_planを使用する際には、以下の注意と制約があります。</p>
@@ -174,8 +183,13 @@ postgres-#   ORDER BY a.aid;
 
 postgres=# </pre>
 </dd>
+<<<<<<< HEAD
+<dt>オブジェクト名の引用符付け</dt>
+<dd>ヒントに記述するオブジェクト名や別名が閉じ括弧())、二重引用符(")、空白(スペース、タブ、または改行)を含む場合は、二重引用符で括ってください。二重引用符で括ったオブジェクト名に二重引用符を含めたい場合は、2つ続けて二重引用符を記述してください。</dd>
+=======
 <dt>オブジェクト名の引用</dt>
 <dd>ヒントに記述するオブジェクト名や別名が閉じ括弧())、二重引用符(")、空白(スペース、タブ、改行のいずれか)を含む場合は、通常のSQL文で使う場合と同じようにダブルクォート(")で囲んでください。二重引用符で括ったオブジェクト名に二重引用符を含めたい場合は、2つ続けて二重引用符を記述してください。</dd>
+>>>>>>> 793f34a5a3e09ccea910b8fb138e79d93a1327f1
 <dt>同一名称テーブルの区別</dt>
 <dd>スキーマ違いや同一テーブルの複数回使用などでクエリ中に同一名称のテーブルが複数回出現する場合は、テーブルに別名をつけてそれぞれのテーブルを区別してください。以下の例の1つ目のSQL文では、MergeJoin(t1 t1)をヒントに指定したとき、ヒント対象のオブジェクトが特定できずにエラーになっています。2つ目のSQL文では、各テーブルにptやstという別名をつけているため、実行計画作成時にヒントで指定した通りにMerge Joinを選択しています。
 </p>
@@ -214,21 +228,16 @@ postgres=#</pre>
 <dt>指定するヒントの種類の重複</dt>
 <dd>同じオブジェクトに対して同じグループのヒントを重複して指定した場合は、最後に指定したヒントを使用します。</dd>
 <dt>PREPARE/EXECUTEに対する制限</dt>
-<dd>実行計画を制御したいSQL文をPREPARE文とEXECUTE文で実行する場合は、PREPARE文だけでなくEXECUTE文にも同じヒントを指定してください。これは、EXECUTE文実行時に実行計画を再作成する場合があるためです。</dd>
+<dd>libpqプロトコルの拡張問い合わせプロトコルを使い、かつSQL文をPREPARE文とEXECUTE文で実行する場合は、pg_hint_planでは実行計画を制御できません。拡張問い合わせプロトコルで準備された文を使用したい場合は、各種ライブラリが用意しているプリペアド機能を使用してください。例えば、JDBCではクエリの実行に常に拡張問い合わせプロトコルが使われるため、準備した文が必要な場合はPreparedStatementを使用する必要があります。</dd>
 <dt>ビューに対する制限</dt>
 <dd>ビューを複数用いるときに、各ビュー内のテーブルの別名が重複した場合は、ヒントの対象を区別できません。区別する場合は、各ビュー内のテーブルの別名を重複させないでください。</dd>
 </dl>
 
-<h2 id="known-issues">既知の問題</h2>
-<p>pg_hint_planに関する既知の問題について説明します。</p>
-<dl>
-<dt>副問い合わせを含むSELECT文</dt>
-<dd id="view_limit">pg_hint_planの使用中に副問い合わせを含むSELECT文を実行すると、サーバ側で異常終了する場合があります。よって、pg_hint_planを試用しているときは、副問い合わせを含むSELECT文を実行しないでください。</dd>
-</dl>
-
 <h2 id="seealso">関連項目</h2>
 <h3 id="postgresql_document">PostgreSQLドキュメント</h3>
 <a href="http://www.postgresql.org/docs/9.1/static/sql-explain.html">EXPLAIN</a>
+<a href="http://www.postgresql.org/docs/9.1/static/sql-set.html">SET</a>
+<a href="http://www.postgresql.org/docs/9.1/static/runtime-config.html">サーバの設定</a>
 <hr>
 
 <div class="navigation">