Názor k článku Konfigurace Postgresu: kolik zdrojů si databáze může vzít od Tomas - Aplikace samozřejmě může vracet paměť kdy chce, a...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 11. 2016 23:54

    Tomas (neregistrovaný)

    Aplikace samozřejmě může vracet paměť kdy chce, a PostgreSQL to samozřejmě taky dělá, snad s výjimkou pár cachí do kterých se ukládají metadata o tabulkách apod. a věcí jako jsou fulltextové slovníky. Nevím jak to Pavel myslel, jediné co mne napadá je že narážel na to jak paměť spravuje glibc interně - tam se většinou děje přes sbrk a kernelu se to vrací skutečně až při ukončení procesu. Pokud vím tak například pokud po malých kouscích (aby to nešlo přes mmap) 1GB, a pak uvolníte všechno kromě posledního kusu, proces si pořád bude držet 1GB. Teoreticky by se o to měla postarat virtuální paměť, no ale úplně ideální to není.

    Spíš bych řekl že horší je overhead spojený s častým forkováním procesů a navazováním TCP spojení, ale hlavně nebezpečí že se probudí víc těch procesů a začnou se tahat o zdroje - vysoké max_connections hodnoty jsou časté v situacích kdy se k DB připojuje víc aplikačních serverů s lokálními connection pooly. Ty sice řeší ten fork/TCP overhead, ale předpokládá se že aktivních je jenom pár těch spojení současně (tj. běží jenom pár SQL dotazů současně) - ale stačí jedna chybka v aplikaci neštěstí je hotovo.