Parallel Query in PostgreSQL
- Postgres9.6+ 後開始提供 CPU 平行處理功能。
- 系統自行決定何時採用 CPU 平行運算。
- 在自資料庫中過濾出少量資料時效能會有所提升。
Postgres Parallel Query 設定方式
更改 postgresql.conf max_parallel_workers_per_gather 參數後重啟 postgres。
postgresql.conf
max_parallel_workers_per_gather: 大於 0 即可, 一般為 2 ~ 8。依實際 CPU 狀況調整。
force_parallel_mode (optional): 設定為 on 可強制系統使用 parallel query。
使用限制
目前 Postgres9.6 / Postgres10 無法在下列狀況使用 Parallel Query
- writes any data or locks any database rows, CTE
- PL/pgSQL cursor, for loop
- user-defined functions are marked PARALLEL UNSAFE by default (can be modified to SAFE)
- The transaction isolation level is serializable (也就是連query都會被lock)
- query is running inside of another query