Toni Navarrete Enginyeria del Software II – UPF 200 4
description
Transcript of Toni Navarrete Enginyeria del Software II – UPF 200 4
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
e
Aspectes d’administració de l’emmagatzematge d’Oracle
(parcialement basat en la Guia de l’estudiant “Oracle 8: Database Administration”)
Toni Navarrete
Enginyeria del Software II – UPF 2004
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 2
Normalització: 1FN
• Una relació R està en 1FN si i només si cada columna conté només valors atòmics
• (un atribut només pot tenir un valor)
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 3
Normalització: 2FN
• Una relació R està en 2FN si i només si està en 1FN i tots els atributs que no formen part de la clau primària tenen dependència funcional completa d’aquesta
• (no s’adment que un atribut depengui només d’una part de la clau)
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 4
Normalització: 3FN
• Dependència no transitiva: és una relació que té almenys tres atributs (A,B,C), on A determina B, B determina C, però C no determina A
• Una relació R està en 3FN si i només si està en 2FN i tots els seus atributs que no pertanyen a la clau primària depenen no transitivament d’aquesta
• (no hi haurà cap atribut que depengui d’un altre que no sigui clau primària; si fos així, han d’anar a una altra relació)
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 5
Estructura de l’emmagatzematge a Oracle
Database
Logical Physical
Tablespace Data file
O/S BlockOracle block
Segment
Extent
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 6
Què és un espai de taules (tablespace)?
• És el nom que es dóna a un grup d’un o més arxius de bases de dades
• Quan es creen “objectes” es pot especificar en quin espai de taules– Control sobre on i quin espai
d’emmagatzematge s’utilitza
• N’hi ha un espai de taules anomenat SYSTEM
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 7
Tablespaces SYSTEM i no SYSTEM
•SYSTEM Tablespacecontains:
• Data dictionary information
• SYSTEM rollback segment
•Non-SYSTEMTablespace contains:
• Rollback segments• Temporary segments• Application data• Application indexes
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 8
Com es crea un tablespace?CREATE TABLESPACE nom
DATAFILE filespec [clàusula_autoextend]
[, filespec [clàusula_autoextend]]...
[MINIMUM EXTENT integer[K|M]]
[DEFAULT clàusula_storage]
[PERMANENT|TEMPORARY]
[ONLINE|OFFLINE]
Exemple:CREATE TABLESPACE app_data
DATAFILE ‘/...../app01.dbf’ SIZE 100M,
‘/...../app02.dbf’ SIZE 100M
MINIMUM EXTENT 500K
DEFAULT STORAGE (INITIAL 500K NEXT 500K MAXEXTENTS 500
PCTINCREASE 0);
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 9
Storage
• L’espai està estructurat en blocs• El tamany d’aquests blocs està definit
quan es munta la BD, normalment és el mateix tamany que els blocs de SO (per exemple en Linux 4K)
• Quan es crea un segment (una taula, per exemple), se li assigna un extent (extensió). – El seu tamany ve determinat per INITIAL– El valor per defecte és 5*tamany del bloc
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 10
Storage
• En aquest primer extent es posen dades de control del segment i l’espai restant s’usa per insercions de files
• Quan és ple, es crea un segon– El seu tamany vé determinar per NEXT– Per defecte també 5*tamany de bloc
• I així successivament, es pot configurar que cada extent nou sigui en un % més gran que l’anterior– Clàusula PCTINCREASE– Valor per defecte: 50 (arrodonit a l’alça a múltiples de 5)
• La creació de nous extents és un procés bastant costòs • Es pot limitar el nombre màxim d’extents
– MAXEXTENTS
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 11
Exemple Storage
• 1er extent: 5 blocs = 20K
• 2on extent: 5 blocs = 20K
• 3er extent: 10 blocs (5*1,5=7,5 redondejats) = 40K
• 4rt extent: 15 blocs (7,5*1,5=11,25) = 60K
• 5è extent: 20 blocs (11,25*1,5=16,875) = 80K
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 12
Com obtenim informació dels tablespaces existents?
• Taula del diccionari de dades dba_tablespaces (o user_tablespaces)
SELECT tablespace_name, initial_extent, next_extent,max_extents, pct_increase, min_extlen
FROM dba_tablespaces;
• Els comptes d’usuari es2_xx només tenen permís per veure els tablespaces definits pel propi usuari (no poden accedir a dba_tablespaces)– user_tablespaces
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 13
Recomanació
• A la taula del diccionari de dades dba_extents (user_extents) tenim els extents
• Si un segment té més de 10 extents és convenient refer la taula
• Abans de crear (o refer) una taula, convé calcular l’espai de les dades que ja té per assignar-ho al primer extent
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 14
Tipus de segments (1/3)
TableTable
ClusterCluster
Table Table partitionpartition
IndexIndex
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 15
Tipus de segments (2/3)
Index-organizedIndex-organizedtabletable Index Index
partitionpartition
RollbackRollbacksegmentsegment TemporaryTemporary
segmentsegment
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 16
Tipus de segments (3/3)
LOB index LOB index LOBLOB
segmentsegment
BootstrapBootstrapsegmentsegment
Nested tableNested table
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 17
Jerarquia de les clàusules d’emmagatzematge
• Un segment pot tenir les seves pròpies clàusules de storage
• Nivells de prioritat:1. Especificat al nivell
del segment (per exemple en fer un Create Table)
2. Especificat al nivell de l’espai de taules (en fer un Create Tablespace)
3. Valors per defecte d’Oracle
Oracle default
Tablespace
Segment
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 18
Unificant extents lliures colindants (evitant fragmentacions)
• Això passa, per exemple, si s’esborren dues taules consecutives
• Per determinar els exten fragmentats:– Vista DBA_FREE_SPACE_COALESCED– Nota: “coalesce”=fusionarse, unirse
• Consulta:SELECT tablespace_name, total_extents,
percent_extents_coalescedFROM dba_free_space_coalescedWHERE percent_extens_coalesced <>100;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 19
Unificant extents lliures colindants (evitant fragmentacions)
Free extentFree extentUsed extentUsed extentFile headerFile header
BeforeBefore
ALTER TABLESPACE data01 COALESCE;ALTER TABLESPACE data01 COALESCE;
AfterAfter
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 20
Control de l’espai usat per bloc
• PCTFREE (d’un segment de dades) representa el % de cada bloc que deixem lliure per suportar el creixement per “updates” de la fila
• PCTUSED (d’un segment de dades) representa el % mínim d’espai utilitzat d’un bloc
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 21
Control de l’espai usat per bloc
InsertsInserts
InsertsInserts
InsertsInserts
InsertsInserts
1 2
3 4
PCTFREE=20PCTFREE=20 PCTUSED=40PCTUSED=40
80%80%
80%80%
40%40%
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 22
Data Dictionary Views
TablespacesDBA_TABLESPACES
SegmentsDBA_SEGMENTS
Data filesDBA_DATA_FILES
Free extentsDBA_FREE_SPACE
Used extentsDBA_EXTENTS
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 23 Gestionant taules. Creació
CREATE TABLE nom(
columna tipus [, columna tipus]...)
[TABLESPACE nom_tablespace]
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE clàusula_storage]
[LOGGING|NOLOGGING]
[CACHE|NOCACHE]
INITRANS: nº de slots per transaccions* preassignades a cada bloc (1 per
defecte)
MAXTRANS: nº màxim de slots per transaccions* assignades a cada bloc (255 per
defecte)
LOGGING: s’utilitza un redo log file (les operacions són es guarden a un log)
CACHE: s’usa una cache a memoria
* Un slot per transaccions és un espai reservat que s’utilitza per guardar
informació sobre les transaccions que fan canvis al bloc en un moment concret
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 24
Gestionant taules. Creació (un exemple)
CREATE TABLE employees(
empno NUMBER(4),
last_name VARCHAR2(30)
deptno NUMBER(2))
PCTFREE 20 PCTUSED 50
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE data01;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 25
Gestionant taules
• Posar les taules en un tablespace diferent– No amb rollback segments, temporary segments ni
índexs– A ser possible a discos diferents per evitar colls
d’ampolla– Per defecte, els vostres segments es creen al
tablespace users
• Utilitzar tamanys d’extent “estàndard” múltiples de 5*DB_BLOCK_SIZE, per minimitzar la fragmentació
• Usar la clàusula CACHE per petites taules de referència que s’accedeixen molt freqüentment
• Valorar si NOLOGGING per guanyar eficiència (arriscat!)
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 26 Gestió de taules. Càlcul de PCTFREE i
PCTUSED
(Average Row Size Initial Row Size) * 100
Average Row Size
• Compute PCTUSED• Quan s’ha de fer una inserció, es fa una búsqueda linial fins a trobar
un bloc amb espai suficient (si n’hi ha)
• La fórmula pretén reduir el temps d’aquesta búsqueda, de forma que s’incrementi la probabilitat de trobar un bloc amb espai
Average Row Size * 100
100 PCTFREE Available Data Space
• Compute PCTFREE• Un alt PCTFREE suposa més espai per a les modificacions i una
menor densitat (menys files per bloc)
• Aquesta fórmula assegura que hi hagi espai per fer crèixer les files
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 27 Gestió de taules. Reassignant l’espai sense
usar (després de diversos deletes)• El “High water mark” indica el darrer bloc que ha estat usat
– Una lectura de la taula per blocs s’aturarà en arribar-hi
• Amb un deallocate unused desassignem els blocs no usat dels extents d’un segment perquè es puguin assignar a d’altres
Free space after deleteFree space after deleteUnused blockUnused block
High water markHigh water mark
BeforeBeforedeallocationdeallocation
Used blockUsed block
ALTER TABLE employees
DEALLOCATE UNUSED;
ALTER TABLE employees
DEALLOCATE UNUSED;
AfterAfterdeallocationdeallocation
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 28
Diccionari de dades de les taules
DBA_OBJECTS
OWNEROBJECT_NAMEOBJECT_IDDATA_OBJECT_IDCREATED
DBA_SEGMENTS
OWNERSEGMENT_NAMETABLESPACE_NAMEHEADER_FILEHEADER_BLOCK
DBA_TABLES
OWNERTABLE_NAMEPCT_FREEPCT_USEDINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_EXTENTSPCT_INCREASECACHEBLOCKSEMPTY_BLOCKSCHAIN_CNT
DBA_EXTENTS
OWNER
SEGMENT_NAME
EXTENT_ID
FILE_ID
BLOCK_ID
BLOCKS
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 29
Exemple amb el diccionari de dades
• Exemple: recuperar els extents de la taula empleats
SELECT file_id, SUM(blocks) AS Blocks
FROM dba_extents
WHERE segment_name=‘empleats’;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 30
Validant l’estructura
–The Oracle server verifies the integrity of each data block.
–Use the CASCADE option to validate the structure of all indexes on the table, and perform cross-referencing between the table and its indexes.
ANALYZE TABLE empleats
VALIDATE STRUCTURE;
ANALYZE TABLE empleats
VALIDATE STRUCTURE;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 31
Gestionant índexs: tipus d’índexs
• A nivell lògic:– De columna simple o concatenat– Únic o no únic
• A nivell físic:– Arbre B o Bitmap
• Si Arbre B: de clave normal o revers
– Particionat o no particionat
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 32
Arbre B
Index entry header
Key column length
Key column value
ROWID (veure seg. transp.)
Root
Branch
Leaf
Index entry
Un parell (key column length, key column value) per a cada camp de la clau
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 33
Rowid
OOOOOO BBBBBBFFF RRR
Data object number
Relative file number
Row numberBlock number
–Normal Rowid:– Unique identifier for a row – Used to locate a row
–Restricted Rowid:- Can identify rows within a segment- Needs less space
BBBBBBBB FFFFRRRR
Block number Row number File number
. .
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 34
Algunes característiques dels arbres B d’Oracle
• Si hi ha múltiples files amb els mateixos valors de claus, aquests s’han de repetir a l’arbre
• No hi ha entrada a l’índex si per a una fila, tots els valors de les columnes clau són NULL
• S’utilitza Rowid restringit, ja que totes les files pertanyen al mateix segment
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 35
Algunes característiques dels arbres B d’Oracle
• Les operacions d’insert, resulten també en la inserció d’una entrada a l’índex
• Les operacions de delete d’una fila, produeix només un esborrat lògic de l’entrada de l’índex:– l’espai no està disponible fins que no s’hagin
esborrat totes les entrades del bloc
• Els update de columnes de clau, es corresponen a un esborrat lògic i una inserció a l’índex
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 36
Creació d’ún índex amb arbre B (un exemple)
CREATE INDEX emp_lname_idx
ON employees(last_name)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 37
Consells per crear índexs
• Els índex acceleren consultes però enlenteixen operacions DML (A/B/M) (veure seg. transp.)
• Situar l’índex en un tablespace diferent al de la taula (també diferent del rollback i temporary segment)
• Utilitzar tamanys d’extent uniformes, típicament múltiples de 5 blocs
• L’ús de NOLOGGING per grans índexs pot millorar l’eficiència
• Les files d’un índex són més petites que les d’una taula. Això fa que hi hagi moltes més files per bloc que en una taula. Per això, INITRANS és típicament més gran que en una taula
• Especificar un alt PCTFREE si és probable que hi hagi insercions de valors entre dues claus (això no passa si les claus son correlatives)
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 38
Nombre d’índexs per taula
• A table can have any number of indexes. However, the more indexes there are, the more overhead is incurred as the table is modified. Specifically, when rows are inserted or deleted, all indexes on the table must be updated as well. Also, when a column is updated, all indexes that contain the column must be updated.
• Thus, there is a trade-off between the speed of retrieving data from a table and the speed of updating the table. For example, if a table is primarily read-only, having more indexes can be useful; but if a table is heavily updated, having fewer indexes may be preferable.
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 39
Índex revers
• Per evitar que amb claus correlatives tots els valors s’insereixen al mateix lloc de l’arbre
• Especialment útil en entorns paral·lelitzats
KEY ROWID
EMPNO (BLOCK# ROW# FILE#)----- -------------------1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.00018967 0000000F.0005.00019637 0000000F.0001.00019947 0000000F.0000.0001... ...... ...
Index on EMP (EMPNO)Index on EMP (EMPNO) EMP tableEMP table
EMPNO ENAME JOB ...----- ----- --------7499 ALLEN SALESMAN7369 SMITH CLERK7521 WARD SALESMAN ...7566 JONES MANAGER7654 MARTIN SALESMAN7698 BLAKE MANAGER7782 CLARK MANAGER... ... ... ...... ... ... ...
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 40
Creació d’un índex revers (un exemple)
CREATE UNIQUE INDEX ord_ord_no_idx
ON ord(ord_no) REVERSE
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 41
Índex Bitmap
• Útil quan:– Taules llargues on la columna clau té baixa
cardinalitat (pocs possibles valors)– Quan les consultes utilitzen l’operador OR
<Blue, 10.0.3, 12.8.3, 1000100100010010100>
<Green, 10.0.3, 12.8.3, 0001010000100100000>
<Red, 10.0.3, 12.8.3, 0100000011000001001>
<Yellow, 10.0.3, 12.8.3, 0010001000001000010>
keykeystartstartROWIDROWID
endendROWIDROWID bitmapbitmap
Table
Index
Block 10
Block 11
Block 12
File 3
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 42
Comparació entre arbres B i índex bitmap
B-tree
Suitable for high-cardinality
columns
Updates on keys relatively
inexpensive
Inefficient for queries
using OR predicates
Bitmap
Suitable for low-cardinality
columns
Updates to key columns very
expensive (pel nivell de bloquejos)
Efficient for queries
using OR predicates
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 43
Creació d’un índex bitmap (un exemple)
CREATE BITMAP INDEX ord_region_id_idx
ON ord(region_id)
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0 MAXEXTENTS 50)
TABLESPACE indx01;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 44
Modificar els paràmetres d’emmagatzematge
• Exemple:ALTER INDEX emp_lname_idx
STORAGE(NEXT 400K MAXEXTENTS 100);
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 45
Reconstruir un índex
ALTER INDEX ord_region_id_idx
REBUILD
TABLESPACE indx02;
ALTER INDEX ord_region_id_idx
REBUILD
TABLESPACE indx02;
Use this command to:–Move an index to a different tablespace–Improve space utilization by removing
deleted entries–Change a reverse key index to a normal B-
tree index and vice versa
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 46
Validant un índex
ANALYZE INDEX ord_region_id_idx
VALIDATE STRUCTURE;
ANALYZE INDEX ord_region_id_idx
VALIDATE STRUCTURE;
INDEX_STATSSELECT blocks, pctused, distinct_keys, lf_rows, del_lf_rows
FROM index_stats;
Reorganitzar l’índex si el rati del_lf_rows a lf_rows passa del 30%
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 47
Clusters i taules organitzades per índex
• La disposició de les dades als blocs no és aleatòria
• Clusters: organitzats per una clau (o conjunt de claus)
• Taules organitzades per índex: els valors estan als nodes fulla de l’arbre B de l’índex
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 48
Distribució de files a les taules
ClusterCluster Index-organizedIndex-organizedtabletable
TableTable
RandomRandom
Ordering of RowsOrdering of Rows
GroupedGrouped OrderedOrdered
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 49
Cluster
Clustered ORD and Clustered ORD and ITEM tablesITEM tables (VENDA i (VENDA i LINIA_VENDA)LINIA_VENDA)
Cluster Key(ORD_NO) 101 ORD_DT CUST_CD 05-JAN-97 R01
PROD QTYA4102 20A5675 19 W0824 10
102 ORD_DT CUST_CD 07-JAN-97 N45
PROD QTYA2091 11G7830 20 N9587 26
Unclustered ORD and Unclustered ORD and ITEM tablesITEM tables (VENDA i (VENDA i LINIA_VENDA)LINIA_VENDA)
ORD_NO PROD QTY ...----- ------ ------
101 A4102 20102 A2091 11102 G7830 20
102 N9587 26101 A5675 19101 W0824 10
ORD_NO ORD_DT CUST_CD------ ------ ------
101 05-JAN-97 R01102 07-JAN-97 N45
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 50
Dos tipus de clusters
Index clusterIndex cluster Hash clusterHash cluster
Hash functionHash function
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 51
Creant un cluster. Un exemplecreate cluster clu(as_id number(3))tablespace tt;
create index ind_clu on cluster clutablespace ti;
create table assignatura(as_id number(3),...constraint pk_assignatura primary key (as_id) using index tablespace ti
) cluster clu(as_id);
create table matricula(
ma_num number(6),ma_al_id number(4) not null,ma_as_id number(3) not null,constraint pk_matricula primary key (ma_num)
) cluster clu(ma_as_id);
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 52
Creant un cluster amb Hash. Un exemple
CREATE CLUSTER hashclu
(as_id number(3))
HASHKEYS 10
TABLESPACE tt;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 53
Exemple d’overflow en un cluster amb hash
Preallocated blocksPreallocated blocks
Key 2Key 1
Key 12Key 11
Key 3
Overflow blockOverflow block
Key 22
Key 21
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 54
Quan és útil un cluster
Criterion
Uniform key distribution
Evenly spread key values
Rarely updated key
Often joined master-detail tables
Predictable number of key values
Queries using equality predicate on key
HashIndex
Y Y
Y
Y
Y
Y
Y
Y
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 55
Conseqüències de l’ús de clusters
• Recórrer totes les files d’una sola de les taules és més lent
• Les insercions són més lentes
• La millora en els joins no és massa gran
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 56
Taula organitzada per índex
Indexed access Indexed access on tableon table
ROWIDROWID
Accessing index-Accessing index-organized tableorganized table
Non-key columnsNon-key columns
Key columnKey column
Row headerRow header
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 57
Comparació amb taules “normals”
Index-Organized Table
Identified by primary key
No ROWID
No secondary indexes
Full index scans return
rows in PK order
No support for
unique constraints
Distribution, replication, and
partitioning not supported
Regular Table
Unique identifier—ROWID
ROWID implicit
Supports several indexes
FTS returns rows in no specific
order
Unique constraints allowed
Distribution, replication, and
partitioning supported
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 58
Creació d’una taula organitzada per índex. Un exemple
CREATE TABLE sales
(
office_cd NUMBER(3),
qtr_end DATE,
revenue NUMBER(10,2),
review VARCHAR2(1000),
CONSTRAINT sales_pk
PRIMARY KEY(office_code, qtr_end)
)
ORGANIZATION INDEX TABLESPACE data01
PCTTHRESHOLD 20
OVERFLOW TABLESPACE data02;
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 59
Row overflow en una taula organitzada per índex
• També es pot especificar que una sèrie de columnes vagin sempre directament a l’espai d’overflow
Segment = PK NameType = Index
Segment = SYS_IOT_OVER_nType=Table
Row bigger thanRow bigger thanPCTTHRESHOLDPCTTHRESHOLDBlockBlock
Rows within PCTTHRESHOLDRows within PCTTHRESHOLD
IOT tablespace Overflow tablespace
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 60
Conseqüències de l’ús de taules organitzades per índex
• Les operacions d’ordenació de la taula són molt més ràpids (si es fan a partir de la clau d’indexació)
• Recórrer l’índex d’una taula organitzada per índex és més lent que recórrer un índex “normal” (perquè ha de llegir més blocs)
• No poden haver índexs secundaris
En
gin
yeri
a d
el S
W II
: Asp
ect
es d
’adm
inis
tra
ció
d’O
racl
ePàgina 61
Bibliografia
• Oracle8 Database Administration. Oracle Education
• La biblia de Oracle8. Anaya Multimedia
• Guy Harrison: Oracle SQL, High-Performance Tunning
• Mark Gurry: Oracle SQL Tuning Pocket Reference. O’Reilly