Skip to content

Commit

Permalink
Merge pg_hint_plan tag 'YB_REL11_1_3_7' into yb-pg-hint-plan
Browse files Browse the repository at this point in the history
  • Loading branch information
jaki committed Mar 14, 2024
2 parents e40d381 + 787901c commit ac30b06
Show file tree
Hide file tree
Showing 44 changed files with 46,641 additions and 8 deletions.
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
# Global excludes across all subdirectories
*.o
*.so
tags
regression.*
*.tar.gz

# Generated subdirectories
/.deps/
/log/
/results/
/tmp_check/
/RPMS/
41 changes: 41 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,61 @@
#
# pg_hint_plan: Makefile
#
# Copyright (c) 2012-2020, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
#

MODULES = pg_hint_plan
HINTPLANVER = 1.3.7

REGRESS = init base_plan pg_hint_plan ut-init ut-A ut-S ut-J ut-L ut-G ut-R ut-fdw ut-W ut-T ut-fini

REGRESSION_EXPECTED = expected/init.out expected/base_plan.out expected/pg_hint_plan.out expected/ut-A.out expected/ut-S.out expected/ut-J.out expected/ut-L.out expected/ut-G.out

REGRESS_OPTS = --encoding=UTF8

EXTENSION = pg_hint_plan
DATA = pg_hint_plan--*.sql

EXTRA_CLEAN = sql/ut-fdw.sql expected/ut-fdw.out RPMS

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

STARBALL11 = pg_hint_plan11-$(HINTPLANVER).tar.gz
STARBALLS = $(STARBALL11)

