Gjorde PostgreSQL 10 gånger snabbare med strategisk indexering, partitionering och optimering av databasfrågor och effektiviserade databasen för användar- och tenantdata, geospatiala data och tidsseriedata om el.
Arbetet utfört: 2022 – 2024
10x snabbare PostgreSQL, genom indexering och partitionering
Situation. PostgreSQL‑databasen betjänade en medelstor applikation som hanterade användarkonton, information om tenants, geografiska data (t.ex. platser, regioner) och dagliga mätvärden för elförbrukning. Systemet hade låg trafik, men prestandaproblem uppstod i takt med att datavolymerna växte. Databasfrågor mot geospatiala data och tidsserieloggar för el blev tröga, vilket gav ojämna svarstider. Avsaknaden av optimerad indexering, fragmenterade databasfrågor och opartitionerade tabeller förvärrade problemet och skapade flaskhalsar i kritiska funktioner som användarautentisering, hantering av tenants och datarapportering.
Uppgift. Målet var att förbättra databasens prestanda 10 gånger utan att göra om den befintliga arkitekturen. Fokus låg på att optimera körningen av databasfrågor, minska latensen och säkerställa skalbarhet för framtida datatillväxt. Viktiga prioriteringar var kortare svarstider för geospatiala och tidsbaserade databasfrågor, minimal resurskonkurrens och bibehållen dataintegritet medan ändringarna genomfördes.
Handling. 1. Indexering: Analyserade kolumner som ofta användes i databasfrågor (t.ex. användar‑ID, tenant‑ID, geospatiala koordinater) och skapade riktade index. För geospatiala data lades GiST‑index till för att snabba upp spatiala frågor. Sammansatta index infördes för filter på flera kolumner, t.ex. tenant‑ID + datumintervall för eldata.
2. Partitionering: Implementerade tidsbaserad intervallpartitionering för tabellen med eldata, uppdelad per dag/månad. Det minskade datamängden för varje databasfråga och förbättrade skanningseffektiviteten. För geografiska data användes hashpartitionering för att fördela lasten jämnt mellan noderna.
3. Frågeoptimering: Skrev om komplexa databasfrågor för att undvika fullständiga tabellskanningar, med CTE:er (Common Table Expressions) och materialiserade vyer för ofta använda dataset. Verktyget EXPLAIN ANALYZE pekade ut ineffektiva joins och underfrågor, som strukturerades om för bättre exekveringsplaner. Dessutom konfigurerades cachning av databasfrågor och anslutningspoolning för att minska overhead.
Resultat. Efter optimeringen förbättrades svarstiderna för databasfrågor 10 gånger, och kritiska operationer (t.ex. användarautentisering, geospatiala uppslag) kördes på millisekunder. Databasens resursanvändning minskade med 40 %, så att systemet klarade större datavolymer utan försämrad prestanda. Användarna rapporterade smidigare interaktion, och systemet blev mer skalbart för framtida tillväxt. Ändringarna minskade också behovet av hårdvaruuppgraderingar, vilket sparade kostnader och säkrade tillförlitligheten på lång sikt. Projektet visade hur strategisk indexering, partitionering och förfining av databasfrågor kan förvandla även system med låg last till effektiva, framtidssäkra databaser.
Se tillbaka på Stärkte datasäkerheten genom att införa 1 000 RBAC‑regler för utvecklare, applikationsinstanser, PostgreSQL, MS SQL och andra Linux‑servrar, vilket förhindrade obehörig åtkomst; dokumenterade reglerna som automatisering i Ansible. Eller ta en titt på hela portföljen.
En del av en längre historik — och den finns i sin helhet här.
Varje post är skriven på samma sätt: situationen, uppgiften, vad vi gjorde och vad som förändrades.