เจเจงเฉเจจเจฟเจ CPU เจตเจฟเฉฑเจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจเฉเจฐ เจนเจจเฅค เจธเจพเจฒเจพเจ เจคเฉเจ, เจ
เจฐเจเจผเฉเจเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจคเฉเจฐ 'เจคเฉ เจกเฉเจเจพเจฌเฉเจธ เจจเฉเฉฐ เจธเจตเจพเจฒ เจญเฉเจ เจฐเจนเฉเจเจ เจนเจจเฅค เจเฉเจเจฐ เจเจน เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจคเฉเจ เจตเฉฑเจง เจเจคเจพเจฐเจพเจ 'เจคเฉ เจเฉฑเจ เจฐเจฟเจชเฉเจฐเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจนเฉ, เจคเจพเจ เจเจน เจเฉฑเจ เจคเฉเจ เจตเฉฑเจง CPUs เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจคเฉเจเจผเฉ เจจเจพเจฒ เจเฉฑเจฒเจฆเฉ เจนเฉ, เจ
เจคเฉ PostgreSQL เจธเฉฐเจธเจเจฐเจฃ 9.6 เจคเฉเจ เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเฅค
เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจตเจฟเฉฑเจ 3 เจธเจพเจฒ เจฒเฉฑเจ เจเจ - เจธเจพเจจเฉเฉฐ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจฆเฉ เจตเฉฑเจ-เจตเฉฑเจ เจชเฉเจพเจตเจพเจ 'เจคเฉ เจเฉเจก เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจเจฃเจพ เจชเจฟเจเฅค PostgreSQL 9.6 เจจเฉ เจเฉเจก เจจเฉเฉฐ เจนเฉเจฐ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเจพ เจชเฉเจธเจผ เจเฉเจคเจพเฅค เจฌเจพเจ เจฆ เจฆเฉ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจตเจฟเฉฑเจ, เจนเฉเจฐ เจเจฟเจธเจฎ เจฆเฉเจเจ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจฒเจพเจเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค
เจชเฉเจฐเจคเจฟเจฌเฉฐเจง
- เจเฉเจเจฐ เจธเจพเจฐเฉ เจเฉเจฐ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฐเฉเฉฑเจเฉ เจนเฉเจ เจนเจจ เจคเจพเจ เจธเจฎเจพเจเจคเจฐ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจจเจพ เจเจฐเฉ, เจจเจนเฉเจ เจคเจพเจ เจนเฉเจฐ เจฌเฉเจจเจคเฉเจเจ เจนเฉเจฒเฉ เจนเฉ เจเจพเจฃเจเฉเจเจเฅค
- เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ, เจเฉฑเจ WORK_MEM เจฎเฉเฉฑเจฒเจพเจ เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฎเฉเจฎเฉเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉ - เจนเจฐเฉเจ เจนเฉเจธเจผ เจเฉเฉเจจ เจเจพเจ เจฒเฉเฉเจฌเฉฑเจง เจเจฐเจจ เจจเจพเจฒ work_mem เจฎเฉเจฎเฉเจฐเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค
- เจเฉฑเจ เจฒเฉเจเฉเจเจธเฉ OLTP เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจฒเจฒ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจฆเฉเจเจฐเจพ เจคเฉเจเจผ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจเฉเจเจฐ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเฉฑเจ เจเจคเจพเจฐ เจตเจพเจชเจธ เจเจฐเจฆเฉ เจนเฉ, เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจธเจฟเจฐเจซ เจเจธเจจเฉเฉฐ เจนเฉเจฒเฉ เจเจฐ เจฆเฉเจตเฉเจเฉเฅค
- เจกเจฟเจตเฉเจฒเจชเจฐ TPC-H เจฌเฉเจเจเจฎเจพเจฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจชเจธเฉฐเจฆ เจเจฐเจฆเฉ เจนเจจเฅค เจนเฉ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจธเฉฐเจชเฉเจฐเจจ เจชเฉเจฐเจฒเจฒ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจฒเจ เจธเจฎเจพเจจ เจธเจตเจพเจฒ เจนเจจเฅค
- เจฌเจฟเจจเจพเจ เจชเฉเจฐเจต-เจ เจจเฉเจฎเจพเจจ เจฒเจพเจ เจเฉเจคเฉ เจธเจฟเจฐเจซเจผ SELECT เจธเจตเจพเจฒเจพเจ เจจเฉเฉฐ เจธเจฎเจพเจจเจพเจเจคเจฐ เจคเฉเจฐ 'เจคเฉ เจเจฒเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค
- เจเจ เจตเจพเจฐ เจธเจนเฉ เจเฉฐเจกเฉเจเจธเจฟเฉฐเจ เจชเฉเจฐเจฒเจฒ เจฎเฉเจก เจตเจฟเฉฑเจ เจเฉเจฐเจฎเจตเจพเจฐ เจเฉเจฌเจฒ เจธเจเฉเจจเจฟเฉฐเจ เจจเจพเจฒเฉเจ เจฌเจฟเจนเจคเจฐ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค
- เจธเจตเจพเจฒเจพเจ เจจเฉเฉฐ เจฐเฉเจเจฃเจพ เจ เจคเฉ เจเจฐเจธเจฐ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเจจเฅค
- เจตเจฟเฉฐเจกเฉ เจซเฉฐเจเจธเจผเจจ เจ เจคเฉ เจเจฐเจกเจฐเจก เจธเฉเฉฑเจ เจเจเจฐเฉเจเฉเจ เจซเฉฐเจเจธเจผเจจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจจเจนเฉเจ เจนเจจเฅค
- เจคเฉเจนเจพเจจเฉเฉฐ I/O เจตเจฐเจเจฒเฉเจก เจตเจฟเฉฑเจ เจเฉเจ เจตเฉ เจจเจนเฉเจ เจฎเจฟเจฒเจฆเจพเฅค
- เจเฉเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจฒเฉเฉเจฌเฉฑเจง เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจจเจนเฉเจ เจนเจจเฅค เจชเจฐ เจเจ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจธเจตเจพเจฒเจพเจ เจจเฉเฉฐ เจเฉเจ เจชเจนเจฟเจฒเฉเจเจ เจตเจฟเฉฑเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจคเฉเจฐ 'เจคเฉ เจเจฒเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
- เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจเจฐเจจ เจฒเจ CTE (เจจเจพเจฒ ...) เจจเฉเฉฐ เจเฉฑเจ เจจเฉเจธเจเจก SELECT เจจเจพเจฒ เจฌเจฆเจฒเฉเฅค
- เจฅเจฐเจก-เจชเจพเจฐเจเฉ เจกเฉเจเจพ เจฐเฉเจชเจฐ เจ เจเฉ เจตเฉ เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉเจ เจเจฐเจฆเฉ เจนเจจ (เจชเจฐ เจเจน เจเจฐ เจธเจเจฆเฉ เจนเจจ!)
- เจชเฉเจฐเจพ เจฌเจพเจนเจฐเฉ เจธเจผเจพเจฎเจฒ เจนเฉเจฃเจพ เจธเจฎเจฐเจฅเจฟเจค เจจเจนเฉเจ เจนเฉเฅค
- max_rows เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจจเฉเฉฐ เจ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค
- เจเฉเจเจฐ เจเจฟเจธเฉ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจ เจเจฟเจนเจพ เจซเฉฐเจเจธเจผเจจ เจนเฉ เจเจฟเจธเจจเฉเฉฐ เจธเจฎเจพเจจเจพเจเจคเจฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจตเจเฉเจ เจเจฟเฉฐเจจเฉเจนเจฟเจค เจจเจนเฉเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจคเจพเจ เจเจน เจธเจฟเฉฐเจเจฒ เจฅเจฐเจฟเฉฑเจกเจก เจนเฉเจตเฉเจเฉเฅค
- เจธเฉเจฐเฉเจ เจฒเจพเจเจเจผเจฌเจฒ เจเฉเจฐเจพเจเจเฉเจเจธเจผเจจ เจเจเจธเฉเจฒเฉเจธเจผเจจ เจฒเฉเจตเจฒ เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจจเฉเฉฐ เจ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค
เจเฉเจธเจ เจตเจพเจคเจพเจตเจฐเจฃ
PostgreSQL เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจจเฉ TPC-H เจฌเฉเจเจเจฎเจพเจฐเจ เจธเจตเจพเจฒเจพเจ เจฆเฉ เจเจตเจพเจฌ เจธเจฎเฉเจ เจจเฉเฉฐ เจเจเจพเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเฉเจคเฉเฅค เจฌเฉเจเจเจฎเจพเจฐเจ เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉ เจ
เจคเฉ
- TPC-H_Tools_v2.17.3.zip (เจเจพเจ เจจเจตเจพเจ เจธเฉฐเจธเจเจฐเจฃ) เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉ
TPC เจเจซเจธเจพเจเจ เจคเฉเจ . - makefile.suite เจฆเจพ เจจเจพเจฎ Makefile เจตเจฟเฉฑเจ เจฌเจฆเจฒเฉ เจ
เจคเฉ เจเฉฑเจฅเฉ เจฆเฉฑเจธเฉ เจ
เจจเฉเจธเจพเจฐ เจฌเจฆเจฒเฉ:
https://github.com/tvondra/pg_tpch . เจฎเฉเจ เจเจฎเจพเจเจก เจจเจพเจฒ เจเฉเจก เจจเฉเฉฐ เจเฉฐเจชเจพเจเจฒ เจเจฐเฉเฅค - เจกเจพเจเจพ เจคเจฟเจเจฐ เจเจฐเฉ:
./dbgen -s 10
เจเฉฑเจ 23 GB เจกเฉเจเจพเจฌเฉเจธ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค เจเจน เจธเจฎเจพเจจเจพเจเจคเจฐ เจ เจคเฉ เจเฉเจฐ-เจธเจฎเจพเจเจคเจฐ เจธเจตเจพเจฒเจพเจ เจฆเฉ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจฟเฉฑเจ เจ เฉฐเจคเจฐ เจฆเฉเจเจฃ เจฒเจ เจเจพเจซเฉ เจนเฉเฅค - เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจฌเจฆเจฒเฉ
tbl
ะฒcsv ั for
ะธsed
. - เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเฉเฉฐ เจเจฒเฉเจจ เจเจฐเฉ
pg_tpch
เจ เจคเฉ เจซเจพเจเจฒเจพเจ เจฆเฉ เจจเจเจฒ เจเจฐเฉcsv
ะฒpg_tpch/dss/data
. - เจเฉฑเจ เจเจฎเจพเจเจก เจจเจพเจฒ เจธเจตเจพเจฒ เจฌเจฃเจพเจ
qgen
. - เจเจฎเจพเจเจก เจจเจพเจฒ เจกเจพเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจกเจพเจเจพ เจฒเฉเจก เจเจฐเฉ
./tpch.sh
.
เจธเจฎเจพเจจเจพเจเจคเจฐ เจเฉเจฐเจฎเจตเจพเจฐ เจธเจเฉเจจเจฟเฉฐเจ
เจเจน เจธเจฎเจพเจเจคเจฐ เจฐเฉเจกเจฟเฉฐเจ เจฆเฉ เจเจพเจฐเจจ เจคเฉเจเจผ เจจเจนเฉเจ เจนเฉ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจเจฟเจเจเจเจฟ เจกเฉเจเจพ เจฌเจนเฉเจค เจธเจพเจฐเฉ CPU เจเฉเจฐเจพเจ เจตเจฟเฉฑเจ เจซเฉเจฒเจฟเจ เจนเฉเจเจ เจนเฉเฅค เจเจงเฉเจจเจฟเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎเจพเจ เจตเจฟเฉฑเจ, PostgreSQL เจกเฉเจเจพ เจซเจพเจเจฒเจพเจ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจเฉเจธเจผ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค เจ เฉฑเจเฉ เจชเฉเฉเจนเจจ เจจเจพเจฒ, PG เจกเฉเจฎเจจ เจฌเฉเจจเจคเฉเจเจ เจจเจพเจฒเฉเจ เจธเจเฉเจฐเฉเจเจผ เจคเฉเจ เจตเฉฑเจกเจพ เจฌเจฒเจพเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉเฅค เจเจธเจฒเจ, เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจกเจฟเจธเจ I/O เจฆเฉเจเจฐเจพ เจธเฉเจฎเจฟเจค เจจเจนเฉเจ เจนเฉเฅค เจเจน CPU เจเฉฑเจเจฐเจพเจ เจฆเฉ เจเจชเจค เจเจฐเจฆเจพ เจนเฉ:
- เจธเจพเจฐเจฃเฉ เจฆเฉ เจชเฉฐเจจเจฟเจเจ เจคเฉเจ เจเฉฑเจ เจตเจพเจฐ เจตเจฟเฉฑเจ เจเจคเจพเจฐเจพเจ เจชเฉเฉเจนเฉ;
- เจธเจคเจฐ เจฎเฉเฉฑเจฒ เจ
เจคเฉ เจนเจพเจฒเจพเจค เจฆเฉ เจคเฉเจฒเจจเจพ เจเจฐเฉ
WHERE
.
เจเจ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจธเจตเจพเจฒ เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ select
:
tpch=# explain analyze select l_quantity as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Seq Scan on lineitem (cost=0.00..1964772.00 rows=58856235 width=5) (actual time=0.014..16951.669 rows=58839715 loops=1)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp without time zone)
Rows Removed by Filter: 1146337
Planning Time: 0.203 ms
Execution Time: 19035.100 ms
เจเฉเจฐเจฎเจตเจพเจฐ เจธเจเฉเจจ เจฌเจฟเจจเจพเจ เจเจเฉเจเจฐเจฃ เจฆเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจคเจพเจฐเจพเจ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ CPU เจเฉเจฐ เจฆเฉเจเจฐเจพ เจเจฒเจพเจ เจเจพเจเจฆเฉ เจนเฉเฅค
เจเฉ เจคเฉเจธเฉเจ เจเฉเฉเจฆเฉ เจนเฉ SUM()
, เจคเฉเจธเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจฆเฉ เจตเจฐเจเจซเจฒเฉ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจจเฉเฉฐ เจคเฉเจเจผ เจเจฐเจจ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเจจเจเฉ:
explain analyze select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=1589702.14..1589702.15 rows=1 width=32) (actual time=8553.365..8553.365 rows=1 loops=1)
-> Gather (cost=1589701.91..1589702.12 rows=2 width=32) (actual time=8553.241..8555.067 rows=3 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=1588701.91..1588701.92 rows=1 width=32) (actual time=8547.546..8547.546 rows=1 loops=3)
-> Parallel Seq Scan on lineitem (cost=0.00..1527393.33 rows=24523431 width=5) (actual time=0.038..5998.417 rows=19613238 loops=3)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp without time zone)
Rows Removed by Filter: 382112
Planning Time: 0.241 ms
Execution Time: 8555.131 ms
เจธเจฎเจพเจจเจพเจเจคเจฐ เจเจเฉเจเจฐเจฃ
เจชเฉเจฐเจฒเจฒ เจธเฉเจ เจธเจเฉเจจ เจจเฉเจก เจ
เฉฐเจธเจผเจ เจเจเฉเจเจฐเจฃ เจฒเจ เจเจคเจพเจฐเจพเจ เจชเฉเจฆเจพ เจเจฐเจฆเจพ เจนเฉเฅค "เจ
เฉฐเจธเจผเจฟเจ เจเจเจฐเฉเจเฉเจ" เจจเฉเจก เจเจนเจจเจพเจ เจฒเจพเจเจจเจพเจ เจจเฉเฉฐ เจตเจฐเจค เจเฉ เจเฉฑเจเจฆเจพ เจนเฉ SUM()
. เจ
เฉฐเจค เจตเจฟเฉฑเจ, เจนเจฐเฉเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจคเฉเจ SUM เจเจพเจเจเจเจฐ เจจเฉเฉฐ "เจเฉเจฆเจฐ" เจจเฉเจก เจฆเฉเจเจฐเจพ เจเจเฉฑเจ เจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
เจ เฉฐเจคเจฎ เจจเจคเฉเจเฉ เจฆเฉ เจเจฃเจจเจพ "เจเจเจฐเฉเจเฉเจ เจจเฉเฉฐ เจ เฉฐเจคเจฟเจฎ เจฐเฉเจช เจฆเจฟเจ" เจจเฉเจก เจฆเฉเจเจฐเจพ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจนเจพเจกเฉ เจเจชเจฃเฉ เจเจเจฐเฉเจเฉเจธเจผเจจ เจซเฉฐเจเจธเจผเจจ เจนเจจ, เจคเจพเจ เจเจนเจจเจพเจ เจจเฉเฉฐ "เจธเจฎเจพเจจเจค เจธเฉเจฐเฉฑเจเจฟเจ เจค" เจตเจเฉเจ เจเจฟเฉฐเจจเฉเจนเจฟเจค เจเจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉเฅค
เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ
เจธเจฐเจตเจฐ เจจเฉเฉฐ เจฎเฉเฉ เจเจพเจฒเฉ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจตเจงเจพเจ เจเจพ เจธเจเจฆเฉ เจนเฉ:
explain analyze select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=1589702.14..1589702.15 rows=1 width=32) (actual time=8553.365..8553.365 rows=1 loops=1)
-> Gather (cost=1589701.91..1589702.12 rows=2 width=32) (actual time=8553.241..8555.067 rows=3 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=1588701.91..1588701.92 rows=1 width=32) (actual time=8547.546..8547.546 rows=1 loops=3)
-> Parallel Seq Scan on lineitem (cost=0.00..1527393.33 rows=24523431 width=5) (actual time=0.038..5998.417 rows=19613238 loops=3)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp without time zone)
Rows Removed by Filter: 382112
Planning Time: 0.241 ms
Execution Time: 8555.131 ms
เจเฉฑเจฅเฉ เจเฉ เจนเฉ เจฐเจฟเจนเจพ เจนเฉ? เจเฉฑเจฅเฉ 2 เจเฉเจฃเจพ เจเจผเจฟเจเจฆเจพ เจเฉฐเจฎ เจฆเฉเจเจ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจธเจจ, เจ เจคเฉ เจฌเฉเจจเจคเฉ เจธเจฟเจฐเจซ 1,6599 เจเฉเจฃเจพ เจคเฉเจเจผ เจนเฉ เจเจเฅค เจเจฃเจจเจพ เจฆเจฟเจฒเจเจธเจช เจนเจจ. เจธเจพเจกเฉ เจเฉเจฒ 2 เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจ เจคเฉ 1 เจจเฉเจคเจพ เจธเฉเฅค เจฌเจฆเจฒเจพเจ เจคเฉเจ เจฌเจพเจ เจฆ เจเจน 4+1 เจนเฉ เจเจฟเจเฅค
เจธเจฎเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจคเฉเจ เจธเจพเจกเฉ เจ เจงเจฟเจเจคเจฎ เจเจคเฉ: 5/3 = 1,66(6) เจตเจพเจฐเฅค
เจเจธ เจจเฉเฉฐ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ?
เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ
เจฌเฉเจจเจคเฉ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจนเจฎเฉเจธเจผเจพ เจฎเฉเจนเจฐเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจจเฉเจคเจพ เจธเจญ เจเฉเจ เจเฉเจฐ-เจธเจฎเจพเจเจคเจฐ เจ
เจคเฉ เจเฉเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจฆเจพ เจนเฉ. เจเจนเฉ เจฌเฉเจจเจคเฉเจเจ เจเจฐเจจ เจตเจพเจฒเฉเจเจ เจนเฉเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉ
เจเฉฐเจเจฐเฉเจเจธเจผเจจ
เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจเฉฑเจ เจธเฉฐเจฆเฉเจธเจผ เจเจคเจพเจฐ (เจธเจพเจเจเฉ เจฎเฉเจฎเฉเจฐเฉ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ) เจฆเฉเจเจฐเจพ เจจเฉเจคเจพ เจจเจพเจฒ เจธเฉฐเจเจพเจฐ เจเจฐเจฆเฉเจเจ เจนเจจเฅค เจนเจฐเฉเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ 2 เจเจคเจพเจฐเจพเจ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ: เจเจฒเจคเฉเจเจ เจฒเจ เจ เจคเฉ เจเฉเจชเจฒเจพเจ เจฒเจเฅค
เจเจฟเฉฐเจจเฉ เจตเจฐเจเจซเจฒเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ?
เจเฉฑเจเฉ-เจเฉฑเจ เจธเฉเจฎเจพ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฆเฉเจเจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเฉ เจเจ เจนเฉ max_parallel_workers_per_gather
max_parallel_workers size
max_worker_processes
เจเฉเจเจฐ เจเจฐเจฎเจเจพเจฐเฉ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจเจพ เจธเฉฐเจญเจต เจจเจนเฉเจ เจธเฉ, เจคเจพเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจธเจฟเฉฐเจเจฒ-เจชเฉเจฐเจเจฟเจฐเจฟเจ เจนเฉเจตเฉเจเฉเฅค
เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฏเฉเจเจจเจพเจเจพเจฐ เจเฉเจฌเจฒ เจเจพเจ เจธเฉเจเจเจพเจเจ เจฆเฉ เจเจเจพเจฐ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจตเจฐเจเจซเจฒเฉ เจจเฉเฉฐ เจเจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจธเจฆเฉ เจฒเจ เจฎเจพเจชเจฆเฉฐเจก เจนเจจ min_parallel_table_scan_size
min_parallel_index_scan_size
set min_parallel_table_scan_size='8MB'
8MB table => 1 worker
24MB table => 2 workers
72MB table => 3 workers
x => log(x / min_parallel_table_scan_size) / log(3) + 1 worker
เจนเจฐ เจตเจพเจฐ เจเฉเจฌเจฒ เจจเจพเจฒเฉเจ 3 เจเฉเจฃเจพ เจตเฉฑเจกเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ min_parallel_(index|table)_scan_size
, Postgres เจเฉฑเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจเฉเฉเจฆเจพ เจนเฉเฅค เจตเจฐเจเจซเจฒเฉ เจฆเฉ เจธเฉฐเจเจฟเจ เจฒเจพเจเจคเจพเจ 'เจคเฉ เจ
เจงเจพเจฐเจค เจจเจนเฉเจ เจนเฉเฅค เจธเจฐเจเฉเจฒเจฐ เจจเจฟเจฐเจญเจฐเจคเจพ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฒเจพเจเฉเจเจฐเจจเจพเจ เจจเฉเฉฐ เจฎเฉเจธเจผเจเจฒ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉเฅค เจเจธ เจฆเฉ เจฌเจเจพเจ, เจฏเฉเจเจจเจพเจเจพเจฐ เจธเจงเจพเจฐเจจ เจจเจฟเจฏเจฎเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค
เจ
เจญเจฟเจเจธ เจตเจฟเฉฑเจ, เจเจน เจจเจฟเจฏเจฎ เจนเจฎเฉเจธเจผเจพ เจเจคเจชเจพเจฆเจจ เจฒเจ เจขเฉเจเจตเฉเจ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจเจธเจฒเจ เจคเฉเจธเฉเจ เจเฉฑเจ เจเจพเจธ เจธเจพเจฐเจฃเฉ เจฒเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจจเฉเฉฐ เจฌเจฆเจฒ เจธเจเจฆเฉ เจนเฉ: ALTER TABLE ... SET (parallel_workers = N
).
เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจเจฟเจเจ เจจเจนเฉเจ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ?
เจชเจพเจฌเฉฐเจฆเฉเจเจ เจฆเฉ เจฒเฉฐเจฎเฉ เจธเฉเจเฉ เจคเฉเจ เจเจฒเจพเจตเจพ, เจฒเจพเจเจค เจฆเฉเจเจ เจเจพเจเจเจพเจ เจตเฉ เจนเจจ:
parallel_setup_cost
parallel_tuple_cost
เจจเฉเจธเจเจก เจฒเฉเจช เจเฉเฉเจฆเจพ เจนเฉ
PostgreSQL 9.6+ ะผะพะถะตั ะฒัะฟะพะปะฝััั ะฒะปะพะถะตะฝะฝัะต ัะธะบะปั ะฟะฐัะฐะปะปะตะปัะฝะพ โ ััะพ ะฟัะพััะฐั ะพะฟะตัะฐัะธั.
explain (costs off) select c_custkey, count(o_orderkey)
from customer left outer join orders on
c_custkey = o_custkey and o_comment not like '%special%deposits%'
group by c_custkey;
QUERY PLAN
--------------------------------------------------------------------------------------
Finalize GroupAggregate
Group Key: customer.c_custkey
-> Gather Merge
Workers Planned: 4
-> Partial GroupAggregate
Group Key: customer.c_custkey
-> Nested Loop Left Join
-> Parallel Index Only Scan using customer_pkey on customer
-> Index Scan using idx_orders_custkey on orders
Index Cond: (customer.c_custkey = o_custkey)
Filter: ((o_comment)::text !~~ '%special%deposits%'::text)
เจธเฉฐเจเฉเจฐเจนเจฟ เจเจเจฐเฉ เจชเฉเจพเจ
'เจคเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจธเจฒเจ เจจเฉเจธเจเจก เจฒเฉเจช เจเฉฑเจฌเฉ เจเฉเฉเจจ เจเฉฑเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจเจพเจฐเจตเจพเจ เจนเฉเฅค เจชเฉเจฐเจฒเจฒ เจเฉฐเจกเฉเจเจธ เจเจจเจฒเฉ เจธเจเฉเจจ เจธเจฟเจฐเจซ เจตเจฐเจเจจ 10 เจตเจฟเฉฑเจ เจชเฉเจธเจผ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค เจเจน เจชเฉเจฐเจฒเจฒ เจธเฉเจฐเฉเจ
เจฒ เจธเจเฉเจจเจฟเฉฐเจ เจฆเฉ เจธเจฎเจพเจจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจค c_custkey = o_custkey
เจชเฉเจฐเจคเฉ เจเจฒเจพเจเฉฐเจ เจธเจคเจฐ เจเฉฑเจ เจเจฐเจกเจฐ เจชเฉเฉเจนเจฆเจพ เจนเฉเฅค เจเจธ เจฒเจ เจเจน เจธเจฎเจพเจจเจพเจเจคเจฐ เจจเจนเฉเจ เจนเฉเฅค
เจนเฉเจธเจผ เจเฉเฉเฉ
เจนเจฐเฉเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ PostgreSQL 11 เจคเฉฑเจ เจเจชเจฃเฉ เจนเฉเจธเจผ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉเฅค เจ เจคเฉ เจเฉเจเจฐ เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเจพเจฐ เจคเฉเจ เจตเฉฑเจง เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจนเจจ, เจคเจพเจ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจตเจฟเฉฑเจ เจธเฉเจงเจพเจฐ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพเฅค เจจเจตเฉเจ เจธเฉฐเจธเจเจฐเจฃ เจตเจฟเฉฑเจ, เจนเฉเจธเจผ เจเฉเจฌเจฒ เจจเฉเฉฐ เจธเจพเจเจเจพ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจนเจฐเฉเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจนเฉเจธเจผ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจฃ เจฒเจ WORK_MEM เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
select
l_shipmode,
sum(case
when o_orderpriority = '1-URGENT'
or o_orderpriority = '2-HIGH'
then 1
else 0
end) as high_line_count,
sum(case
when o_orderpriority <> '1-URGENT'
and o_orderpriority <> '2-HIGH'
then 1
else 0
end) as low_line_count
from
orders,
lineitem
where
o_orderkey = l_orderkey
and l_shipmode in ('MAIL', 'AIR')
and l_commitdate < l_receiptdate
and l_shipdate < l_commitdate
and l_receiptdate >= date '1996-01-01'
and l_receiptdate < date '1996-01-01' + interval '1' year
group by
l_shipmode
order by
l_shipmode
LIMIT 1;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=1964755.66..1964961.44 rows=1 width=27) (actual time=7579.592..7922.997 rows=1 loops=1)
-> Finalize GroupAggregate (cost=1964755.66..1966196.11 rows=7 width=27) (actual time=7579.590..7579.591 rows=1 loops=1)
Group Key: lineitem.l_shipmode
-> Gather Merge (cost=1964755.66..1966195.83 rows=28 width=27) (actual time=7559.593..7922.319 rows=6 loops=1)
Workers Planned: 4
Workers Launched: 4
-> Partial GroupAggregate (cost=1963755.61..1965192.44 rows=7 width=27) (actual time=7548.103..7564.592 rows=2 loops=5)
Group Key: lineitem.l_shipmode
-> Sort (cost=1963755.61..1963935.20 rows=71838 width=27) (actual time=7530.280..7539.688 rows=62519 loops=5)
Sort Key: lineitem.l_shipmode
Sort Method: external merge Disk: 2304kB
Worker 0: Sort Method: external merge Disk: 2064kB
Worker 1: Sort Method: external merge Disk: 2384kB
Worker 2: Sort Method: external merge Disk: 2264kB
Worker 3: Sort Method: external merge Disk: 2336kB
-> Parallel Hash Join (cost=382571.01..1957960.99 rows=71838 width=27) (actual time=7036.917..7499.692 rows=62519 loops=5)
Hash Cond: (lineitem.l_orderkey = orders.o_orderkey)
-> Parallel Seq Scan on lineitem (cost=0.00..1552386.40 rows=71838 width=19) (actual time=0.583..4901.063 rows=62519 loops=5)
Filter: ((l_shipmode = ANY ('{MAIL,AIR}'::bpchar[])) AND (l_commitdate < l_receiptdate) AND (l_shipdate < l_commitdate) AND (l_receiptdate >= '1996-01-01'::date) AND (l_receiptdate < '1997-01-01 00:00:00'::timestamp without time zone))
Rows Removed by Filter: 11934691
-> Parallel Hash (cost=313722.45..313722.45 rows=3750045 width=20) (actual time=2011.518..2011.518 rows=3000000 loops=5)
Buckets: 65536 Batches: 256 Memory Usage: 3840kB
-> Parallel Seq Scan on orders (cost=0.00..313722.45 rows=3750045 width=20) (actual time=0.029..995.948 rows=3000000 loops=5)
Planning Time: 0.977 ms
Execution Time: 7923.770 ms
TPC-H เจคเฉเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ 12 เจธเจชเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจนเฉเจธเจผ เจเจจเฉเจเจธเจผเจจ เจฆเจฟเจเจพเจเจเจฆเจพ เจนเฉเฅค เจนเจฐเฉเจ เจตเจฐเจเจฐ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉฑเจ เจเจฎ เจนเฉเจธเจผ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจฃ เจตเจฟเฉฑเจ เจฏเฉเจเจฆเจพเจจ เจชเจพเจเจเจฆเฉ เจนเฉเฅค
เจธเจผเจพเจฎเจฒ เจนเฉเจตเฉ
เจเฉฑเจ เจ เจญเฉเจฆ เจเฉเฉ เจเฉเจฆเจฐเจค เจตเจฟเฉฑเจ เจเฉเจฐ-เจธเจฎเจพเจเจคเจฐ เจนเฉเฅค เจเจฟเฉฐเจคเจพ เจจเจพ เจเจฐเฉ เจเฉเจเจฐ เจเจน เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเจพ เจเจเจฐเฉ เจชเฉเจพเจ เจนเฉ - เจเจน เจ เจเฉ เจตเฉ เจธเจฎเจพเจจเจพเจเจคเจฐ เจเฉฑเจฒ เจธเจเจฆเจพ เจนเฉเฅค
-- Query 2 from TPC-H
explain (costs off) select s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
from part, supplier, partsupp, nation, region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and p_size = 36
and p_type like '%BRASS'
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'AMERICA'
and ps_supplycost = (
select
min(ps_supplycost)
from partsupp, supplier, nation, region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'AMERICA'
)
order by s_acctbal desc, n_name, s_name, p_partkey
LIMIT 100;
QUERY PLAN
----------------------------------------------------------------------------------------------------------
Limit
-> Sort
Sort Key: supplier.s_acctbal DESC, nation.n_name, supplier.s_name, part.p_partkey
-> Merge Join
Merge Cond: (part.p_partkey = partsupp.ps_partkey)
Join Filter: (partsupp.ps_supplycost = (SubPlan 1))
-> Gather Merge
Workers Planned: 4
-> Parallel Index Scan using <strong>part_pkey</strong> on part
Filter: (((p_type)::text ~~ '%BRASS'::text) AND (p_size = 36))
-> Materialize
-> Sort
Sort Key: partsupp.ps_partkey
-> Nested Loop
-> Nested Loop
Join Filter: (nation.n_regionkey = region.r_regionkey)
-> Seq Scan on region
Filter: (r_name = 'AMERICA'::bpchar)
-> Hash Join
Hash Cond: (supplier.s_nationkey = nation.n_nationkey)
-> Seq Scan on supplier
-> Hash
-> Seq Scan on nation
-> Index Scan using idx_partsupp_suppkey on partsupp
Index Cond: (ps_suppkey = supplier.s_suppkey)
SubPlan 1
-> Aggregate
-> Nested Loop
Join Filter: (nation_1.n_regionkey = region_1.r_regionkey)
-> Seq Scan on region region_1
Filter: (r_name = 'AMERICA'::bpchar)
-> Nested Loop
-> Nested Loop
-> Index Scan using idx_partsupp_partkey on partsupp partsupp_1
Index Cond: (part.p_partkey = ps_partkey)
-> Index Scan using supplier_pkey on supplier supplier_1
Index Cond: (s_suppkey = partsupp_1.ps_suppkey)
-> Index Scan using nation_pkey on nation nation_1
Index Cond: (n_nationkey = supplier_1.s_nationkey)
"Merge Join" เจจเฉเจก "Gather Merge" เจฆเฉ เจเฉฑเจชเจฐ เจธเจฅเจฟเจค เจนเฉเฅค เจเจธ เจฒเจ เจ
เจญเฉเจฆ เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจชเจฐ "เจชเฉเจฐเจฒเจฒ เจเฉฐเจกเฉเจเจธ เจธเจเฉเจจ" เจจเฉเจก เจ
เจเฉ เจตเฉ เจนเจฟเฉฑเจธเฉ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเจฆเจพ เจนเฉ part_pkey
.
เจญเจพเจเจพเจ เจฆเฉเจเจฐเจพ เจเจจเฉเจเจธเจผเจจ
PostgreSQL 11 เจตเจฟเฉฑเจ
tpch=# set enable_partitionwise_join=t;
tpch=# explain (costs off) select * from prt1 t1, prt2 t2
where t1.a = t2.b and t1.b = 0 and t2.b between 0 and 10000;
QUERY PLAN
---------------------------------------------------
Append
-> Hash Join
Hash Cond: (t2.b = t1.a)
-> Seq Scan on prt2_p1 t2
Filter: ((b >= 0) AND (b <= 10000))
-> Hash
-> Seq Scan on prt1_p1 t1
Filter: (b = 0)
-> Hash Join
Hash Cond: (t2_1.b = t1_1.a)
-> Seq Scan on prt2_p2 t2_1
Filter: ((b >= 0) AND (b <= 10000))
-> Hash
-> Seq Scan on prt1_p2 t1_1
Filter: (b = 0)
tpch=# set parallel_setup_cost = 1;
tpch=# set parallel_tuple_cost = 0.01;
tpch=# explain (costs off) select * from prt1 t1, prt2 t2
where t1.a = t2.b and t1.b = 0 and t2.b between 0 and 10000;
QUERY PLAN
-----------------------------------------------------------
Gather
Workers Planned: 4
-> Parallel Append
-> Parallel Hash Join
Hash Cond: (t2_1.b = t1_1.a)
-> Parallel Seq Scan on prt2_p2 t2_1
Filter: ((b >= 0) AND (b <= 10000))
-> Parallel Hash
-> Parallel Seq Scan on prt1_p2 t1_1
Filter: (b = 0)
-> Parallel Hash Join
Hash Cond: (t2.b = t1.a)
-> Parallel Seq Scan on prt2_p1 t2
Filter: ((b >= 0) AND (b <= 10000))
-> Parallel Hash
-> Parallel Seq Scan on prt1_p1 t1
Filter: (b = 0)
เจฎเฉเฉฑเจ เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ เจญเจพเจเจพเจ เจตเจฟเฉฑเจ เจเฉเจจเฉเจเจธเจผเจจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจนเฉ เจเฉเจเจฐ เจเจน เจญเจพเจ เจเจพเจซเจผเฉ เจตเฉฑเจกเฉ เจนเจจ.
เจธเจฎเจพเจจเจพเจเจคเจฐ เจเฉเฉ
เจเฉฑเจฅเฉ 2 เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจเฉฑเจฒ เจฐเจนเฉเจเจ เจนเจจ, เจนเจพเจฒเจพเจเจเจฟ 4 เจธเจฎเจฐเจฅเจฟเจค เจนเจจเฅค
tpch=# explain (costs off) select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day union all select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '2000-12-01' - interval '105' day;
QUERY PLAN
------------------------------------------------------------------------------------------------
Gather
Workers Planned: 2
-> Parallel Append
-> Aggregate
-> Seq Scan on lineitem
Filter: (l_shipdate <= '2000-08-18 00:00:00'::timestamp without time zone)
-> Aggregate
-> Seq Scan on lineitem lineitem_1
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp without time zone)
เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจตเฉเจฐเฉเจเจฌเจฒ
- WORK_MEM เจชเฉเจฐเจคเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฎเฉเจฎเฉเจฐเฉ เจจเฉเฉฐ เจธเฉเจฎเจฟเจค เจเจฐเจฆเจพ เจนเฉ, เจจเจพ เจเจฟ เจธเจฟเจฐเจซเจผ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ: work_mem เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจเฉเจจเฉเจเจธเจผเจจ = เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฎเฉเจฎเฉเจฐเฉเฅค
- เจเจพเจฐเจเจเจพเจฐเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฏเฉเจเจจเจพ เจคเฉเจ เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฒเจ เจเจฟเฉฐเจจเฉ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเจเจพเฅคmax_parallel_workers_per_gather
โ เจธเจฐเจตเจฐ เจเฉฑเจคเฉ CPU เจเฉเจฐเจพเจ เจฆเฉ เจธเฉฐเจเจฟเจ เจฒเจ เจตเจฐเจเจฐ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจเฉเฉฑเจฒ เจธเฉฐเจเจฟเจ เจจเฉเฉฐ เจเจกเจเจธเจ เจเจฐเจฆเจพ เจนเฉเฅคmax_worker_processes
- เจเจนเฉ, เจชเจฐ เจธเจฎเจพเจจเจพเจเจคเจฐ เจเฉฐเจฎ เจฆเฉเจเจ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฒเจเฅคmax_parallel_workers
เจจเจคเฉเจเฉ
เจธเฉฐเจธเจเจฐเจฃ 9.6 เจฆเฉ เจ เจจเฉเจธเจพเจฐ, เจธเจฎเจพเจจเจพเจเจคเจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจคเจพเจฐเจพเจ เจเจพเจ เจธเฉเจเจเจพเจเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจตเจพเจฒเฉ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจธเจตเจพเจฒเจพเจ เจฆเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจตเจฟเฉฑเจ เจฌเจนเฉเจค เจธเฉเจงเจพเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค PostgreSQL 10 เจตเจฟเฉฑเจ, เจชเฉเจฐเจฒเจฒ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเจฎเจฐเฉฑเจฅ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเฉฑเจ เจตเฉฑเจกเฉ OLTP เจตเจฐเจเจฒเฉเจก เจตเจพเจฒเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจเจธเจจเฉเฉฐ เจ เจฏเฉเจ เจเจฐเจจเจพ เจฏเจพเจฆ เจฐเฉฑเจเฉเฅค เจเฉเจฐเจฎเจตเจพเจฐ เจธเจเฉเจจ เจเจพเจ เจเฉฐเจกเฉเจเจธ เจธเจเฉเจจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจธเจฐเฉเจคเจพเจ เจฆเฉ เจเจชเจค เจเจฐเจฆเฉ เจนเจจเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ เจชเฉเจฐเฉ เจกเฉเจเจพเจธเฉเจ 'เจคเฉ เจฐเจฟเจชเฉเจฐเจ เจจเจนเฉเจ เจเจฒเจพ เจฐเจนเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจเฉเฉฐเจฎ เจธเฉเจเจเจพเจเจ เจจเฉเฉฐ เจเฉเฉ เจเฉ เจเจพเจ เจธเจนเฉ เจตเจฟเจญเจพเจเฉเจเจฐเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจจเฉเฉฐ เจธเฉเจงเจพเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจนเจตเจพเจฒเฉ
https://www.postgresql.org/docs/11/how-parallel-query-works.html https://www.postgresql.org/docs/11/parallel-plans.html http://ashutoshpg.blogspot.com/2017/12/partition-wise-joins-divide-and-conquer.html http://rhaas.blogspot.com/2016/04/postgresql-96-with-parallel-query-vs.html http://amitkapila16.blogspot.com/2015/11/parallel-sequential-scans-in-play.html https://write-skew.blogspot.com/2018/01/parallel-hash-for-postgresql.html http://rhaas.blogspot.com/2017/03/parallel-query-v2.html https://blog.2ndquadrant.com/parallel-monster-benchmark/ https://blog.2ndquadrant.com/parallel-aggregate/ https://www.depesz.com/2018/02/12/waiting-for-postgresql-11-support-parallel-btree-index-builds/ PostgreSQL 11 เจตเจฟเฉฑเจ เจธเจฎเจพเจจเจคเจพ
เจธเจฐเฉเจค: www.habr.com