Auteur de questions
Lenteur lors de l'accès aux données

Question
-
Bonjour à tous,
Je viens vous solliciter car l'accès aux données depuis mon serveur SQL Serveur subit de lourds ralentissement qui entraînent même parfois l'annulation de la requête.
La base de donnée à pour but de d’héberger les données de la suite cosoluce.Cela ne se produit que sur certains comptes, (ceux qui sont le plus utilisé et qui ont le plus de données), sur les autres comptes, tout est Ok
Pour diagnostiquer le probléme on a:
1 ) déconnecter la partie téléphonique dur réseau, il y a aucun changement
2 ) pris deux postes pour les isoler avec un serveur de test (donc aucune dépendance avec le réseau interne ou externe) et il n'y a pas eu de changement, par contre quand on éteins un des deux poste, il y à une nette amélioration.
3) Analyse des volumes échangés par els cartes réseau :
PC 1 : 17 Mo envoyés, 212 Mo réceptionnés durant le test de 30 min
PC 2 : 41 Mo envoyés, 131 Mo réceptionnés durant le test de 30 min
Merci d'avance.
Toutes les réponses
-
Hello
Plein de questions:
- Pouvez-vous vous connecter à votre serveur utilisant SQL Management Studio ?
- Si oui, puis-je vous donner des scripts à exécuter pour essayer de trouver ce qui ralentie votre moteur SQL ?
- Exécutez-vous des scripts d'entretien de votre base de données SQL Server ?
- Avez-vous réservé de la mémoire pour votre moteur SQL ?
- Avez-vous effectué des modifications de votre OS pour "booster" votre moteur SQL ?
- La base est-elle sur des disques locaux (du serveur) ou sur un SAN/NAS ?
- Avez-vous testé les performances de vos disques ou votre SAN/NAS ?
Merci
Florent
- Modifié Florent Duret jeudi 29 octobre 2015 16:59
-
Bonjour,
Merci de ta réponse.
- Pouvez-vous vous connecter à votre serveur utilisant SQL Management Studio ?
Non je n'ai pas l'accès au serveur directement, je suis actuellement en stage et le serveur ne peut être géré que par les prestataires (clause du contrat) mais eux même ne trouvent pas.
- Si oui, puis-je vous donner des scripts à exécuter pour essayer de trouver ce qui ralentie votre moteur SQL ?
Je vais voir ça avec les prestataire mais je pense que ça devrait le faire
- Exécutez-vous des scripts d'entretien de votre base de données SQL Server ?
Non, quels sont les script à exécuter s'il vous plait?
- Avez-vous réservé de la mémoire pour votre moteur SQL ?
Je suppose que oui
- Avez-vous effectué des modifications de votre OS pour "booster" votre moteur SQL ?
Je ne pense pas qu'ils l'aient fait.
- La base est-elle sur des disques locaux (du serveur) ou sur un SAN/NAS ?
La base est sur un disque local
- Avez-vous testé les performances de vos disques ou votre SAN/NAS ?
Je suppose que le prestataire là fait.
Merci encore de votre réponse.
-
Hello
Pourquoi j'axe mes questions sur la partie "SQL" c'est qu'il y a de "petites" choses à faire pour s'assurer que le moteur SQL soit performant, ou tout au moins ne "souffre pas de mauvaises performances".
En gros, chaque fois qu'un moteur SQL est "ralenti" (des événements Wait) le moteur SQL enregistre cette information. Cela nous permet de voir les statistiques (cumulées depuis le dernier démarrage du moteur SQL) donnant les causes de ralentissement.
Qu'est-ce qui ralentie un moteur SQL ?
- Souvent les IO disque,
SQL Server utilise beaucoup le stockage, par nature. Si celui-ci est lent, c'est toute la base qui trinque. Une latence disque élevée induire, de fait, une latence de tout le moteur SQL Server.
Comme les bases sont sur des disques locaux, il y aura surement une latence affreuse. - Des index miteux,
Là c'est compliqué la gestion des index. C'est difficile/impossible d'avoir une solution automatique qui remplace le travail d'un administrateur de base de données. Le "minimum du minimum" serait d'avoir des scripts SQL (gérés par le moteur) qui effectuent certains travaux automatiques de défragmentation des index.
Ce n'est pas le "top" mais c'est un minimum qui évite un peu la casse. - Du code pourri
Là vous ne pourrez rien faire. Si le code qui accède à la base est mal fait, les performances ne seront jamais au top.
Latences disque
Exprimé en millisecondes (ms), certaines valeurs sont inacceptables, mauvaises, nulles.
Les temps d'accès (lecture ou Ecriture) de ton disque sont mesurables depuis le moteur SQL.
En fonction du "fichier" de base de données concernées, certaines valeurs posent problème:Fichiers de données (db) :
C'est là que le moteur SQL écrit et lit, au final, toutes les données.
Une latence supérieure à 10 ms, c'est pas terrible, au delà de 50 ms c'est un très sérieux problème.Fichiers temporaires :
Là il faut absolument une excellente latence disque.
Des valeurs correctes sont celles qui avoisinent 1 ms.Performances du moteur SQL
Il y a vraiment une ou deux choses très simples que l'on peut faire qui boostent à mort les performances du moteur SQL Server.
Certains choses sont à configurer sur le serveur Windows, donc vous pourriez peut-être le faire.
D'autres sont à configurer sur le moteur SQL Server.Avant de détailler plus :
- Est-ce un serveur Windows 2008 ou 2012 ?
- Est-ce que le moteur SQL Server utilise un compte "par défaut" ou un compte du domaine Windows
Florent
- Modifié Florent Duret vendredi 30 octobre 2015 12:42
- Souvent les IO disque,
-
Bonjour,
- Souvent les IO disque : La base à été dumper et mise en place dans un serveur de test et un autre serveur de prêt. Ce qui fait un total de 3 serveurs
- Des index miteux : Je pense que c'est ça car avant moi il n'y avait pas vraiment d'administrateur réseau. De plus celà se produit que sur certains comptes, ceux qui ont des données les plus volumineux, pas sur les comptes qui ont moins de données.
-
Du code pourri : c'est un logiciel propriétaire qui accède à la base et généralement il fonctionne bien dans d'autres endroits
Sinon pour répondre aux questions précédentes :
- Si oui, puis-je vous donner des scripts à exécuter pour essayer de trouver ce qui ralentie votre moteur SQL ?
Ancienne réponse : Je vais voir ça avec les prestataire mais je pense que ça devrait le faire
Nouvelle réponse : Oui ils accepteraient après avoir analyser les scripts en questions
- Exécutez-vous des scripts d'entretien de votre base de données SQL Server ?
Ancienne réponse : Non, quels sont les script à exécuter s'il vous plait?
Nouvelle réponse : c'est confirmé que non, il y a aucun entretien à ce niveau là.
- Est-ce un serveur Windows 2008 ou 2012 ? Pour le moment, ils utilisent un simple windows 7 mais c'est un serveur test, je vais tenter de me renseigner plus sur le futur serveur définitif et je reviens vers vous.
-
Est-ce que le moteur SQL Server utilise un compte "par défaut" ou un compte du domaine Windows
Pour le coup, ça doit être un compte "par défaut"
Merci encore de ton aide.
-
-
Hello David,
Je suis désolé je réponds tardivement.
Le script dont vous faites mention correspond à l'idée, oui.Pour l'entretien des bases de données, je vous propose de "ne pas réinventer la roue" et de vous baser sur de merveilleux scripts SQL faits par Ola Hallengren appelés "maintenancesolution".
Qu'est-ce donc ?
C'est un script SQL qui va créer (presque) tout seul des jobs dans le moteur SQL Server.
Paramétrés comme il faut, fiables et robustes.On trouve le script sur son propre site : https://ola.hallengren.com/
Je pense que plein de sites doivent donner des détails.Il crée quoi ?
Il crée tous ces jobs là, mais ne les exécute pas, ils sont simplement créés dans l'instance SQL.
Dans l'exemple ci-dessous, ce qui vous intéresse c'est le job entouré en vert.
Les autres sont (aussi) de fantastiques jobs de sauvegarde.Le mieux c'est de demander à votre prestataire de planifier ce job pour fonctionner (au pire) une fois par semaine. Il va faire des tâches de base sur vos index SQL, qui aident au moins à ce que la situation n'empire pas.
Je rappelle que cela ne remplacera jamais un DBA mais c'est un archi-minimum.Sinon, pour connaître ce qui ralenti votre moteur SQL.
Encore un autre script.
Il vient de là : http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/Il suffit de l'exécuter dans le moteur, et il va ressortir toutes les statistiques de "waits" du moteur SQL.
Ce sont des statistiques calculés depuis que le serveur SQL a été allumé, donc certaines valeurs peuvent être "noyées/diluées".Quand vous (ou votre prestataire) l'exécuterez, il va vous sortir un tableau de statistiques comme celui-ci :
Ce qui nous (et vous) intéresse sont les "Wait Type", de la première colonne.
Il y en a plein de types différents, et un DBA pourrait vous donner des détails.Mais, ils permettent quand même de se faire une idée de "ce qui ne va pas" et de l'ampleur du ralentissement (colonnes WaitCount et AvgWait_S).
Je ne vais pas vous lister tous les "waits" et leur explication, je ne suis pas assez doué.
Mais certains types de wait "montrent du doigt" l'origine du problème.Je vous mets comment on interprète certains des résultats.
Vous avez des problèmes :
- "IO" (donc disque) si vous voyez plein de :
PAGELATCH_EX, WRITELOG, - "Mémoire" (genre, pas assez de mémoire pour l'instance SQL) si vous avez plein de :
PAGEIOLATCH_SH, RESOURCE SEMAPHORE, SOS SCHEDULER - "Client" (le poste/serveur client est très long pour traiter les données que lui renvoie SQL) si vous avez plein de :
ASYNC IO COMPLETION et ASYNC NETWORK IO.
Si vous avez des tonnes de "TRACEWRITE", c'est bénin vous pouvez oublier.
Si vous avez des tonnes de "CXPACKET" c'est un problème de parallélisation de threads (expression compliquée qui se traduit par : "le moteur SQL effectue plusieurs processus en même temps et il doit attendre la fin d'un processus pour en terminer un autre") et qui se résout simplement.N'hésitez pas à me mettre une copie d'écran de ce que le script vous donne comme info.
(il n'y a rien de confidentiel là-dedans).Florent
- Modifié Florent Duret jeudi 5 novembre 2015 17:18
- "IO" (donc disque) si vous voyez plein de :
-
Bonjour
Petite orientation car j'ai subit les même ralentissements d'accès à un serveur sql et la cause était l'antivirus qui scanné chaque donnée enregistrée. la solution était de bloquer le scan des données à partir de la console centrale et pas sur les postes des utilisateurs. le fichier log de l'antivirus ou système peuvent aider.
cordialement
layali
-
-
Bonjour,
Tout d'abord je vous remercie de vous réponses,
J'ai eu les prestataire pas plus tard que hier.
La piste de L'IO du disque et des index ont déjà été exploré sans grand succès.
sur une base de test, ils ont enlevé les pièces jointes et la base allait plus rapidement et étais plus stable.Ils en sont donc venu à la conclusion que c'étais à cause des Pièces jointes.
Pensez vous que cela peut venir des pièces jointes? Si oui sauriez vous comment solutionner le problème?
J'ai beau chercher je trouve rien.
Par contre excellente nouvelle, j'aurai une copie de la BDD sous forme de VMMerci encore.
-
Bonjour
Quel était le poids de ces pièces jointes ?
Quelles étaient les waintingtasks au moment où je produisaient les ralentissements. Comment sont stockées les données ? Dans la BD, en FileStream ?
Avec plus de 200 DMVs et près de 450 compteurs de performance dans SQL (sans compter Windows) et un peu de méthodologie, ce problème de perf ne devrait pas prendre bcp de temps à troubleshooter.
Cdlt
Christophe
Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
Bonjour,
Tout d'abord merci beaucoup pour votre réponse.
Il me semble que les fichiers sont stocké en FileStream (je ne suis pas sûr, je suis encore débutant), ils sont stocké dans un dossier et ce sont fichier PDF. Comment peut on vérifier s'il vous plait?
Les ralentissements ont lieu dès qu'il y à une requête à la base de donnée (peu importe la requête).
Lors de la restauration de la base, le prestataire qui gérait la base (la base de donnée est fourni avec un progiciel) m'as affirmé que lorsqu'il restaurait sans les pieces jointes (les fameux fichiers PDF), tout allait bien.Voici le resultat du script fournis par florent:
J'ai également fait les tests suivants :
Réindexation de toutes les bases (Master, model, msdb, tempdb, BDDappli) => aucun résultat notable
Défragmentation de toutes les bases (Master, model, msdb, tempdb, BDDappli) => Aucun résultat notable
Suppression du dossier qui contiens les fichiers => Aucun résultat notable
Désactivation des logs => Aucun résultat (Vous inquiétez pas, c'est pas la base de prod mais une base sur une machine virtuelle)
Vidage du cache de toutes les bases (Master, model, msdb, tempdb, BDDappli) => aucun resultat
Vérification des droits des fichiers => Aucun résultat
La config de mon pc :
Core i7
16 Go de ram
SSD
Et la base est sur virtualbox.
Merci beaucoup pour votre précieuse aide.
- Modifié David Lambert lundi 28 décembre 2015 09:47
-
Bonjour
Dans un premier temps, désactivez le 8.3, l'indexation et le lastuseraccess sur vos disques de data.
Ensuite, si vous avez un antivirus, sur la VM, ajoutez les exceptions pour les mdf, ndf et ldf. Mais cela ne couvrira pas le FS. Sinon, excluez le processus sqlservr.exe
Dernière chose, je n'accorde pas forcément de crédit à Virtual Box pour le côté perf de VMs. Pouvez vous mener des tests sur Hyper-V ou VMWare et comparer ?
Avoir autant de pageiolatches retranscrit clairement un pbm de lenteurs disque, ce qui étonnant compte tenu de la présence d'un SSD.
Pensez aussi a mettre une exclusion AV sur le host pour les fichiers de la VM.
Cdlt
ChristopheChristophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
Re-bonjour,
j'ai désactivé l'indexation et le 8.3 (j'ai rien trouvé à propos du lastuseraccess ?) => légére amélioration de l'ordre de 4 secondes (normalement l'opération en question devrait mettre 25 secondes mais prend actuallement plusieurs minutes )
Non il n'y a pas d'antivirus sur le serveur
Pas d'amélioration notable sous vmware :/
j'ai relancé le script de stat
Merci beaucoup de votre aide.
- Modifié David Lambert lundi 28 décembre 2015 14:03
-
Quelle edition de SQL Server ?
Quelle config pour la VM ?
RAM, controleurs scsi, nombre de volumes ?
Quelle est la taille de la BD ?
Pour désactiver le lastuseraccess :
fsutil behavior set disablelastaccess 1
ChristopheChristophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
Quelle edition de SQL Server ? 2012
Quelle config pour la VM ?
OS : Windows 7 (fonctionnait pas sous windows server)
RAM : 9915
Processeur : 7 coeur
Disque dur : 25 go
controleurs scsi : Lecteur CD et disque sata
nombre de volumes ? 1
Quelle est la taille de la BD ? 4,82 Go
-
Edition : express, standard, entreprise ?
Vu la taille de la BD extrèmemnt faible, la <VM ne nécéssite pas d'attentions particulières, mais il serait préférable de configurer :
1 controleur scsi pour le volume de l'OS
1 controleur scsi pour les volumes de data (tempdb et user)
1 controleur scsi pour les volumes de log (tempdb et user)
Quelle configuration pour l'instance SQL ? Mémoire, compte de service, IFI, LPIM
Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
Voici les informations sur l'instance:
Il s'agit d'un compte intégré (administrateur)
la mémoire :
min : 0 mo
max : 2147483647 mo
taille minimale par requête : 1024 ko
- Modifié David Lambert lundi 28 décembre 2015 15:40
-
cela commence a expliquer quelques petites choses.
SQL Express est limité à 1GB pour le buffer pool, ce qui explique les pageiolatch. Peu de mémoire implique des IO physiques.
Vérifiez également que votre BD est configurée avec un autoclose à OFF, car par défaut en express il est sur ON sur model, on en hérite donc lors de la création d'une BD.
Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
je n'ai malheureusement pas la possibilité de passer sur une autre edition.
Malgré tout le prestataire m'as affirmé que c'étais que chez nous que ça marchait pas :/
Je tente une mise à niveau vers une version d’évaluation :)
L'autoclose est bien fermé partout
- Modifié David Lambert lundi 28 décembre 2015 15:57