Connection limits - proof of concept

Čas od času se někdo v mailing listu zeptá jestli existuje způsob jak omezit počet spojení podle IP adresy, databáze nebo uživatele. Ne, nic takového v core implementováno není, ačkoliv by to byla velmi užitečná vlastnost zejména clustery sdílené více uživateli (aplikacemi, zákazníky, ...). Podobné quoty lze někdy dostatečně implementovat pomocí connection pooleru jako je pgbouncer nebo věcí jako je netfilter connlimit, ale obě řešení mají určité nevýhody.

Ale! Máme přeci věcičky kterým říkáme "extensions", "hooky" a "sdílené knihovny." Minulý týden jsem napsal jednoduchý "proof of concept" extension která používá "client auth hook" a umožňuje vám nastavit omezení počtu spojení podle různých kritérií. Není to dokonalé (viz. dále), ale funguje to celkem pěkně. Zatím je dostupná na githubu a až opravím zbývající drobnosti tak ji publikuji na pgxn.

PS: Díky Magnusovi za upozornění že existuje "client auth hook" který by se možná dal použít, a  TL za upozornění jak neuvěřitelně ošklivý hack byla původní verze extension.

Jsou přínosy ORM nástrojů reálné?

Všichni víme že mezi relačním a objektovým modelem existují zásadní rozdíly - souhrnně označované jako "object-relation impedance mismatch." Pokud máme nad relačním systémem stavět objektový model (což je v případě objektového jazyka přirozené), musíme je nějak vyřešit, a ORM nástroje jsou jedna z možností. Ale jsou jejich často uváděné přínosy skutečné?

Ladění db pomocí pgstatspack

Pokud jste se v někdy trochu seriózněji zabývali laděním výkonu v některé z novějších verzí Oracle, možná jste se setkali s legendárním statspackem (viz. také Oracle Statspack Survival Guide), či s jeho následovníkem Automatic Workload Repository (AWR) jehož princip spočívá ve vytváření "snapshotů" důležitých interních statistik (počet dotazů, transakcí, čtení z disku, z cache, ...) a následné analýze rozdílů mezi provedenými snapshoty. Málo se ale ví že pro PostgreSQL existuje nástroj pgstatspack, který už svým názvem na Statspack odkazuje - je založen na stejném principu (analýza rozdílů mezi snapshoty), a i když je pochopitelně jednodušší může být stejně neocenitelným pomocníkem při ladění výkonu.

1