Quels sont les 3 principaux problèmes de performances que vous rencontrez avec vos serveurs SQL?


15

Je suis un étudiant de l'Université Fontys à Eindhoven, et je mène actuellement une série d'entretiens pour aider au développement d'un outil SQL Server et je voudrais obtenir les commentaires des experts dans le domaine.

Une de mes questions est:

Quels sont les 3 principaux problèmes de performances que vous rencontrez avec vos instances SQL Server et comment identifiez-vous ces problèmes?

Je m'intéresse particulièrement aux scripts et aux outils utilisés pour mesurer cela.

Réponses:


22

Sur le dessus de ma tête - 3 principaux problèmes de requête:

  • Conversions implicites
  • Mauvaises stratégies d'indexation (trop ou pas assez ou de mauvaise nature)
  • Utiliser SELECT * au lieu de nommer uniquement les champs dont vous avez besoin

Il y a beaucoup plus autour des problèmes de configuration au niveau du serveur, des problèmes de schéma de base de données, des problèmes matériels, etc. J'ai écrit un script pour analyser rapidement les serveurs à la recherche de ces types de problèmes:

http://www.brentozar.com/blitz/


15
  • Mauvaise conception / requêtes / indexation
  • Pas autorisé à acheter du matériel correct
  • Braindead ORMs (aka "SQL is dead")

14

Pas le top 3, mais j'ai pensé mentionner des choses qui n'étaient pas encore mentionnées:

  1. SQL mis sur des machines virtuelles sans aucun détail / transparence fourni au DBA. Le serveur hôte changera dynamiquement les paramètres des machines invitées, provoquant une baisse des performances et laissant le DBA sans aucun indice. Des fonctionnalités telles que l'hypertreading, l'association de réseaux et le gonflement de la mémoire font des compteurs de performances une cible mobile à surveiller.Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. De même, aucune transparence / vérifiabilité sur les paramètres SAN fournis au DBA. J'ai eu des LUN avec différentes préférences de cache de lecture / écriture mais j'ai dit qu'elles étaient toutes les mêmes.Tools: IO DMVs, SQLIO.
  3. Mauvaise architecture de base de données: comme le dimensionnement et le placement des données et des fichiers journaux, et tempdb. Utilisation incorrecte du parallélisme. Création de plusieurs groupes de fichiers sur les mêmes disques physiques.Tools: experience.

Un autre outil que je vérifie maintenant est Project Lucy . Semble bien.


10
  • manque d'index appropriés
  • utilisation de avec nolock dans productioncode par quelqu'un pour essayer de résoudre les problèmes de performances. Particulièrement mauvais si le code modifie les données des tableaux
  • application sélectionnant plus de données que nécessaire à plus de fois que nécessaire. Ex ayant un binaire retourné à chaque fois même si vous voulez juste les données textuelles de la même table.

2
+1 pour la mention nolock. Tous les développeurs que je connais pensent que c'est une bonne idée de l'utiliser car "cela ne verrouille pas la table dans les lectures"
tucaz

Ne détestez-vous pas simplement quand un de vos clients a acheté CE système énorme pour de l'argent et la première fois que vous le regardez, il l'utilise partout avec nolock? Et puis ...: - /
Martin Sjöberg

9

Requêtes qui évoluent mal (obtenez toutes les commandes pendant X ans pour tous les clients, etc., y compris toutes les lignes de commande, y compris les données sommées et autres données moyennes mal calculées)

Il suffit de tout interroger à la fois.

Les tableaux qui contiennent des champs varchar / texte 'descript' qui doivent être recherchés dans chaque requête.


7
  • Maintenance incorrecte, c'est-à-dire pas de réorganisation d'index, de statistiques, pas de sauvegarde de journal
  • Index manquants
  • Requêtes mal écrites

7
  • Mauvaise conception de la base de données et des applications
  • mauvaise utilisation des avantages de la plate-forme (les développeurs voulaient avoir un code d'accès à la base de données intégré à la plate-forme. pas de SP, pas de fonctions, etc.)
  • mauvaise indexation, bien sûr.

7
  • requêtes ad hoc sur les données de production - oui, les développeurs pensent que c'est nécessaire et certains pourraient même y avoir accès :-)
  • mauvaise conception de l'application qui utilise la base de données - par exemple: trop de données ajoutées et jamais supprimées même si elles ne sont plus nécessaires (ce qui entraîne des problèmes de performances car les sauvegardes augmentent, les tâches de maintenance prennent plus de temps, etc.)
  • tous les fichiers de base de données sur le même raid ou pire, sur le même lecteur (par exemple: système dbs, tempdb, utilisateur dbs tous ensemble sur le même lecteur / raid)

3
  • Mauvaise conception de la base de données
  • Mauvaise stratégie d'indexation (y compris trop d'index, des index manquants et un manque de maintenance des index)
  • Mauvaises décisions architecturales matérielles

2

L'indexation est essentielle aux performances, mais j'ai constaté que la plupart des administrateurs de base de données le savent, et c'est donc généralement l'une des premières choses qui est corrigée par l'optimisation des requêtes. Les domaines souvent peu abordés:

  1. Trop d'allers-retours DB. Le chat est l'un des principaux problèmes de performances que je vois.
  2. Obtenir les bonnes limites de transaction. La transaction de chaque INSERT / UPDATE / DELETE peut être un gros tueur de performances.
  3. Échec de l'optimisation du côté matériel; en particulier, placer le journal DB sur un volume différent des données DB.

Si je pouvais ajouter un quatrième élément à la liste, ce serait une utilisation excessive et inappropriée de déclencheurs et / ou de curseurs. Cela ne semble pas trop se produire de nos jours, mais quand c'est le cas, c'est douloureux du point de vue de la performance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.