我可以在 Postgres 上擁有多少個並行工作人員?
我在使用 Ubuntu、320 GB SSD、6 核和 16GB Ram 的伺服器上工作,但是 Postgres 遇到了一些需要很長時間才能執行的查詢以及並行查詢,這大大增加了伺服器負載。
一些 Postgres 配置:
max_connections = 150 shared_buffers = 4GB effective_cache_size = 12GB work_mem = 109MB maintenance_work_mem = 1GB checkpoint_completion_target = 0.7 wal_buffers = 16MB effective_io_concurrency = 200 seq_page_cost = 1 random_page_cost = 1.1 cpu_index_tuple_cost = 0.030 cpu_operator_cost = 0.0150 cpu_tuple_cost = 0.06 #parallel_tuple_cost = 0.1 # same scale as above #parallel_setup_cost = 1000.0 # same scale as above #min_parallel_table_scan_size = 8MB #min_parallel_index_scan_size = 512kB max_worker_processes = 6 max_parallel_workers_per_gather = 3 max_parallel_workers = 6
伺服器在 Linode 上,我得到一些資訊:
#更大的bs
$ dd bs=16k count=10240 iflag=direct if=./test_file of=/dev/null;
已複製 167772160 字節(168 MB,160 MiB),1,01442 秒,165 MB/秒
#較小的bs
$ dd bs=2048 count=80000 iflag=direct if=./arquivo_teste of=/dev/null;
已複製 163840000 字節(164 MB,156 MiB),9,91975 秒,16,5 MB/秒
lsblk -o NAME,MOUNTPOINT,MODEL,ROTA
sda / QEMU HARDDISK 1
Linux myClientName 5.7.6-x86_64-linode136 #1 SMP PREEMPT Wed Jun 24 15:41:07 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
不確定 dd 測試是否會有所幫助,但我發現小 BS 測試和大 BS 測試之間的差異有多大很有趣。
如果我沒看錯 QEMU 是虛擬化系統,儘管 ROTA = 1,HD 可能仍然是 SSD
- 有什麼方法可以確定我可以在 Postgres 伺服器上擁有多少並行工作人員?
整個集群的並發並行worker數限制為
max_parallel_workers
,必須≤max_worker_processes
。每個查詢的並行工作人員限制為max_parallel_workers_per_gather
.調整這些參數,你可以隨心所欲地啟動盡可能多的工人。請記住,一旦您使用的並行工作者數量超過了 CPU 和 I/O 可以處理的數量,性能就會下降。另外,不要忘記可能還有其他查詢正在執行,所以不要過度分配資源。
不要忘記替代方法:也許可以重寫或索引查詢以更快。