Bonjour les Experts ,
En 11g , faut-il de temps en temps réorganiser une table par un ALTER TABLE MOVE ?
Si oui quand ? symptômes ?
Quelles sont les autres méthodes de réorganisation à part le CTAS ou export / import ?
merci
Bonjour les Experts ,
En 11g , faut-il de temps en temps réorganiser une table par un ALTER TABLE MOVE ?
Si oui quand ? symptômes ?
Quelles sont les autres méthodes de réorganisation à part le CTAS ou export / import ?
merci
Si votre table possède une clef auto incrémentée ou bien une colonne d'horodatage, considérez d'utiliser un IOT.
Sinon, il faudra effectivement la réorganiser physiquement pour que les espaces perdus soient libérés.
Ceci n'est à faire que de temps à autre.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Bonjour,
un exemple de symptôme : davantage de blocs à parcourir pour faire un fts par rapport au nombre de blocs occupés.
J'utilise pour cela un package très utile (en assm) :
S'il y a beaucoup de places perdues, une réorganisation (compactage) peut s'imposer pour réduire les IO lors des FTS.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 set serveroutput on declare l_fs1_bytes number; l_fs2_bytes number; l_fs3_bytes number; l_fs4_bytes number; l_fs1_blocks number; l_fs2_blocks number; l_fs3_blocks number; l_fs4_blocks number; l_full_bytes number; l_full_blocks number; l_unformatted_bytes number; l_unformatted_blocks number; begin dbms_space.space_usage( segment_owner => 'OWNER', segment_name => 'NOM DE SEGMENT', segment_type => 'TYPE DE SEGMENT', fs1_bytes => l_fs1_bytes, fs1_blocks => l_fs1_blocks, fs2_bytes => l_fs2_bytes, fs2_blocks => l_fs2_blocks, fs3_bytes => l_fs3_bytes, fs3_blocks => l_fs3_blocks, fs4_bytes => l_fs4_bytes, fs4_blocks => l_fs4_blocks, full_bytes => l_full_bytes, full_blocks => l_full_blocks, unformatted_blocks => l_unformatted_blocks, unformatted_bytes => l_unformatted_bytes ); dbms_output.put_line(' vide = '||l_unformatted_blocks||' Bytes = '||l_unformatted_bytes); dbms_output.put_line(' 0-25% Blocks = '||l_fs1_blocks||' Bytes = '||l_fs1_bytes); dbms_output.put_line(' 25-50% Blocks = '||l_fs2_blocks||' Bytes = '||l_fs2_bytes); dbms_output.put_line(' 50-75% Blocks = '||l_fs3_blocks||' Bytes = '||l_fs3_bytes); dbms_output.put_line(' 75-100% Blocks = '||l_fs4_blocks||' Bytes = '||l_fs4_bytes); dbms_output.put_line('Full Blocks = '||l_full_blocks||' Bytes = '||l_full_bytes); end; /
Ma méthode de prédilection : alter table shrink space cascade (en ayant fait au préalable un alter table enable row movement).
Mais ça nécessite notamment de ne pas avoir (en 11gr1) :
- de long
- de fbi
- de compression
Bonjour à tous,
La question à se poser c'est pourquoi réorganiser votre table?
Réorganiser pour réorganiser à quoi bon?
Attentions à ces mythes qui gangrainent les DBAs.
L'espace libéré dans les blocs par des deletes ne sont pas perdus dans Oracle.
Oracle sait parfaitement réutiliser l'espace libre lors des prochains inserts.
La question de réorganisation peut se poser dans les cas suivants:
- vous avez effectué un delete massif sur une table (mais pas d'insert massif derrière) => un shrink peut alors s'avérer utilie pr défragmenter la table et faire redescendre le high water mark
- vous effectuez des deletes mais vos insert se font en mode APPEND (écriture après le HWM) et du coup l'espace libéré n'est jamais réutilisé
Mon blog Oracle: http://ahmedaangour.blogspot.com/
Bonjour ,
Je n'ai pas la console d'admin , je pourrais peut-être utiliser le script suivant (SEGMENT ADVISOR) pour surveiller la défragmentation d'une table ?
Après je consulterai les vues DBA_ADVISOR_xxx ?
Votre avis ?
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 variable id number; begin declare name varchar2(100); descr varchar2(500); obj_id number; begin name:='Manual_Employees'; descr:='Segment Advisor Example'; dbms_advisor.create_task ( advisor_name => 'Segment Advisor', task_id => :id, task_name => name, task_desc => descr); dbms_advisor.create_object ( task_name => name, object_type => 'TABLE', attr1 => 'HR', attr2 => 'EMPLOYEES', attr3 => NULL, attr4 => NULL, attr5 => NULL, object_id => obj_id); dbms_advisor.set_task_parameter( task_name => name, parameter => 'recommend_all', value => 'TRUE'); dbms_advisor.execute_task(name); end; end; /
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager