Postgresql

我可以在 Postgres 上擁有多少個並行工作人員?

  • October 6, 2020

我在使用 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 可以處理的數量,性能就會下降。另外,不要忘記可能​​還有其他查詢正在執行,所以不要過度分配資源。

不要忘記替代方法:也許可以重寫或索引查詢以更快。

引用自:https://dba.stackexchange.com/questions/276556