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

Administration SQL Server Discussion :

ALTER TABLE DISABLE/ENABLE TRIGGER ALL et Plan Cache ! [2014]


Sujet :

Administration SQL Server

  1. #1
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut ALTER TABLE DISABLE/ENABLE TRIGGER ALL et Plan Cache !
    * Bonjour, *

    J'avais un doute sur l'impact des instructions telles que "ALTER TABLE .... DISABLE TRIGGER ALL" ou "ALTER TABLE ... ENABLE TRIGGER ALL" sur le Plan Cache des Query et procédures.

    Je croyais que seules les "vraies" modifications de structures (exemple ajout ou modification du type d'une colonnes, etc) avaient pour effet d'invalider le Plan Cache liés aux objets (tables etc..) dont la structure a été modifiée, mais pas la simple activation ou désactivation des triggers, même si la syntaxe utilise le mot clé ALTER.

    Et bien j'avais tort ! En effet, pour en avoir le cœur net, j'ai analysé les événements CacheMiss, CacheInsert, CacheRemove etc, et je me suis aperçu avec un peu d'étonnement que les instructions telles que ALTER TABLE DISABLE/ENABLE TRIGGER ALL, invalident bien les Plan Cache !

    Alors ma question est la suivante :
    "Pourquoi les instructions comme ALTER TABLE ... DISABLE/ENABLE TRIGGER ALL" appliquées à une table ont pour effet d'invalider le Plan Cache des query et procédures afférentes à la dite table ?"

    Remarque :
    - L'utilisation des instructions telles que ALTER TABLE .... DISABLE/ENABLE TRIGGER ALL est assez courante dans certaines tâches planifiées ou autres traitements particuliers divers ! C'est une des rasions pour lesquelles j'ai voulu investiguer le sujet.

    Si quelqu'un veut bien nous éclairer.

    Merci,

    A+

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    De ce que je viens d'expérimenter :

    • Le plan du trigger est évincé du cache dès qu'on désactive le trigger
    • Il est compilé lors de l'exécution d'une instruction correspondant à l'événement de déclenchement du trigger, après avoir été (ré-)activé


    Votre question devient-elle donc la suivante ?
    pourquoi le plan du trigger est évincé du cache de plans lorsqu'on désactive l'exécution du trigger sur la table ?

    Intuitivement je dirai que comme il est désactivé, le moteur l'évince automatiquement car son code, la structure de la table, et le volume de données peut avoir changé lors de sa réactivation.
    C'est donc pour forcer une nouvelle compilation, donc une nouvelle optimisation en adéquation avec ces changements.

    @++

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Bonjour elsuket, et merci pour vos réponses.

    Citation Envoyé par elsuket Voir le message
    De ce que je viens d'expérimenter :
    • Le plan du trigger est évincé du cache dès qu'on désactive le trigger
    • Il est compilé lors de l'exécution d'une instruction correspondant à l'événement de déclenchement du trigger, après avoir été (ré-)activé
    Oui, ce comportement ne m'aurait pas choqué, et je le trouve même normal puisque le trigger a été désactivé et qu'il n'y a pas de raison de le garder dans le Plan Cache.
    Mais, ce n'est pas de cela dont je parle ! Je parle du plan d'exécution d'une simple requête SELECT. Par exemple :
    SELECT * FROM dbo.Client WHERE IdClient = @IdClient

    Après l'exécution de l' instruction ALTER ci-desous :
    ALTER TABLE dbo.Client DISABLE TRIGGER ALL

    Le plan préalablement compilé et stocké dans le Plan Cache de la requête SELECT * FROM dbo.Client WHERE IdClient = @IdClient est invalidé. Et donc à la prochaine exécution de la même requête SELECT ci-dessus, il y a une suppression du plan (CacheRemove) et une nouvelle compilation du Plan et c'est cela qui me gêne.

    Citation Envoyé par elsuket Voir le message
    Votre question devient-elle donc la suivante ?
    pourquoi le plan du trigger est évincé du cache de plans lorsqu'on désactive l'exécution du trigger sur la table ?
    Non ! Ce n'est pas la question qui me préoccupe. Je trouve au contraire normal que le plan du trigger soit évincé du cache après sa désactivation.

    Citation Envoyé par elsuket Voir le message
    Intuitivement je dirai que comme il est désactivé, le moteur l'évince automatiquement car son code, la structure de la table, et le volume de données peut avoir changé lors de sa réactivation.
    C'est donc pour forcer une nouvelle compilation, donc une nouvelle optimisation en adéquation avec ces changements.
    Je suis entièrement d'accord avec vous, mais ce n'est pas là le problème. Voir réponse ci-dessus.

    Merci.

    A+

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Il faut se rendre à l'évidence que les instructions telles que
    ALTER TABLE ... DISABLE/ENABLE TRIGGER ALL
    ont pour effet d'invalider les plans d'exécution compilés, et donc de ce fait, elles ne doivent en aucun cas, faire partie des traitements applicatifs routiniers, susceptibles d'être exécutés plusieurs fois par jour.
    Ces instructions doivent, à mon sens, être réservées à des traitements très particuliers, exceptionnels, par exemple lors du chargement initial des données, ou lors de mises à jour importantes de la base données.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger Ensembliste de Alter table pour historisation.
    Par obarator dans le forum Développement
    Réponses: 8
    Dernier message: 28/10/2011, 11h35
  2. ALTER TABLE & SEQUENCE & TRIGGER
    Par mortimer.pw dans le forum Administration
    Réponses: 3
    Dernier message: 01/12/2009, 14h35
  3. procedure et disable enable trigger
    Par mariec007 dans le forum PL/SQL
    Réponses: 0
    Dernier message: 13/11/2008, 16h40
  4. Utiliser un alter table dans un trigger
    Par randriano dans le forum PL/SQL
    Réponses: 11
    Dernier message: 31/10/2008, 09h47
  5. Alter table qui ne passe...
    Par Gential dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/06/2003, 17h48

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