# Har gjort PostgreSQL 10 gange hurtigere

Har gjort PostgreSQL 10 gange hurtigere med strategisk indeksering, partitionering og forespørgselsoptimering og effektiviseret databasen til brugerdata, tenantdata, geodata og tidsserier af eldata.

2022 – 2024

**Situation.** PostgreSQL‑databasen betjente en mellemstor applikation, der håndterede brugerkonti, tenant‑oplysninger, geografiske data (f.eks. lokationer og regioner) og daglige målinger af elforbrug. Systemet kørte med lav trafik, men efterhånden som datamængderne voksede, opstod der problemer med ydeevnen. Forespørgsler på geospatiale data og tidsseriebaserede ellogs blev langsomme, og svartiderne svingede. Manglende optimeret indeksering, fragmenterede forespørgsler og upartitionerede tabeller forværrede problemet og skabte flaskehalse i kritiske funktioner som brugerautentifikation, tenant‑administration og datarapportering.

**Opgave.** Målet var at forbedre databasens ydeevne 10 gange uden at bygge den eksisterende arkitektur om. Fokus lå på at optimere udførelsen af forespørgsler, reducere latensen og sikre skalerbarhed til fremtidig datavækst. De vigtigste prioriteter var kortere svartider for geospatiale og tidsbaserede forespørgsler, mindre konkurrence om ressourcerne og bevaret dataintegritet, mens ændringerne blev gennemført.

**Handling.** 1. **Indeksering:** Kolonner, der ofte blev forespurgt (f.eks. bruger‑id'er, tenant‑id'er og geospatiale koordinater), blev analyseret, og der blev oprettet målrettede indeks. Til geospatiale data blev der tilføjet GiST‑indeks for at gøre spatiale forespørgsler hurtigere. Til filtre på flere kolonner, f.eks. tenant‑id kombineret med datointervaller for eldata, blev der indført sammensatte indeks.
2. **Partitionering:** Tabellen med eldata blev range‑partitioneret efter tid og opdelt pr. dag/måned. Det mindskede den datamængde, forespørgslerne skulle gennemsøge, og gjorde scanningerne mere effektive. De geografiske data blev hash‑partitioneret for at fordele belastningen jævnt mellem noderne.
3. **Optimering af forespørgsler:** Komplekse forespørgsler blev omskrevet for at undgå fulde tabelscanninger, med CTE'er (Common Table Expressions) og materialiserede views til ofte anvendte datasæt. Med værktøjet `EXPLAIN ANALYZE` blev ineffektive joins og subqueries identificeret og omstruktureret, så de fik bedre udførelsesplaner. Derudover blev caching af forespørgsler og connection pooling konfigureret for at reducere overhead.

**Resultat.** Efter optimeringen blev svartiderne for forespørgsler 10 gange bedre, og kritiske operationer (f.eks. brugerautentifikation og geospatiale opslag) blev udført på millisekunder. Databasens ressourceforbrug faldt med 40 %, så systemet kunne håndtere større datamængder uden at miste ydeevne. Brugerne meldte om en mere glidende oplevelse, og systemet blev mere skalerbart med henblik på fremtidig vækst. Ændringerne mindskede også behovet for hardwareopgraderinger, hvilket sparede omkostninger og sikrede pålideligheden på lang sigt. Projektet viste, hvordan strategisk indeksering, partitionering og finpudsning af forespørgsler kan forvandle selv systemer med lav belastning til effektive og fremtidssikre databaser.

---

- Rolle: Databaseingeniør
- Kategorier: [Databaser](https://engineer.company/da/categories/databases/), [PostgreSQL](https://engineer.company/da/categories/postgresql/), [SQL](https://engineer.company/da/categories/sql/), [Data engineering](https://engineer.company/da/categories/data-engineering/), [Optimering af ydeevne](https://engineer.company/da/categories/performance/), [GIS / geodata](https://engineer.company/da/categories/gis/)
- Ydelser: [Databaseadministration (DBA)](https://engineer.company/da/services/database-administration/), [Databaseoptimering](https://engineer.company/da/services/database-performance/)

<https://engineer.company/da/portfolio/accelerated-postgresql-performance-by-10x/>
