PostgreSQL เจตเจฟเฉฑเจš เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจธเจตเจพเจฒ

PostgreSQL เจตเจฟเฉฑเจš เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจธเจตเจพเจฒ
เจ†เจงเฉเจจเจฟเจ• 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 เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€เฅค เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ PostgreSQL เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ“. เจ‡เจน TPC-H เจฌเฉˆเจ‚เจšเจฎเจพเจฐเจ• เจฆเฉ€ เจ…เจฃเจ…เจงเจฟเจ•เจพเจฐเจค เจตเจฐเจคเฉ‹เจ‚ เจนเฉˆ - เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจœเจพเจ‚ เจนเจพเจฐเจกเจตเฉ‡เจ…เจฐ เจคเฉเจฒเจจเจพ เจฒเจˆ เจจเจนเฉ€เจ‚เฅค

  1. TPC-H_Tools_v2.17.3.zip (เจœเจพเจ‚ เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ) เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‹ TPC เจ†เจซเจธเจพเจˆเจŸ เจคเฉ‹เจ‚.
  2. makefile.suite เจฆเจพ เจจเจพเจฎ Makefile เจตเจฟเฉฑเจš เจฌเจฆเจฒเฉ‹ เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจฆเฉฑเจธเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจฌเจฆเจฒเฉ‹: https://github.com/tvondra/pg_tpch . เจฎเฉ‡เจ• เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเฉ‹เฅค
  3. เจกเจพเจŸเจพ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹: ./dbgen -s 10 เจ‡เฉฑเจ• 23 GB เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ…เจคเฉ‡ เจ—เฉˆเจฐ-เจธเจฎเจพเจ‚เจคเจฐ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจ•เจพเจซเฉ€ เจนเฉˆเฅค
  4. เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเฉ‹ tbl ะฒ csv ั for ะธ sed.
  5. เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฒเฉ‹เจจ เจ•เจฐเฉ‹ pg_tpch เจ…เจคเฉ‡ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ‹ csv ะฒ pg_tpch/dss/data.
  6. เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจธเจตเจพเจฒ เจฌเจฃเจพเจ“ qgen.
  7. เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจกเจพเจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจฒเฉ‹เจก เจ•เจฐเฉ‹ ./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) เจตเจพเจฐเฅค

เจ‡เจธ เจจเฉ‚เฉฐ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚

เจฌเฉ‡เจจเจคเฉ€ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจนเจฎเฉ‡เจธเจผเจพ เจฎเฉ‹เจนเจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจจเฉ‡เจคเจพ เจธเจญ เจ•เฉเจ เจ—เฉˆเจฐ-เจธเจฎเจพเจ‚เจคเจฐ เจ…เจคเฉ‡ เจ•เฉเจ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเจพ เจนเฉˆ. เจ‰เจนเฉ€ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ•เจฐเจจ เจตเจพเจฒเฉ€เจ†เจ‚ เจนเฉ‹เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจชเจฟเจ›เฉ‹เจ•เฉœ เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ (เจตเจฐเจœเจจ 9.4 เจคเฉ‹เจ‚)เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ PostgreSQL เจฆเฉ‡ เจฆเฉ‚เจœเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจฅเฉเจฐเฉˆเจกเจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, 3 เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ• เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฐเจตเจพเจ‡เจคเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเจพเจฒเฉ‹เจ‚ 4 เจ—เฉเจฃเจพ เจคเฉ‡เจœเจผ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจ‡เฉฐเจŸเจฐเฉˆเจ•เจธเจผเจจ

เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจ•เจคเจพเจฐ (เจธเจพเจ‚เจเฉ€ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡) เจฆเฉเจ†เจฐเจพ เจจเฉ‡เจคเจพ เจจเจพเจฒ เจธเฉฐเจšเจพเจฐ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจนเจฐเฉ‡เจ• เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš 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)

เจฎเฉเฉฑเจ– เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจญเจพเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจ‡เจน เจญเจพเจ— เจ•เจพเจซเจผเฉ€ เจตเฉฑเจกเฉ‡ เจนเจจ.

เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจœเฉ‹เฉœ

เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจœเฉ‹เฉœ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจฐเจ•เจซเจฒเฉ‹ เจตเจฟเฉฑเจš เจตเฉฑเจ–-เจตเฉฑเจ– เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ UNION ALL เจธเจตเจพเจฒเจพเจ‚ เจจเจพเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจจเฉเจ•เจธเจพเจจ เจ˜เฉฑเจŸ เจธเจฎเจพเจจเจคเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจนเจฐเฉ‡เจ• เจตเจฐเจ•เจฐ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจฟเจฐเจซ 1 เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจ‡เฉฑเจฅเฉ‡ 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 - เจ•เจพเจฐเจœเจ•เจพเจฐเฉ€ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฏเฉ‹เจœเจจเจพ เจคเฉ‹เจ‚ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฒเจˆ เจ•เจฟเฉฐเจจเฉ‡ เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค
  • max_worker_processes โ€” เจธเจฐเจตเจฐ เจ‰เฉฑเจคเฉ‡ CPU เจ•เฉ‹เจฐเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจฒเจˆ เจตเจฐเจ•เจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจ•เฉเฉฑเจฒ เจธเฉฐเจ–เจฟเจ† เจจเฉ‚เฉฐ เจเจกเจœเจธเจŸ เจ•เจฐเจฆเจพ เจนเฉˆเฅค
  • max_parallel_workers - เจ‰เจนเฉ€, เจชเจฐ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ•เฉฐเจฎ เจฆเฉ€เจ†เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฒเจˆเฅค

เจจเจคเฉ€เจœเฉ‡

เจธเฉฐเจธเจ•เจฐเจฃ 9.6 เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจคเจพเจฐเจพเจ‚ เจœเจพเจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเฉเจงเจพเจฐ เจ•เจฐ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค PostgreSQL 10 เจตเจฟเฉฑเจš, เจชเฉˆเจฐเจฒเจฒ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจฎเจฐเฉฑเจฅ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ‡เฉฑเจ• เจตเฉฑเจกเฉ‡ OLTP เจตเจฐเจ•เจฒเฉ‹เจก เจตเจพเจฒเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐเจจเจพ เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹เฅค เจ•เฉเจฐเจฎเจตเจพเจฐ เจธเจ•เฉˆเจจ เจœเจพเจ‚ เจ‡เฉฐเจกเฉˆเจ•เจธ เจธเจ•เฉˆเจจ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจ–เจชเจค เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเฉ‚เจฐเฉ‡ เจกเฉ‡เจŸเจพเจธเฉˆเจŸ 'เจคเฉ‡ เจฐเจฟเจชเฉ‹เจฐเจŸ เจจเจนเฉ€เจ‚ เจšเจฒเจพ เจฐเจนเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ—เฉเฉฐเจฎ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจ•เฉ‡ เจœเจพเจ‚ เจธเจนเฉ€ เจตเจฟเจญเจพเจ—เฉ€เจ•เจฐเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจจเฉ‚เฉฐ เจธเฉเจงเจพเจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจนเจตเจพเจฒเฉ‡

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