近日用PostgreSQL和Npgsql寫過程式,由於客戶數量有300多個,所以有的就串連不上了。
調整了max_connection為500,問題是解決了,可是記憶體使用量也是猛漲。差了點資料,估計可通過兩個方面解決一下問題:
PostgreSQL的串連池,如pgbouncer;
Npgsql串連參數:Pooling、MinPoolSize、MaxPoolSize、ConnectionLifeTime等參數。具體可參考Npgsql的UserManual。
解決方案:
1、在連接字串中加入Pooling=False;
這樣用戶端Npgsql不把串連保留在Pool中,每次Close都真真正正的把這個串連關掉,這樣PostgreSQL伺服器上
相關的postgres.exe進程也被結束,如果並行程度不是非常高,max_connection為100足夠了。
這樣做完的好處是伺服器上postgres.exe進程少了,記憶體佔用也少了。缺點是每次串連伺服器都要重新建立
postgres.exe進程,浪費一些CPU資源。根據項目的特點和伺服器的配置選擇是否要用這個選項,如果記憶體是瓶頸
2、調整了一下ConnectionLifeTime,好像沒什麼作用。
3、調用ClearAllPools(); ClearPool();等函數及時清理不用的串連。
4、在Windows平台下的PostgreSQL的一些配套軟體pgpool、pgbouncer等目前不能用,如果在Unix等平台上倒是
可以用它們調調效能。
http://www.powerpostgresql.com/PerfList
http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
http://www.revsys.com/writings/postgresql-performance.html
http://blog.sina.com.cn/s/blog_4e808acf0100afrt.html
http://www.kakapo.cn/blog/read.php?142