TARSOURCES = Makefile *.c *.h COPYRIGHT* \
pg_hint_plan--*.sql \
pg_hint_plan.control \
doc/* expected/*.out sql/*.sql sql/maskout.sh \
data/data.csv input/*.source output/*.source SPECS/*.spec

LDFLAGS += -lyb_pggate_util
LDFLAGS += -L${BUILD_ROOT}/lib

ifneq ($(shell uname), SunOS)
LDFLAGS+=-Wl,--build-id
endif

installcheck: $(REGRESSION_EXPECTED)

rpms: rpm11

# pg_hint_plan.c includes core.c and make_join_rel.c
pg_hint_plan.o: core.c make_join_rel.c # pg_stat_statements.c

$(STARBALLS): $(TARSOURCES)
if [ -h $(subst .tar.gz,,$@) ]; then rm $(subst .tar.gz,,$@); fi
if [ -e $(subst .tar.gz,,$@) ]; then \
echo "$(subst .tar.gz,,$@) is not a symlink. Stop."; \
exit 1; \
fi
ln -s . $(subst .tar.gz,,$@)
tar -chzf $@ $(addprefix $(subst .tar.gz,,$@)/, $^)
rm $(subst .tar.gz,,$@)

rpm11: $(STARBALL11)
MAKE_ROOT=`pwd` rpmbuild -bb SPECS/pg_hint_plan11.spec


110 changes: 110 additions & 0 deletions SPECS/pg_hint_plan11.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# SPEC file for pg_hint_plan
# Copyright(C) 2020 NIPPON TELEGRAPH AND TELEPHONE CORPORATION

%define _pgdir /usr/pgsql-11
%define _bindir %{_pgdir}/bin
%define _libdir %{_pgdir}/lib
%define _datadir %{_pgdir}/share
%define _bcdir %{_libdir}/bitcode
%define _mybcdir %{_bcdir}/pg_hint_plan

%if "%(echo ${MAKE_ROOT})" != ""
%define _rpmdir %(echo ${MAKE_ROOT})/RPMS
%define _sourcedir %(echo ${MAKE_ROOT})
%endif

## Set general information for pg_hint_plan.
Summary: Optimizer hint on PostgreSQL 11
Name: pg_hint_plan11
Version: 1.3.7
Release: 1%{?dist}
License: BSD
Group: Applications/Databases
Source0: %{name}-%{version}.tar.gz
URL: https://github.com/ossc-db/pg_hint_plan
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n)
Vendor: NIPPON TELEGRAPH AND TELEPHONE CORPORATION

## We use postgresql-devel package
BuildRequires: postgresql11-devel
Requires: postgresql11-server

## Description for "pg_hint_plan"
%description

pg_hint_plan provides capability to tweak execution plans to be
executed on PostgreSQL.

Note that this package is available for only PostgreSQL 11.

%package llvmjit
Requires: postgresql11-server, postgresql11-llvmjit
Requires: pg_hint_plan11 = 1.3.7
Summary: Just-in-time compilation support for pg_hint_plan11

%description llvmjit
Just-in-time compilation support for pg_hint_plan11

## pre work for build pg_hint_plan
%prep
PATH=/usr/pgsql-11/bin:$PATH
if [ "${MAKE_ROOT}" != "" ]; then
pushd ${MAKE_ROOT}
make clean %{name}-%{version}.tar.gz
popd
fi
if [ ! -d %{_rpmdir} ]; then mkdir -p %{_rpmdir}; fi
%setup -q

## Set variables for build environment
%build
PATH=/usr/pgsql-11/bin:$PATH
make USE_PGXS=1 %{?_smp_mflags}

## Set variables for install
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

%clean
rm -rf %{buildroot}

%files
%defattr(0755,root,root)
%{_libdir}/pg_hint_plan.so
%defattr(0644,root,root)
%{_datadir}/extension/pg_hint_plan--1.3.2--1.3.3.sql
%{_datadir}/extension/pg_hint_plan--1.3.3--1.3.4.sql
%{_datadir}/extension/pg_hint_plan--1.3.4--1.3.5.sql
%{_datadir}/extension/pg_hint_plan--1.3.5--1.3.6.sql
%{_datadir}/extension/pg_hint_plan--1.3.6--1.3.7.sql
%{_datadir}/extension/pg_hint_plan--1.3.7.sql
%{_datadir}/extension/pg_hint_plan.control

%files llvmjit
%defattr(0755,root,root)
%{_mybcdir}
%defattr(0644,root,root)
%{_bcdir}/pg_hint_plan.index.bc
%{_mybcdir}/pg_hint_plan.bc

# History of pg_hint_plan.
%changelog
* Thu Oct 29 2020 Kyotaro Horiguchi
- Fix a bug. Version 1.3.7.
* Wed Aug 5 2020 Kyotaro Horiguchi
- Fix some bugs. Version 1.3.6.
* Thu Feb 21 2020 Kyotaro Horiguchi
- Fix some bugs. Version 1.3.5.
* Thu Jan 17 2019 Kyotaro Horiguchi
- Fix some bugs. Version 1.3.4.
* Tue Nov 13 2018 Kyotaro Horiguchi
- Support PostgreSQL 11. Version 1.3.2.
* Fri Jun 08 2018 Kyotaro Horiguchi
- Fixed a crash bug. Version 1.3.1.
* Tue Oct 10 2017 Kyotaro Horiguchi
- Support PostgreSQL 10. Version 1.3.0.
* Tue Feb 7 2017 Kyotaro Horiguchi
- Added new hint Parallel. Version 1.2.0.
* Thu Jul 21 2016 Kyotaro Horiguchi
- Support PostgreSQL 9.6
2 changes: 1 addition & 1 deletion core.c
Original file line number Diff line number Diff line change
Expand Up @@ -958,7 +958,7 @@ mark_dummy_rel(RelOptInfo *rel)
MemoryContext oldcontext;

/* Already marked? */
if (IS_DUMMY_REL(rel))
if (is_dummy_rel(rel))
return;

/* No, so choose correct context to make the dummy path in */
Expand Down
10 changes: 10 additions & 0 deletions data/data.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
1,1
2,2
3,3
4,4
5,5
6,6
7,7
8,8
9,9
10,10
113 changes: 113 additions & 0 deletions doc/hint_list-ja.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD html 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Appendix A. ヒント句一覧</title>
<!-- Uncoment after the tool has been hosted somewhere.
<link rel="home" title="pg_hint_plan" href="index.html">
-->
<link rel="stylesheet" type="text/css" href="style.css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

<body>
<h1 id="pg_hint_plan">pg_hint_plan 1.3 付録</h1>
<div class="navigation">
<a href="pg_hint_plan-ja.html">pg_hint_plan</a> &gt;
<a href="hint_list-ja.html">Appendix A. ヒント句一覧</a>
</div>
<hr>

<h2 id="hint-list">Appendix A. ヒント句一覧</h2>
<p>pg_hint_planで指定できるヒント句は以下の通りです。</p>
<table>
<thead>
<tr>
<tr><th>グループ</th><th>ヒント句の書式</th><th>説明</th></tr>
</tr>
</thead>
<tbody>
<tr><td rowspan="11" nowrap>スキャン方式</td>
<td nowrap>SeqScan(テーブル)</td>
<td>指定したテーブルについて、Seq Scanを選択します。</td></tr>
<tr><td nowrap>TidScan(テーブル)</td>
<td>指定したテーブルについて、Tid Scanを選択します。検索条件にctidを指定した場合にのみ有効です。</td></tr>
<tr><td nowrap>IndexScan(テーブル[ インデックス...])</td>
<td>指定したテーブルについて、Index Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるIndex Scanを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。<br>
継承関係の親テーブルとそのテーブルのインデックスを指定した場合は、子テーブルに対してそのインデックスと同様の定義のインデックスを選択します。</td></tr>
<tr><td nowrap>IndexOnlyScan(テーブル[ インデックス...])</td>
<td>指定したテーブルについて、Index Only ScanとIndex Scanのうちコストが最小となるスキャン方式を選択します。インデックスも指定した場合は、指定したインデックスの中でIndex Only ScanとIndex Scanのうちコストが最小となるスキャン方式を選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。また、これらの場合以外にも、インデックスが持つ値だけでなくテーブルの値も必要な場合はIndex Scanを選択します。<br>
継承関係の親テーブルとそのテーブルのインデックスを指定した場合は、子テーブルに対してそのインデックスと同様の定義のインデックスを選択します。
PostgreSQL 9.2以降で動作します。</td></tr>
<tr><td nowrap>BitmapScan(テーブル[ インデックス...])</td>
<td>指定したテーブルについて、Bitmap Scanを選択します。インデックスも指定した場合は、指定したインデックスの中でコストが最小となるインデックスを選択します。ただし、インデックスが存在しない場合や指定したインデックスがWHERE句やJOIN条件などに関連しない場合はSeq Scanを選択します。<br>
継承関係の親テーブルとそのテーブルのインデックスを指定した場合は、子テーブルに対してそのインデックスと同様の定義のインデックスを選択します。</td></tr>
<tr><td nowrap>IndexScanRegexp(テーブル[ POSIX正規表現...])</br>IndexOnlyScanRegexp(テーブル[ POSIX正規表現...])</br>BitmapScanRegexp(テーブル[ POSIX正規表現...])</td>
<td>テーブルのみを指定した場合のスキャン方式の選択基準は、Regexpの付かないスキャン方式のヒントと同じです。<a href="http://www.postgresql.jp/document/current/html/functions-matching.html#FUNCTIONS-POSIX-REGEXP">POSIX正規表現</a>も指定した場合は、指定したPOSIX正規表現パターンに一致するインデックスの中でコストが最小となるスキャン方式を選択します。指定したテーブルが継承テーブルの場合は、子テーブルについても同じ基準で、使用するインデックスとスキャン方式を選択します。IndexOnlyScanRegexpヒントはPostgreSQL 9.2以降で動作します。</td></tr>
<tr><td nowrap>NoSeqScan(テーブル)</td>
<td>指定したテーブルについて、Seq Scan以外でコストが最小となるスキャン方式を選択します。ただし、他のスキャン方式を選択できない場合は、Seq Scanを選択します。</td></tr>
<tr><td nowrap>NoTidScan(テーブル)</td>
<td>指定したテーブルについて、Tid Scan以外でコストが最小となるスキャン方式を選択します。</td></tr>
<tr><td nowrap>NoIndexScan(テーブル)</td>
<td>指定したテーブルについて、Index ScanとIndex Only Scanを除いたスキャン方式の中でコストが最小となるスキャン方式を選択します。</td></tr>
<tr><td nowrap>NoIndexOnlyScan(テーブル)</td>
<td>指定したテーブルについて、Index Only Scan以外でコストが最小となるスキャン方式を選択します。PostgreSQL 9.2以降で動作します。</td></tr>
<tr><td nowrap>NoBitmapScan(テーブル)</td>
<td>指定したテーブルについて、Bitmap Scan以外でコストが最小となるスキャン方式を選択します。</td></tr>

<tr><td rowspan="6" nowrap>結合方式</td>
<td nowrap>NestLoop(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にNested Loopを選択します。</td></tr>
<tr><td nowrap>HashJoin(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にHash Joinを選択します。</td></tr>
<tr><td nowrap>MergeJoin(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にMerge Joinを選択します。</td></tr>
<tr><td nowrap>NoNestLoop(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にNested Loop以外の結合方式を選択します。</td></tr>
<tr><td nowrap>NoHashJoin(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にHash Join以外の結合方式を選択します。</td></tr>
<tr><td nowrap>NoMergeJoin(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブル間の結合にMerge Join以外の結合方式を選択します。</td></tr>

<tr><td rowspan="2">結合順序</td>
<td nowrap>Leading(テーブル テーブル[ テーブル...])</td>
<td>指定したテーブルを指定した順番通りに結合します。</td></tr>
<tr><td nowrap>Leading((テーブル集合<Sup>注1</Sup> テーブル集合<Sup>注1</Sup>))</td>
<td>1つ目に指定したテーブル集合を外部表として、2つ目に指定したテーブル集合を内部表として結合します。書式中のテーブル集合はテーブルもしくは別のテーブル集合です。</td></tr>

<tr><td>見積もり件数補正</td>
<td nowrap>Rows(テーブル テーブル[ テーブル...] 件数補正)</td>
<td>指定したテーブル間の結合結果の見積もり件数を補正します。件数補正として指定できるのは以下の4パターンです。
<p><dl>
<dt>#件数</dt><dd>指定した件数で本来の見積もり件を上書きします。</dd>
<dt>+件数</dt><dd>指定した件数を本来の見積もり件数に加算します。</dd>
<dt>-件数</dt><dd>指定した件数を本来の見積もり件数から減算します。</dd>
<dt>*倍率</dt><dd>本来の見積もり件数を指定した倍率に補正します。「*2」とすると見積もり件数が2倍になり、「*0.01」とすると見積もり件数が1/100になります。</dd>
</dl></p>
なお、件数や倍率には、strtod()が解釈できる書式で数値を指定してください。
</td></tr>

<tr><td>パラレル実行の制御</td>
<td nowrap>Parallel(テーブル ワーカ数 [強制度])</td>
<td>パラレル実行を強制あるいは禁止します。ワーカ数が0の場合はパラレル実行を禁止します。強制度はワーカ数の適用方法を指定するもので "hard" または "soft" を指定します。デフォルト値である"soft"の場合は max_parallel_workers_per_gather のみを変更してあとはプランナに任せます。そして"hard" の場合は指定したワーカ数を強制します。</td>

</td></tr>

<tr><td>GUCパラメータ</td>
<td nowrap>Set(GUCパラメータ 値)</td>
<td>そのクエリの実行計画を作成している間だけ、指定したGUCパラメータを指定した値に変更します。</td></tr>
</tbody>
</table></p>
<dt>
<Sup>注1</Sup>テーブル集合とは、以下のような記述を指しています。</dt>
<dd>テーブル集合 = {テーブル|(テーブル集合 テーブル集合)}</dd>


<hr>
<div class="navigation">
<a href="pg_hint_plan-ja.html">pg_hint_plan</a> &gt;
<a href="hint_list-ja.html">Appendix A. ヒント句一覧</a>
</div>

<p class="footer">Copyright (c) 2012-2020, NIPPON TELEGRAPH AND TELEPHONE CORPORATION</p>
</body>
</html>
Loading

0 comments on commit ac30b06

Please sign in to comment.