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

MS SQL Server Discussion :

Question sur les performance d'une transaction SQL


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 20
    Points
    20
    Par défaut Question sur les performance d'une transaction SQL
    Tout d'abord je m'excuse si je post sur le mauvais forum, car je ne veux pas parler du language SQL mais de SQL Server, à la limite entre la programmation et l'administration.

    Je dois faire une application qui met a jour une base de donnée SQL de 2 Go,
    mon premier réflexe a été de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TRANSACTION BEGIN maTransaction
    executer les script de maj
    COMMIT TRANSACTION maTransaction
    ou un ROLLBACK TRANSACTION maTransaction
    Cependant on me dit qu'il est dangereux de faire ca car ca ferait exploser la base question ressource, et qu'il faudrai mieu faire un BACKUP avant et un RESTORE si s'a s'est mal passé.

    Je doute vraiment de cet affirmation qu'en pensez vous ?

    je ne peux pas tester ca actuellement, mais a mon sens une transaction est optimisé pour des opérations de ce genre la non ???

    (je precise que durant la mise a jour, il n'y a aucun utilisateur de la base)

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Une transaction doit être la plus courte possible.

    Pour plus d'info : A quoi servent les transaction ?

    http://sqlpro.developpez.com/cours/sqlaz/techniques/

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par ylarvor Voir le message
    Une transaction doit être la plus courte possible.

    Pour plus d'info : A quoi servent les transaction ?

    http://sqlpro.developpez.com/cours/sqlaz/techniques/
    Ce n'est pas pour autant qu'il ne faut pas en faire quand on a un gros lot d'opération qui doit être atomique

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 20
    Points
    20
    Par défaut
    La transaction permet de définir l'atomicité du traitement considéré.
    Un traitement atomique est un traitement qui est considéré comme fonctionnant en tout ou rien : soit toutes les opérations relatives aux traitements sont exécutées, soit elles sont toutes annulées et les données reviennent dans l'état antérieur qui précédait juste la transaction.
    C'est justement mon cas, je veux que ces scripts soit executé en tout ou rien.

    Une transaction doit être la plus courte possible.
    Je suppose que l'on dit ca pour pas nuire au performance du serveur vis a vis des autres clients.
    Je precise que lorsque mes scripts sont exécuté aucun client n'utilise la base de donnée.

    Apparemment l'execution de ces scripts doivent prendre plusieurs minutes... (de 2 a 30 minute suivant la taille de la base)

    J'ai pu testé que sur une petite base de 34 Mo, ca a pris 2 minute, et aucun probleme sur la transaction.
    Maintenant mon programme tournera "en vrai" avec des bases de 2 Go.

    La personne qui me dit d'utiliser les BACKUP/RESTORE plutot que TRANSACTION/ROLLBACK a peur que d'une facon ou d'une autre il y ai tellement de traitement sur la base de donnée que l'execution de ces scripts soit incroyablement long (a cause de la transaction), et que la transactions prennent incroyablement de ressource sur le disque dur, ou dans la base de donnée.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    C'est justement mon cas, je veux que ces scripts soit executé en tout ou rien.
    pourquoi ?

    J'ai pu testé que sur une petite base de 34 Mo, ca a pris 2 minute, et aucun probleme sur la transaction.
    Maintenant mon programme tournera "en vrai" avec des bases de 2 Go.
    vous n'avez plus qu'a creer une base de test de 2 giga. vous testez!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Points : 20
    Points
    20
    Par défaut
    Lors de la mise à jour la base est dans un état non cohérent (ce qui arrivera si un seul script de mise a jour échoue), je ne peux pas me permettre de mettre en péril la base de donnée des clients.

    C'est pour cela que la mise a jour est en soit une opération atomique.
    Si elle foire il faut que les clients puissent continué à utiliser le logiciel comme il était avant, d'ou l'utilité de la transaction.

    vous n'avez plus qu'a creer une base de test de 2 giga. vous testez!
    avec des centaines et des centaines de table, je ne peux pas remplir la base de donnée à la main.
    Je vais peut être essayé de voir si le client qui possède la base de 2 giga peut m'en donné une copie si personne n'a de réponse.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 915
    Points : 51 691
    Points
    51 691
    Billets dans le blog
    6
    Par défaut
    Votre demande est parfaitement justifiée. N'ayez crainte la transaction se passera bien à une seule condition :
    QUE VOTRE JOURNAL DE TRANSACTION SOIT BIEN DIMENSIONNÉ.

    Par exemple pour ce script il se peut que la transaction fasse quelque 300 Mo de données. Si votre fichier de journal n'a pas été proprement dimensionné ou si votre disque arrive a saturation parce que vous n'avez pas bien dimensionné votre JT et fait de la croissance automatique (ce qui est une abbération), alors vous aurez les pires ennuis.

    Enfin pensez qu'une transaction ce n'est pas automatique. En d'autre terme ce n'est pas parce que un seul ordre plante que la transaction est annulée. C'est à vous de tester chaque ordre SQL et de décider s'il faut faire un ROLLBACK.

    A +

    A +

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

Discussions similaires

  1. question sur les boutons d'une MsgBox
    Par 4rn0_o dans le forum IHM
    Réponses: 2
    Dernier message: 31/08/2007, 14h09
  2. Question sur les Regex. interdire une chaine
    Par cysboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/05/2007, 13h49
  3. Droits sur les vues d'une base SQL server 2000
    Par mioux dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2007, 16h13
  4. Réponses: 9
    Dernier message: 27/12/2006, 13h26
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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