Analysere data og rebygge indekser

En faktor som kan påvirke ytelsen i en Enterprise Geodatabase er utdatert statistikk og «skjeve» indekser. Detter bør oppdateres jevnlig.

Hva er statistikk i databasen?

Databasen vedlikeholder, til dels automatisk, noe som kalles statistikk. Denne statistikken sier noe om hvordan data er lagret. Denne statistikken kan, for eksempel, inneholde informasjon om:

  • Hvor mange rader det er i tabellen?
  • Hvor lang er gjennomsnittlig radlengde i tabellen?
  • Hvor god «selektivitet» har indeksen?
  • Hvordan er fysisk forhold mellom rader i tabellen og indeksen?

Dette er viktig informasjon for databasen. Den benyttes når databasen skal hente opp data. Da vil databasen vurdere hvordan data som spørres etter skal hentes opp på mest fornuftige måte. Er ikke statistikken helt oppdatert, betyr det at databasen kan gjøre uheldige valg i forhold til hva som er den mest optimale måten å hente data på. Resultat er dårlig ytelse.

De fleste databaser oppdaterer statistikk automatisk. Siden dette kan være en litt tung prosess, vil den ofte gjøre dette i rolige perioder av døgnet, typisk nattestid.

Hva mener vi med «skjeve» indekser? Mange databaser benytter en type indekser som kalles R-tre indeks. Denne består av en fysisk struktur som inneholder en peker til selve raden med data i tabellen.

Når indeksen opprettes, vil den se ut som et symmetrisk tre, selv om vi ofte tegner den opp-ned:

Figur 1: Et balansert indekstre

Hver av boksene er en databaseblokk med peker til data. Dersom blokken ikke er i stand til å holde nok verdier, vil den opprette to nye hvor en er i stand til å holde verdier. Bokstavene L og H angir hvilke lave verdier som finnes og hvilke høye verdier som finnes.

Litt avhengig av hva slags type verdier vi har indekser på, vil nye rader i indeksen (egentlig tabellen) medføre at blokker må «splittes» fordi det ikke er plass til flere verdier i en eksisterende blokk. Det legges da til nye blokker. Over tid vil det symmetriske treet vi startet med få et litt annet utseende:

Figur 2: Et ubalansert indekstre

Som vi ser har det dukket opp flere grener på høyre side i indeksen. Dette er typisk for indekser som er satt på kolonner hvor vi legger inn stigende verdier i tabellen. OBJECTID kolonnen i alle geodatabaseobjekter er en typisk slik kolonne.

Når indeksen blir slik, vil indeksen bli tyngre å bruke. Ønsket er at indeksen «alltid» skal se så symmetrisk ut som når den ble laget.

De færreste databaser har egne funksjoner for å «balansere» skjeve indekser.

Hvordan oppstår utdatert statistikk og «skjeve» indekser?

Dette oppstår under normal drift. I løpet av en normal arbeidsdag vil det utføres mange redigeringer i data. Hver redigering av data vil gjøre noe med innholdet og vil derfor påvirke hvor godt statistikken passer med data og hvor symmetriske indeksene er.

Dersom vi laster nye data i databasen, vil vi potensielt kunne introdusere mange nye rader i en eller flere tabeller i databasen. Dette vil kunne ha stor betydning for hvor godt statistikker passer til data og hvor «skjeve» indeksene blir.

Hva kan vi gjøre med utdatert statistikk og «skjeve» indekser?

I nyere versjoner av ArcGIS har det kommet verktøy for å avhjelpe problemer med utdatert statistikk og skjeve indekser.

For å få rettet opp i utdatert statistikk må vi analysere data på nytt. Dette er standard funksjoner i en RDBMS, som Enterprisedatabasen bygger på. Vi kan velge om vi vil kjøre databasens verktøy direkte eller la ArcGIS hjelpe oss med det.

Måten å få rettet opp i en «skjev» indeks er å bygge den opp på nytt. En rebygging av indeksen betyr ikke at vi først sletter den for så å opprette den på nytt. I stedet bygger vi opp de interne lagringsstrukturene på nytt. Dette vil balansere treet igjen slik at det blir symmetrisk.

Rebygging av indekser er standard databasefunksjonalitet. Vi kan derfor velge om vi vil bruke databasens verktøy eller la ArcGIS hjelpe oss.

Siden det varierer fra RDBMS til RDBMS hvordan disse to operasjonen gjøres, vil det ikke dokumenteres hvordan dette utføres. I stedet vil vi vise hvordan dette kan utføres i ArcGIS.

Oppdatere statistikk i ArcGIS

Verktøy for å oppdatere statistikken i en Enterprise Geodatabase finner vi i Toolbox’ene i ArcGIS. Det finnes under System Toolboxes > Data Management Tools > Geodatabase Administration.

Figur 3: Tool for å analysere datasett

Når vi starter verktøyet Analyze Datasets, vil vi få opp en dialogboks, hvor vi må velge en databasekobling. Dette må være en kobling til brukere som eier dataene. Vi har ikke muligheter for å analysere data for data vi ikke har full tilgang til. Det er det normalt eieren som har. Etter å ha valgt en databasekobling, vil det fylles ut hvilke tabeller og featureklasser vi skal analysere:

Figur 4: Dialogbilde fra verktøy for å analysere datasett

Her kan vi velge hvilke tabeller og/eller featureklasser vi skal analysere. Dette velger vi under Datasets to Analyze (optional).

I tillegg velger vi om vi vil:

  • Analysere «base» tabellene, det vi omtaler som businesstabellen.
  • Analysere deltatabellene.
  • Analysere arkivene (historikk).

Vi kan i praksis velge alt – verktøyet vil finne ut hva som faktisk finnes. Det vil ikke rapporteres feil dersom vi, for eksempel, velger å analysere arkivene selv om vi ikke har satt på arkivering i databasen.

Rebygge indekser

Verktøyet for å rebygge indekser i en Enterprise Geodatabase finner vi i Toolbox’ene i ArcGIS. Det finnes under System Toolboxes > Data Management Tools > Geodatabase Administration.

Når vi starter verktøyet Rebuild Indexes, vil vi få opp en dialogboks, hvor vi må velge en databasekobling. Dette må være en kobling til brukere som eier dataene. Vi har ikke muligheter for å rebygge indekser for data vi ikke har full tilgang til. Det er det normalt eieren som har. Etter å ha valgt en databasekobling, vil det fylles ut hvilke tabeller og featureklasser vi skal rebygge indekser for:

Her kan vi velge hvilke tabeller og/eller featureklasser vi skal rebygge indekser for. Dette velger vi under Datasets to Rebuild Indexes For (optional).

I tillegg velger vi om vi bare vil bygge indekser på nytt for deltatabellene eller om vi skal rebygge for både businesstabellene og deltatabellene.

Hva som er riktig, avhenger i stor grad av hva vi har gjort med dataene. Har vi stort sett foretatt rene redigeringer på data, er det i deltatabellene vi gjør endringene våre og det kan være fornuftig å bare bygge på nytt for disse tabellene.

Det vil, normalt, likevel være hensiktsmessig å bygge både for business- og deltatabellene.