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 :

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
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  /*+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 !