Avansert PostgreSQL: Indeksering, partisjonering og replikering · leksjon

Reindeksering og indeksvedlikehold

Forstå når og hvordan reindeksering skal utføres, analyser indeksoppblåsing og vedlikehold indeksenes tilstand for optimal ytelse.

Leksjon 3 av 412 trinn

Reindeksering og indeksvedlikehold er en gratis leksjon i Avansert PostgreSQL: Indeksering, partisjonering og replikering på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Avansert PostgreSQL: Indeksering, partisjonering og replikering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Avansert PostgreSQL: Indeksering, partisjonering og replikering inneholder totalt 4 leksjoner.

Holde indeksene sunne

Indekser er avgjørende for databaseytelsen, men i likhet med alle andre komponenter trenger de vedlikehold. Over tid kan indekser bli mindre effektive på grunn av fragmentering og «bloat».

I denne leksjonen skal vi lære hvorfor indeksvedlikehold er viktig, hvordan De oppdager problemer som bloat, og hvordan De løser dem ved hjelp av reindeksering.

Hva er indeks-bloat?

Indeks-bloat viser til bortkastet plass i en indeks. Det oppstår når indeksoppføringer blir utdaterte uten å bli fjernet umiddelbart, eller når en indeksstruktur blir ineffektiv.

Denne «bloaten» kan føre til:

  • Større indeksfiler som bruker mer diskplass.
  • Flere I/O-operasjoner, som gjør spørringer tregere.
  • Mindre effektiv bruk av hurtigbufferen.

Slik akkumuleres bloat

PostgreSQL bruker en teknikk som kalles MVCC (Multi-Version Concurrency Control). Når De UPDATE- eller DELETE-rader, blir de gamle versjonene (kalt «dead tuples») ikke fjernet umiddelbart fra tabellen eller indeksene.

Prosessen VACUUM rydder opp i disse «dead tuples». Hvis VACUUM imidlertid ikke kjører ofte nok, eller transaksjoner holder låser som hindrer oppryddingen, akkumuleres «dead tuples», noe som fører til bloat.

Identifisere indeks-bloat

Det kan være vanskelig å oppdage bloat. De kan ikke bare se på filstørrelsen, fordi den også omfatter nyttige data. De kan imidlertid spørre PostgreSQLs systemkataloger for å anslå bloat ved å sammenligne den faktiske plassen en indeks bruker, med plassen den teoretisk burde bruke.

De viktigste tabellene for dette er pg_class (for relasjonsstørrelser) og pg_stat_user_indexes (for bruksstatistikk).

Kode: Kontrollere indeksstørrelse

Selv om en fullstendig beregning av bloat er komplisert, kan De enkelt kontrollere den nåværende størrelsen på en indeks. En raskt voksende indeks uten tilsvarende datavekst kan være et tegn på bloat. Erstatt 'your_index_name' med navnet på en faktisk indeks.

SELECT
  c.relname AS index_name,
  pg_size_pretty(pg_relation_size(c.oid)) AS index_size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'public'
  AND c.relkind = 'i'
  AND c.relname = 'accounts_pkey'; -- Example: primary key index

Hva er reindeksering?

Reindeksering er prosessen med å bygge en indeks på nytt fra grunnen av. Når De reindekserer, oppretter PostgreSQL en helt ny og ren versjon av indeksen.

Denne nye indeksen er:

  • Fri for bloat og fragmentering.
  • Optimalisert for lagring og tilgang.
  • Potensielt raskere for spørringer.

Når bør De reindeksere?

Reindeksering er ikke en daglig oppgave, men er viktig i flere situasjoner:

  • Mye indeks-bloat: Når bloat øker indeksstørrelsen betydelig og svekker ytelsen.
  • Ytelsesforringelse: Hvis spørringsplaner viser at indeksene blir mindre effektive over tid.
  • Skjemaendringer: Etter større endringer som kan påvirke indeksstrukturen.
  • Oppgraderinger av PostgreSQL: Anbefales noen ganger for best mulig ytelse med nye versjoner.

Kommandoen REINDEX

PostgreSQL tilbyr kommandoen REINDEX for å bygge indekser på nytt. De kan reindeksere enkeltindekser, alle indekser på en tabell eller til og med alle indekser i en database.

Alternativet CONCURRENTLY er avgjørende for produksjonssystemer, fordi det gjør det mulig å reindeksere uten å blokkere lesing eller skriving på tabellen. Uten dette alternativet låses tabellen under operasjonen.

Kode: Reindeksere en indeks

For å reindeksere en bestemt indeks bruker De kommandoen REINDEX INDEX. Husk å bruke CONCURRENTLY for ikke-blokkerende operasjoner i produksjon. Erstatt 'my_table_col_idx' med navnet på den aktuelle indeksen.

REINDEX INDEX CONCURRENTLY my_table_col_idx; -- Example: a specific index
-- Or without CONCURRENTLY (blocks access):
-- REINDEX INDEX my_table_col_idx;

Kode: Reindeksere en tabell

De kan også reindeksere alle indekser som er knyttet til en bestemt tabell, ved å bruke REINDEX TABLE. Dette er praktisk, men påvirker alle indeksene på tabellen. Også her anbefales CONCURRENTLY på det sterkeste.

REINDEX TABLE CONCURRENTLY my_table; -- Reindexes all indexes on 'my_table'
-- Or without CONCURRENTLY (blocks access):
-- REINDEX TABLE my_table;

Sjekk av indeksvedlikehold

Hvilket av alternativene nedenfor er en hovedgrunn til å bruke REINDEX ... CONCURRENTLY i et PostgreSQL-produksjonsmiljø?

Verktøykassen for indeksvedlikehold

Gratulerer! De har lært om de viktigste aspektene ved vedlikehold av PostgreSQL-indekser.

  • De kan nå identifisere indeks-bloat og forstå hvordan det påvirker ytelsen.
  • De vet når og hvorfor De bør utføre reindeksering.
  • De har sett hvordan kommandoen REINDEX brukes, særlig sammen med det viktige alternativet CONCURRENTLY.

Regelmessig overvåking og vedlikehold av indeksene holder PostgreSQL-databasen i gang på en stabil og effektiv måte!

Gratis å komme i gang

Lær deg Avansert PostgreSQL: Indeksering, partisjonering og replikering med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
11
Leksjoner
44

Ofte stilte spørsmål

Er leksjonen «Reindeksering og indeksvedlikehold» gratis?

Ja – hele teksten i «Reindeksering og indeksvedlikehold» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Avansert PostgreSQL: Indeksering, partisjonering og replikering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Avansert PostgreSQL: Indeksering, partisjonering og replikering inneholder totalt 4 leksjoner.

Hva lærer jeg i «Reindeksering og indeksvedlikehold»?

Forstå når og hvordan reindeksering skal utføres, analyser indeksoppblåsing og vedlikehold indeksenes tilstand for optimal ytelse. Du øver på Avansert PostgreSQL: Indeksering, partisjonering og replikering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Avansert PostgreSQL: Indeksering, partisjonering og replikering?

Ingen tidligere erfaring er nødvendig. Avansert PostgreSQL: Indeksering, partisjonering og replikering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Reindeksering og indeksvedlikehold»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Avansert PostgreSQL: Indeksering, partisjonering og replikering-leksjonen?

Ja. Alle Avansert PostgreSQL: Indeksering, partisjonering og replikering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Analysere spørringsplaner med EXPLAIN
  2. Overvåking av indeksbruk
  3. Reindeksering og indeksvedlikehold
  4. Justering av indekskostnad med ANALYZE og statistikk
← Tilbake til Avansert PostgreSQL: Indeksering, partisjonering og replikering