|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Bonjour à tous,
Je reprends une vieille discussion de l'année dernière, mais toujours d'actualité. Je souhaiterai faire une suppression de masse > 1'000'000. Plusieurs choix se proposent : 1. Découper en multiples requêtes "delete" (lourd) 2. Faire un Create AS + truncate après avoir fait une copie des données à conserver (lourd) 3. Faire une partition et dropper cette partition (la question est : peut-on faire une partition à une table qui n'est pas déjà partitionnée ?) 4. Désactiver l'utilisation des rollbacks segments 5. autre chose ? En fait je suis sur la 3ème mais je ne sais pas comment partitionner ma table, avez-vous une idée ? A savoir que c'est un traitement batch Java et que je peux attaquer n'importe quelle table de mon schéma de base de données. Merci de votre collaboration. Boutss |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
1. Pourquoi pas...
2. quelle est la proportion à garder / à jeter ? 3. Non, pas possible, sauf à manipuler toutes les données pour les partitionner puis ensuite truncater la partition. Pas mieux que le 2 donc si la table n'est pas pré-partitionnée. 4. Non, pas possible. 5. Non pas de solution miracle Concernant le filtrage, se fera-t-il sur des colonnes indexées ? |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Merci de tes réponses.
Oui cela sera sur une colonne indexée car c'est la clé primaire. En fait les ID de la table sont stockées dans une table temporaire et je fais la liaison pour effectuer le delete. Oui car il y a 2 choses couteuses dans la suppression, les rollbacks segments et le recalcul des indexs, c'est bien ça ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Si la table est utilisée par un seul traitement, vous pouvez essayer de recréer la table avec un CREATE TABLE ... AS SELECT (CTAS) qui va sélectionner les données à garder. Ceci peut être d'autant plus rapide que vous gardez peu de lignes dans la table. L'inconvénient c'est qu'il faut ensuite recréer les contraintes sur la table, recréer les index, redonner les privilèges liés à la table et renommer la table ...
|
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Citation:
1. CTAS A --> B 2. TRUNCATE 3. INSERT SELECT B --> A mais ça peut prendre beaucoup de temps là aussi, donc ça dépend du ratio je pense... |
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
Oui ça sera le seul traitement.
C'est une bonne solution mais risquée à mon goût, car je dois être sûr que je redonne exactement les mêmes caractéristiques à la table. Si en java (via les Métadata) je peux avoir une liste exhaustive et tout recréer, si les privilèges m'en permettent, alors ok. @LeoAnderson: Oui avec le "create select as" + "truncate" + "insert" ça peut être long : Ex : table de 15M et 3M à supprimer |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Vincent Ingénieur développement logiciels Inscription : août 2002 Messages : 237 ![]() |
C'est ce qu'il disait.
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Non ce n'est pas exactement la même chose du point de vues des performances:
TRUNCATE+ INSERT INTO .. SELECT FROM n'est pas équivalent à DROP TABLE + RENAME + CREATE CONSTRAINTS + CREATE INDEXES + GRANT . Tout dépend du ratio "ce que je supprime"/"ce que je garde", des index et des contraintes. |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Citation:
là, cette situation, qui découle d'une lacune de conception n'est pas aisée à rattraper... |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com