IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Questions sur un article de Greg Rahn


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut Questions sur un article de Greg Rahn
    Bonsoir,
    je viens de parcourir la traduction d'un article de ce monsieur sur le site de Pachot concernant les traitements batch pour les mises à jour de données en masse... J'ai envoyé quelques questions à l'auteur restées sans réponses (pour l'instant) aussi je voulais vous les soumettre :
    L'article affirme :
    Les update (et delete) de masse sont à proscrire
    La question que je me pose est donc comment faire sans.

    Les techniques utilisées par l'auteur (d'après son blog) :

    Instead of bulk UPDATES/DELETES, use set theory to create the compliment via CTAS (or similar). That is, for DELETE recreate what you want to keep, for UPDATE, recreate with the modifications.

    There are a few reasons for this:
    1) Compression – UPDATES/DELETES are more expensive with compression and they generally leave the data in a much less compressed format
    2) Logging – Both UPDATE and DELETE are logging operations and a NOLOGGING CTAS or INSERT /*+ APPEND */ are not.

    As a result, it is often faster and better (from a compression point of view) to recreate the segment.
    Savez vous comment mettre en oeuvre ces techniques ?
    Mais si on a une base opérationnelle de production avec potentiellement un utilisateur loggué
    peut-on se permettre ce genre de manoeuvre...
    Ou trouver un exemple de ces utilisations pour mises à jour en masse ?
    " j’ai codé complètement un flux de donnée qui travaille de manière ensembliste, avec juste une poignée de requêtes SQL (et pas de PL/SQL). "
    J'imagine qu'il se retrouve avec un seul upsert au final, mais comment traite-t-il ses erreurs potentielles ?
    Comment récupère-til les lignes en erreur ?

    Merci pour votre avis sur la question,
    Lek.

  2. #2
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Le mieux est de mettre un commentaire dans le blog

    J'essaierai de détailler plus tard, mais les idées sont:

    Au lieu d'un delete ou d'un update -> créer une nouvelle table avec seulement les données voulues (CREATE TABLE AS SELECT)

    Au lieu d'inserts ligne à ligne -> inserts en bulk (INSERT /*+ APPEND */)

    Pour la gestion d'erreur: soit faire un select avant pour vérifier les données, soit utiliser DML error logging ( INSERT ... LOG ERRORS INTO )

    Mais si on a une base opérationnelle de production avec potentiellement un utilisateur loggué
    Non. Personne ne doit lire dans la base cible pendant qu'on charge avec ces techniques.

    Cordialement,
    Franck.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par pachot Voir le message
    ...
    Pour la gestion d'erreur: soit faire un select avant pour vérifier les données, soit utiliser DML error logging ( INSERT ... LOG ERRORS INTO )
    ...
    Vous devez être très à la bourre ce matin pour dire ça.

  4. #4
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    @mnitu
    Pas compris la dernière remarque.

    Pour préciser: le contexte est le chargement massif batch/datawarehouse.
    Il vaut parfois mieux lire les données une première fois en bulk pour les valider, et/ou pour mettre à jour les dimensions avant de charger les faits, plutôt que de faire du traitement ligne à ligne avec rejets, rollbacks, etc.
    Cordialement,
    Franck.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par LEK Voir le message
    Mais si on a une base opérationnelle de production avec potentiellement un utilisateur loggué
    Citation Envoyé par pachot Voir le message
    Non. Personne ne doit lire dans la base cible pendant qu'on charge avec ces techniques.
    Ou utiliser le package DBMS_REDEFINITION

  6. #6
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut
    Bonsoir, et désolé pour ce retour tardif.
    En tous cas merci pour vos retours nombreux.

    @pachot :
    Le mieux est de mettre un commentaire dans le blog
    Je n'hésiterais pas à l'occasion ;-)

    Personne ne doit lire dans la base cible pendant qu'on charge avec ces techniques.
    Vu que l'on crée une seconde table en parallèle de la première et qu'au dernier moment on lui ajoute les contraintes et qu'on la renomme : qu'est ce que l'on risque vraiment si ce n'est la possibilité de perdre des données qui auraient pû être insérées/modifiées pendant notre opération... En fait si je me pose ces questions c'est que personnellement j'ai une base opérationnelle standard qui doit permettre des imports relativement massif (en journée) mais sans pour autant s'arrêter de fonctionner (au moins en lecture car comme dans la plupart des cas ma base et plus utilisée en lecture qu'en écriture)... Il doit bien y avoir de tels systèmes en production de part le monde : ont-ils tous des systèmes plus ou moins complexes de redondance/conciliaton de données ou que sais-je ? et ne pourrais-je pas vraiment avec ces techniques alimenter ma base "à chaud" ?

    @mnitu : je n'ai pas compris non plus : le select serait-il à éviter dans ce cas?

    @ojo77, @skuatamad :
    mille merci pour ces liens : je me plonge dans la lecture de suite ;-) et reviens vers vous en cas de questions.

    Merci encore,
    Lek.

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Lire les données avant le chargement pour les valider implique soit un niveau d'isolation serializable, soit une garantie que les données ne bougent pas pendant la transaction. Si le traitement batch s'exécute dans une fenêtre de non utilisation de l'application autrement dit mono-utilisateur ça devrait ne pas poser des problèmes.

  8. #8
    LEK
    LEK est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Par défaut
    Merci je comprends mieux la remarque.
    Donc si je te suis bien tu renforce l'idée qu'on ne peut en aucun cas utiliser ce type de traitements dans un environnement multi-utilisateurs même si les transactions de mises à jours de ces mêmes utilisateurs sont plus que rare ? (je sais que ce n'est pas en insistant qu'on me dira oui mai j'essayes de trouver une solution ..)

  9. #9
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Citation Envoyé par LEK Voir le message
    Savez vous comment mettre en oeuvre ces techniques ?
    Mais si on a une base opérationnelle de production avec potentiellement un utilisateur loggué
    peut-on se permettre ce genre de manoeuvre...
    Ou trouver un exemple de ces utilisations pour mises à jour en masse ?
    Quelques exemples dans cet article : http://blog.easyteam.fr/2011/11/22/p...ng-sql-update/

Discussions similaires

  1. Question sur le processus de validation d'un article.
    Par Christophe dans le forum Contribuez
    Réponses: 1
    Dernier message: 23/04/2014, 22h26
  2. [WS 2008 R2] Question sur l'article de la PKI a 2 niveau
    Par LiTiL_DiViL dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 29/01/2012, 11h05
  3. Réponses: 0
    Dernier message: 29/07/2011, 15h15
  4. Réponses: 2
    Dernier message: 06/10/2008, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo