# Økte PostgreSQL‑ytelsen 10 ganger gjennom strategisk indeksering, partisjonering og spørringsoptimalisering, og gjorde databasen mer effektiv for bruker- og tenantdata, geodata og elektriske tidsseriedata.

2022 – 2024

**Situasjon.** PostgreSQL‑databasen betjente en mellomstor applikasjon som forvaltet brukerkontoer, leietakerinformasjon, geografiske data (f.eks. steder, regioner) og daglige metrikker for strømforbruk. Selv om systemet hadde lite trafikk, oppsto det ytelsesproblemer etter hvert som datamengdene vokste. Spørringer mot geospatiale data og tidsserielogger for strøm ble trege, noe som ga ujevne svartider. Mangel på optimalisert indeksering, fragmenterte spørringer og upartisjonerte tabeller forverret problemet og skapte flaskehalser for kritiske operasjoner som brukerautentisering, leietakeradministrasjon og datarapportering.

**Oppgave.** Målet var å forbedre databaseytelsen 10 ganger uten å bygge om den eksisterende arkitekturen. Fokuset var å optimalisere kjøringen av spørringer, redusere latensen og sikre skalerbarhet for framtidig datavekst. Viktige prioriteringer var å forbedre svartidene for geospatiale og tidsbaserte spørringer, minimere ressurskonflikter og bevare dataintegriteten mens endringene ble gjennomført.

**Handling.** 1. **Indeksering:** Analyserte kolonner det ofte ble spurt mot (f.eks. bruker‑ID‑er, leietaker‑ID‑er, geospatiale koordinater) og opprettet målrettede indekser. For geospatiale data ble GiST‑indekser lagt til for å gjøre romlige spørringer raskere. Sammensatte indekser ble innført for filtre på flere kolonner, som leietaker‑ID + datointervaller for strømdata.
2. **Partisjonering:** Implementerte tidsbasert intervallpartisjonering av tabellen med strømdata, delt opp per dag/måned. Dette reduserte datamengden for spørringene og ga mer effektiv skanning. For geografiske data ble hash‑partisjonering brukt for å fordele lasten jevnt mellom nodene.
3. **Spørringsoptimalisering:** Skrev om komplekse spørringer for å unngå fulle tabellskanninger, med CTE‑er (Common Table Expressions) og materialiserte visninger for datasett som ofte ble brukt. Verktøyet `EXPLAIN ANALYZE` avdekket ineffektive joins og delspørringer, som ble omstrukturert for bedre kjøreplaner. I tillegg ble caching av spørringer og tilkoblingspooling konfigurert for å redusere overhead.

**Resultat.** Etter optimaliseringen ble svartidene for spørringer 10 ganger bedre, og kritiske operasjoner (f.eks. brukerautentisering, geospatiale oppslag) ble utført på millisekunder. Databasens ressursbruk falt med 40 %, slik at systemet kunne håndtere større datamengder uten at ytelsen ble dårligere. Brukerne rapporterte smidigere interaksjon, og systemet ble mer skalerbart for framtidig vekst. Endringene reduserte også behovet for maskinvareoppgraderinger, noe som sparte kostnader og samtidig sikret langsiktig pålitelighet. Prosjektet viste hvordan strategisk indeksering, partisjonering og forbedring av spørringer kan gjøre selv systemer med lav belastning om til effektive, framtidsklare databaser.

---

- Rolle: Databaseingeniør
- Kategorier: [Databaser](https://engineer.company/nb/categories/databases/), [PostgreSQL](https://engineer.company/nb/categories/postgresql/), [SQL](https://engineer.company/nb/categories/sql/), [Data engineering](https://engineer.company/nb/categories/data-engineering/), [Ytelsesoptimalisering](https://engineer.company/nb/categories/performance/), [GIS / geodata](https://engineer.company/nb/categories/gis/)
- Tjenester: [Databaseadministrasjon (DBA)](https://engineer.company/nb/services/database-administration/), [Optimalisering av databaseytelse](https://engineer.company/nb/services/database-performance/)

<https://engineer.company/nb/portfolio/accelerated-postgresql-performance-by-10x-via-strategic-indexing-15/>
