programmera.net -> oracledba -> normal     för utskrift      info@programmera.net

MSSM

1. Vad är MSSM?
2. PCTFREE
3. PCTUSED

1. Vad är MSSM?

MSSM står för "Manual Segment Space Management" och är ett sätt att bestämma hur Oracle ska hitta block där det finns plats att lägga till nya rader. Eftersom data läggs till och tas bort från tabeller huller om buller måste vi ha något sätt att identifiera vilka block som är redo att ta emot mer data. I MSSM löser vi detta problem genom tilldela varje databasobjekt (tabell eller index) en FREELIST som pekar ut de block som kan ta emot mer data. Allt eftersom data läggs till ett segment kommer block att försvinna från FREELIST, och när data tas bort kommer vi att få fler block i FREELIST.

  • OBS: MSSM används per default fram till Oracle 10gR1, Men för Oracle 10gR2 och fram är ASSM är default. Om du kör Oracle 10gR2 eller senare måste du specifiera "SEGMENT SPACE MANAGEMENT MANUAL" för att använda MSSM.

2. PCTFREE

Denna parameter kan sättas då tabellutrymmet skapas (om du har SEGMENT SPACE MANAGEMENT MANUAL för tabellutrymmet). Parametern gäller då för alla block i tabellutrymmet. PCTFREE bestämmer när Oracle ska sluta lägga in mer data i blocket. När andelen lediga bytes blir mindre än PCTFREE procent av totala blockstorleken (minus headern) kommer Oracle ta bort blocket från FREELIST (registrera blocket som fullt). Default är 10%. Nedan ger jag exempel på situationer då man kanske vill ändra detta värde:

  • Om man har ett tabellutrymme som bara innehåller tabeller som ändras sällan kan det finnas en poäng att sätta PCTFREE = 2% för detta tabellutrymme, för att få in så många rader som möjligt i blocket.
  • Om man har ett tabellutrymme som bara innehåller tabeller med små rader som ändras ofta kan man sätta PCTFREE = 50%. Detta innebär att blocket bara fylls till hälften innan det försvinner ur FREELIST. Detta för att undvika situationer där en ändring orsakar att blocket blir överfullt, vilket är kostsamt ur prestandasynvinkel.

3. PCTUSED

Denna parameter kan sättas då tabellutrymmet skapas (om du har SEGMENT SPACE MANAGEMENT MANUAL). PCTUSED bestämmer när Oracle ska börja lägga in mer data i blocket. När man utför DELETE-satser på tabellen kommer rader att tas bort ur blocket och andelen lediga bytes att öka. När andelen lediga bytes blir större än PCTUSED kommer Oracle att lägga in blocket i FREELIST (registrera blocket som "icke fullt" så att nytt data kan adderas till blocket). Default är 40%.

  • När man utför många INSERT på raken är det viktigt att PCTUSED är betydligt högre än PCTFREE för att så många rader som möjligt ska komma in i blocket innan man måste byta block.