demande du texte de la commande d'insertion
Citation:
Envoyé par
tortuegenie
Bonjour, ma base de donnée Sql server 2008 vient de passer de 20Mo á 780Mo, car j'ai du faire beaucoup d'insertion pour mon projet.
Seulement depuis que la taille de ma bdD a augmenté, j'ai des erreurs de timeout.
Comment puis-je faire en sorte de ne plus avoir ces erreurs de timeout ?
Merci d'avance
Bonjour,
D'habitude, ce genre de problème se produit lors des insertions car le créateur de la base de données a oublié de mettre une augmentation de taille du fichier data (.mdf) avec une valeur suffisante pour que l'augmentation de la taille se fasse peu de fois. Cette opération est très couteuse en ressources système et est loin d'etre instantanée ( il faut que Windows trouve de la place libre de taille suffisante, la rattache à la base et initialise le contenu... ). Une des 1ères régles que j'ai apprise est de configurer la taille et l'augmentation de cette taille de la base de telle sorte qu'aucune augmentation de taille se fasse de jour , avec la nuit après la sauvegarde, une augmentation automatique de cette taille ( voir à prévoir une base de données qui pourrait stocker les tailles de vos bases et des valeurs raisonnables d'augmentation de la base ).
La solution d'augmenter le timeout de la commande ( par défaut 30 secondes ) peut sembler judicieuse.Par contre, il faudrait peut-être regarder aussi si le(s) disques n'est ( ne sont ) pas trop fragmentés car , si je me souviens , il faudrait que l'extension de taille de la base lors d'une augmentation , soit d'un seul tenant.
Pour mikedavem, mettre à jour les statistiques , je ne suis pas sûr que ce soit une solution intéressante , par contre la maintenance des index oui et voir s'il est possible de mettre les index sur un autre disque physique, pourquoi pas ?
Je serai curieux de savoir en combien de temps la taille est passée de 20 Mo à 780 Mo et si cette augmentation risque d'être répétitive (chaque jour ) et se reproduira souvent ( cette augmentation brutale peut simplement être due à un chargement initial ou ponctuel de la base , si c'est sur une très courte période et à prévoir souvent, il faudrait revoirà la hausse la valeur de l'augmentation de taille )
C'est un sujet très vaste, mais j'ai déjà vu ce genre de problème sur une base où tous champs de type chaine étaient définis en nchar(3000) alors que dans 98% des enregistrements, ils n'étaient remplis qu'à 5%
Bonne soirée
PS : s'il y a augmentation de la taille, le temps nécessaire pour cette augmentation est compté dans le timeout. De plus, le timeout se déclenche si la transaction n'est pas terminée dans le temps imparti. Il faudrait connaître le texte de votre Insert pour savoir si par hasard, vous n'auriez pas en fait non pas une insertion dans une table mais plusieurs insertions dans plusieurs tables ou plus vicieux à trouver une multitude d'index ( ou de clés étrangères ) dont les statistiques sont mis à jour à chaque insertion