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...