pgpool II的效能缺陷

2021-09-22 09:41:39 字數 989 閱讀 4224

pgpool-ii在執行在 replication mode的時候,效能低下。

經過分析,發現無解:這是由pgpool-ii的執行方式決定的。

pgpool-ii 剛開始執行的時候,就會開很多子程序,預設值128。

但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。

而在replication mode,該子程序需要和多個db節點打交道:

比如把客戶端的sql文,傳送給每乙個db節點。

在給各個節點傳送sql文的時候,如果想要效率高,要麼開子程序或執行緒來並行。要麼採用某種非阻塞方式向各個節點發請求。

然而,pgpool-ii的開發者,採用了效率最為低下的做法:順次執行。就是說對第乙個db節點發sql文,待第乙個db節點執行此sql文結束,再向第二個db節點發sql文。

此種做法,如果執行在業務不繁忙的系統裡尚可,在繁忙的系統裡,那就是致命的缺陷。

驗證如下:先在各個db節點,作如下的函式:

create function loopforid()

returns integer language plpgsql as $$

declare

ret integer;

begin

perform pg_sleep(

30);

ret:=100

;

return ret;

end; $$;

然後,在pgpool-ii中執行類似:update a8 set id=(select loopforid() ) where id=10; 的操作。

再來看pgpool-ii的log,可以看到:

在db1 節點執行完畢後,又過了大約30秒,才開始在db2節點執行。所以說,它是序列的。

因此,當後台db節點增加的時候,通過pgpool-ii的replication mode來執行的程式,其insert/update/delete效能將隨著節點數目的增加而成比例下降。

pgpool II的效能缺陷

pgpool ii在執行在 replication mode的時候,效能低下。經過分析,發現無解 這是由pgpool ii的執行方式決定的。pgpool ii 剛開始執行的時候,就會開很多子程序,預設值128。但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。而在replica...

pgpool II的效能缺陷

pgpool ii在執行在 replication mode的時候,效能低下。經過分析,發現無解 這是由pgpool ii的執行方式決定的。pgpool ii 剛開始執行的時候,就會開很多子程序,預設值128。但是,每當客戶端來乙個請求,就會有乙個子程序全權負責,別的子程序不插手。而在replica...

pgpool II的效能缺陷 二

接上文 pgpool ii的效能缺陷 前文已經說到,pgpool ii在replication mode狀態下,是順次而非並行執行sql文給各個db節點。從source的角度,可以看到 query pool send and wait send query message process query...