Hvordan overvåke plass i segmenter i Oracle 12c

September 16  by Eliza

Segmenter er objekter som tar opp plass i databasen i Oracle 12c. Segmenter er objekter som, når de opprettes, tildelt en eller flere grad fra den ledige plassen i tabellplassene. De to vanligste database segmentene er

  • Tabeller
  • Indekser

Tabeller er hva holde data og indekser er tilgang pekere til dataelementer i en tabell. Forvaltning av plass for tabeller og indekser er svært like; imidlertid de samme begreper og teknikker søke om indeksplass ledelse.

Før du setter alle data i en tabell, går Oracle til tabellplassen der det bor og tildeler en grad. Du kan kalle dette en brukt grad fordi det tilhører et objekt. Den resterende plassen i tabell er gratis grad du kan bruke når gjenstander vokse eller nye objekter opprettes.

Som du begynner å sette inn data i den tabellen, begynner den grad som ble tildelt ved etableringen å fylle opp. Når den grad når kapasiteten, bordet går ut til tabell og griper en annen grad. Denne syklusen fortsetter inntil enten du slutter å legge data eller tabell går tom for ledig plass.

Hvis tabell går tom for ledig plass, prosessen ber om plassen genererer en feilmelding, og enten svikter eller midlertidig suspenderer før plassen er lagt til.

Hvordan å vokse og krympe tabeller i Oracle 12c

En tabell som passer denne kategorien kan være lagt i hver kveld, og deretter slettes fra hele dagen, som en gruppebehandling bord.

For eksempel vurdere en ORDRE tabell som er batch lastet om natten fra alle ordrene som ble tatt fra en nettside; som ordrene behandles neste dag er rekkene slettes en etter en. På slutten av dagen, blir alle radene borte. Hva trenger du å overvåke for denne tabellen?

Du bør være mest opptatt av hvor stort bordet får hver dag etter batch belastning. Bedrifter ønsker ordre om å øke. Hva om de sletter? Skulle du krympe tabellen på slutten av dagen før den neste batch belastning å frigjøre plass? Absolutt ikke.

Selv om den er liten, er fremveksten av et objekt overhead på systembehandlingen. Ved å la den samme størrelsen dag til dag, vet du plassen vil bli kontinuerlig gjenbrukt. Du i hovedsak ønsker å overvåke denne type objekt for vekst.

Hva om et bord som du legger til og slette fra med jevne mellomrom? Si for hver 1 million rader satt i en uke, er 30 prosent slettet. Denne tabellen kan presentere en interessant utfordring.

Ta en rask titt på hvordan rader er satt inn for å bedre forstå hvordan objekter vokse og bruk plass:

  • Du har en ny tabell med ett 64k grad.
  • Din blokkstørrelse er 4k, slik at omfanget er 16 blokker.
  • Du begynner å sette inn data; 100 rader passe i en blokk.
  • Som standard fyller Oracle blokker til 90 prosent fulle og deretter stopper. For eksempel er noen felt igjen null på et senere tidspunkt, og så fylle dem du ikke vil blokken å få fylt altfor lett av en oppdatering.; ellers Oracle har for å flytte rad til en ny blokk som passer den. Dette rader migrasjon forringer ytelsen.
  • Når alle blokkene er fylt i de frie utstrekninger, bordet allokerer en ny grad, og prosessen begynner på nytt.

Selv om Oracle har redusert ytelse overhead som kommer med administrerende blokker og hvilke du kan sette data inn, fortsatt har administrerende blokklagring en kostnad forbundet med det.

Tenk deg at du har en tabell med 10.000 blokker og du stadig sette inn og slette fra det bordet. Oracle kunne bruke alle CPU-sykluser administrere hvilke blokker kan ha inserts og som ikke kan hvis det var bare en ett-rad forskjell mellom full og ikke-fullt blokker.

Det er derfor Oracle bruker regelen 40 prosent. En blokk tar alle innsatser det kan før det er 90 prosent fulle, men blokken kan ikke komme tilbake i linjen før det er blitt redusert til 40 prosent fulle.

Hvordan å krympe tabeller i Oracle 12c

Du må finne ut om du kan slippe et objekts plass etter vurdering av objektets bruksmønster. Å avgjøre om du kan slippe et objekts plass krever litt aritmetikk. Før du kan bestemme om du vil få plass i en tabell, må du analysere bordet for å samle inn statistikk.

ANALYSE kommandoen får de nødvendige statistikk å gjøre dette beregningen; DBMS_STATS ikke får de statistikken.

Dette eksemplet bruker EMP tabellen. Å analysere tabellen riktig, ta disse trinnene:

  1. Logge på SQL * Plus og type

    <Analysere tabell emp beregne statistikk;>

    Du ser dette:

    Tabell analysert.

  2. Kjøre en spørring mot USER_TABLES visning ved å skrive

    <velger TABLE_NAME, avg_space, blokker
    fra user_tables
    hvor table_name = 'EMP'>

    Du ser omtrent slik ut:

    TABLE_NAME AVG_SPACE BLOKKER
    ------------------------------ ---------- ----------
    EMP 3264 4528

    Den AVG_SPACE kolonnen viser gjennomsnittlig mengde ledig plass per blokk.

  3. Bruk følgende formel for å beregne hvor mye tomrom i EMP tabellen:

    (AVG_SPACE - (DB_BLOCK_SIZE × FREE_SPACE)) × TAB_BLOCKS

    For dette eksempelet, ser formelen slik ut:

    (3623 - (8192 × 0,10)) × 4528 = 11066432 (ca. 11 MB)

  4. Avgjør om det er nok plass til å gjøre det verdt å krympe objektet.
  5. For å aktivere Oracle å flytte rader rundt i den type tabellen, problemet denne SQL-kommando:

    <Alter table emp aktiver rad bevegelse;>

    Du ser dette:

    Tabell endret.

  6. Utstede denne SQL kommando for å gjøre krympe:

    <Alter table emp krympe plass;>

    Du ser dette:

    Tabell endret.

  7. Re-analysere bordet og re-utføre spørringen for å sjekke statistikken.

    <velger TABLE_NAME, avg_space, blokker
    fra user_tables
    hvor table_name = 'EMP'>

    Du bør se omtrent slik ut:

    TABLE_NAME AVG_SPACE BLOKKER
    ------------------------------ ---------- ----------
    EMP 933 2979

    Som du kan se, er det AVG_SPACE om lag 10 prosent av blokken størrelse. Dette er normalt for standard blokk plass organisasjon.