天天看點

pgpool-II的性能缺陷

pgpool-II在運作在 replication mode的時候,性能低下。

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

pgpool-II 剛開始運作的時候,就會開很多子程序,預設值128。

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

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

比如把用戶端的SQL文,發送給每一個DB節點。

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

然而,pgpool-II的開發者,采用了效率最為低下的做法:順次執行。就是說對第一個DB節點發SQL文,待第一個DB節點運作此SQL文結束,再向第二個DB節點發SQL文。

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

驗證如下:先在各個DB節點,作如下的函數:

pgpool-II的性能缺陷
pgpool-II的性能缺陷

然後,在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性能将随着節點數目的增加而成比例下降。

本文轉自健哥的資料花園部落格園部落格,原文連結:http://www.cnblogs.com/gaojian/archive/2012/08/08/2627868.html,如需轉載請自行聯系原作者