Vendredi 8 juin 2012
5
08
/06
/Juin
/2012 15:19
Estimer la taille d'un index avec CREATE_INDEX_COST.
Comment estimer la taille d'un index avant sa création dans Oracle.
Simulation réelle de l'estimation de taille d'un index avant sa création.
Pour connaitre la taille que pourrait occuper un index avant sa création, Oracle propose le package DBMS_SPACE avec la procédure
CREATE_INDEX_COST.
Ce script nous donnera la taille estimée de l'index et la taille du segment alloué.
L'utilisation de la procédure DBMS_SPACE.CREATE_INDEX_COST permet au DBA d'anticiper les modifications de paramètres de stockage avant de créer ses index dans la
base de données.
Celà permet aussi de comparer la taille d'un index en place et de simuler sa nouvelle taille si on envisage un rebuild index.
|
|
SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
v_estimation NUMBER;
v_alloue NUMBER;
v_sql VARCHAR2(255) :='CREATE INDEX idx_1 ON societe(soc_code,soc_nom)';
BEGIN
DBMS_SPACE.CREATE_INDEX_COST(v_sql,
used_bytes => v_estimation,
alloc_bytes => v_alloue);
DBMS_OUTPUT.PUT_LINE ('Estimation Index = '|| v_estimation);
DBMS_OUTPUT.PUT_LINE ('Segment alloue = '|| v_alloue);
END;
/
Estimation Index = 2886
Segment alloue = 65536
Procédure PL/SQL terminée avec succès.
SQL>
|
Par Oracle SQL
-
Publié dans : INDEX ORACLE
0
Jeudi 7 juin 2012
4
07
/06
/Juin
/2012 15:44
Taille réelle index dans Oracle.
Comment connaître la taille réelle des index dans Oracle.
Taille réellement utilisée d'un index avec DBMS_SPACE.
Pour voir l'espace réellement occupé par les index Oracle, on utilisera le package DBMS_SPACE avec la procédure OBJECT_SPACE_USAGE.
Calcul de la taille réelle des index dans Oracle.
Ce script nous fournira l'espace utilisé par l'index et l'espace alloué pour l'index Oracle.
|
|
SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
OBJECT_OWNER_in varchar2(30) := 'SCOTT';
OBJECT_NAME_in varchar2(30) := 'X_PHYNUM';
OBJECT_TYPE_in varchar2(30) := 'INDEX';
SAMPLE_CONTROL_in number := NULL;
SPACE_USED_out number;
SPACE_ALLOCATED_out number;
CHAIN_PCENT_out number;
BEGIN
dbms_space.object_space_usage (
OBJECT_OWNER => OBJECT_OWNER_in ,
OBJECT_NAME => OBJECT_NAME_in ,
OBJECT_TYPE => OBJECT_TYPE_in ,
SAMPLE_CONTROL => SAMPLE_CONTROL_in ,
SPACE_USED => SPACE_USED_out ,
SPACE_ALLOCATED => SPACE_ALLOCATED_out ,
CHAIN_PCENT => CHAIN_PCENT_out
);
dbms_output.put_line('Espace utilisé en Mo: ' || ROUND(SPACE_USED_out/1024/1024,2));
dbms_output.put_line('Espace alloué en Mo: ' || ROUND(SPACE_ALLOCATED_out/1024/1024,2));
END;
/
Espace utilisé en Mo: 481,77
Espace alloué en Mo: 536
Procédure PL/SQL terminée avec succès.
SQL>
|
Par création d'une procédure
|
|
SQL> CREATE OR REPLACE PROCEDURE taille_reelle_index
AS
OBJECT_OWNER_in varchar2(30) := 'SCOTT';
OBJECT_NAME_in varchar2(30) := 'X_PHYNUM';
OBJECT_TYPE_in varchar2(30) := 'INDEX';
SAMPLE_CONTROL_in number := NULL;
SPACE_USED_out number;
SPACE_ALLOCATED_out number;
CHAIN_PCENT_out number;
BEGIN
dbms_space.object_space_usage (
OBJECT_OWNER => OBJECT_OWNER_in ,
OBJECT_NAME => OBJECT_NAME_in ,
OBJECT_TYPE => OBJECT_TYPE_in ,
SAMPLE_CONTROL => SAMPLE_CONTROL_in ,
SPACE_USED => SPACE_USED_out ,
SPACE_ALLOCATED => SPACE_ALLOCATED_out ,
CHAIN_PCENT => CHAIN_PCENT_out
);
dbms_output.put_line('Espace utilisé en Mo: ' || ROUND(SPACE_USED_out/1024/1024,2));
dbms_output.put_line('Espace alloué en Mo: ' || ROUND(SPACE_ALLOCATED_out/1024/1024,2));
END;
/
Procédure créée.
SQL> SET SERVEROUTPUT ON;
SQL> EXEC taille_reelle_index;
Espace utilisé en Mo: 481,77
Espace alloué en Mo: 536
Procédure PL/SQL terminée avec succès.
SQL>
|
Par Oracle SQL
-
Publié dans : INDEX ORACLE
0