Bonsoir,
J'ai donc une table de plus de 336 millions de lignes, et lors de certains batchs, il se peut que j'ai besoin de supprimer environ 4 millions de ces lignes.
La table est remplie de 4 millions de lignes une à deux fois par semaine.
Cette table à des partitions par années, et chaque partitions a des sous partitions par mois. Idem pour l'index (partitioné lui aussi) sur le champ date.
J'ai utilisé DBMS_STATS pour faire les stats sur la table, les partitions, les sous partitions, l'index, tout est à jour !
Voici le premier delete et son plan :
et le deuxième :
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 DELETE FROM S1_STOCKS_MAGASIN S1SM WHERE DATESTOCK = '26/04/2008'; DELETE STATEMENT ALL_ROWS Cost: 2,496 Bytes: 105,214,186 Cardinality: 4,782,463 5 DELETE REPORTING.S1_STOCKS_MAGASIN 4 PX COORDINATOR 3 PX SEND QC (RANDOM) PARALLEL_TO_SERIAL SYS.:TQ10000 :Q1000 Cost: 2,496 Bytes: 105,214,186 Cardinality: 4,782,463 2 PX BLOCK ITERATOR PARALLEL_COMBINED_WITH_CHILD :Q1000 Cost: 2,496 Bytes: 105,214,186 Cardinality: 4,782,463 Partition #: 4 Partitions accessed #4 1 TABLE ACCESS FULL TABLE PARALLEL_COMBINED_WITH_PARENT REPORTING.S1_STOCKS_MAGASIN :Q1000 Cost: 2,496 Bytes: 105,214,186 Cardinality: 4,782,463 Partition #: 5 Partitions accessed #22
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 DELETE /*+INDEX (S1SM X_S1SM_DATESTOCK)*/ FROM S1_STOCKS_MAGASIN S1SM WHERE DATESTOCK = '26/04/2008'; Plan DELETE STATEMENT ALL_ROWS Cost: 6,951 Bytes: 105,214,186 Cardinality: 4,782,463 4 DELETE REPORTING.S1_STOCKS_MAGASIN 3 PARTITION RANGE SINGLE Cost: 6,951 Bytes: 105,214,186 Cardinality: 4,782,463 Partition #: 2 Partitions accessed #3 2 PARTITION RANGE SINGLE Cost: 6,951 Bytes: 105,214,186 Cardinality: 4,782,463 Partition #: 3 Partitions accessed #4 1 INDEX RANGE SCAN INDEX REPORTING.X_S1SM_DATESTOCK Cost: 6,951 Bytes: 105,214,186 Cardinality: 4,782,463 Partition #: 4 Partitions accessed #22
Est-ce que le plus simple est de recréer une table temporaire avec les données à garder, faire un truncate de la table source, et réinsérer le tout ? Ou ai-je mal pensé ma table et son partitionnement ?
Merci d'avance !
Partager