Je suis absolument nouveau dans les bases de données et les requêtes SQL. p>
Q1. Quels sont les problèmes courants généralement face à des requêtes de base de données? Probablement extrêmement importantes de requêtes, de problèmes de performance, de délai d'attente et de connectivité, des erreurs d'exportation d'importation et de restauration p>
Q2. Quelle approche et outils faut-il être Soyez conscient du débogage d'un SQL Performance de requête? P> blockQuote>
Ce sera génial si vous pouvez partager certains des problèmes rencontrés et comment avez-vous été avancé pour le résoudre. P>
7 Réponses :
essayer d'utiliser Expliquer avant vos requêtes, cela vous donnera un excellent aperçu de ce qui se passe sous le capot. P>
Voir aussi: conseils de performance SQL p>
Et si vous n'utilisez pas MySQL, il y a aussi quelque chose de très similaire pour tous les autres fournisseurs. (Parfois appelé «plan d'exécution du spectacle», etc.)
La chose la plus importante pour le débogage des requêtes SQL est le profileur SQL Server http://msdn.microsoft.com/en-us/library/ms187929. ASPX P>
Cela vous donnera des lectures, écrites, le temps passé, etc. p>
Les plans d'exécution sont également très utiles et vous montreront si cela a fait une analyse au lieu d'une recherche ou d'une vice versa. Regardez-vous aussi bien http://msdn.microsoft.com/en-us /Library/ms178071.aspx P>
Je comprendrai également ces conseils avant votre dernier lien: technique.microsoft.com/en-us/library/ms177500(V=SQL.105).aspx
Probablement l'une des choses les plus importantes que vous voudriez comprendre est des index. Un gros goulot d'étranglement potentiel pour la performance de la requête est lorsque vous recherchez une colonne qui ne fait pas partie d'un index et qu'elle provoque une analyse de table. Une balayage de table signifie que chaque ligne est numérisée, donc naturellement, plus les enregistrements dans la ou les tableaux (s), pire les performances. P>
Je ne suis pas sûr de quelle base de données que vous utilisez, mais à partir d'une perspective SQL Server, vous seriez bien servi d'apprendre à utiliser SQL Profiler. Vous pouvez également afficher le plan d'exécution d'une requête via SQL Management Studio, cela indiquera où pourrait être les problèmes de performance dans votre requête. P>
Des problèmes qui apparaissent dans des bases de données ne sont généralement pas liés aux requêtes directement, mais les problèmes que j'ai dû respecter sont des indices manquants (peut causer des requêtes vraiment lentes sur les données), les problèmes d'intégrité des données car les contraintes n'ont pas été créées qui ont permis à quelqu'un de corrompre les données. P>
En outre, si vous utilisez des transactions, assurez-vous de comprendre comment ils effectueront une utilisation simultanée et savent que vous ne pouvez pas sélectionner des données à partir d'une table modifiée dans une transaction jusqu'à la fin de la transaction. P>
Les connexions et le délai d'attente ne sont pas des problèmes que j'ai généralement confrontés. P>
En ce qui concerne les requêtes - Utilisez Expliquer les plans qui vous permettent d'identifier la manière dont le moteur de base de données exécutera vos requêtes. (Cela identifiera la manière dont les jointures seront effectuées et dans quel ordre et la cardinalité de vos jointures - si vous pouvez réduire les nombreuses relations dans vos jointures, votre requête sera plus rapide) p>
Vous faites un point ici ... Je dois y retourner si je suis confronté au problème. Merci pour la réponse..
Si vous êtes vraiment intéressé par les requêtes de la base de données sur le réglage des performances, vous devez obtenir un livre gros gras sur le sujet de la base de données de votre choix. Le réglage de la performance est très spécifique à la base de données. Cela dit, une question commune dans la syntonisation des requêtes que vous devez être consciente de peu importe la base de données est que la requête accordée doit renvoyer exactement le même résultat défini comme la requête d'origine mais être plus rapide. Parfois, les gens réglage oublient cette chose fondamentale et finissent avec une requête plus rapide mais ne font pas la même chose. P>
problèmes dans les requêtes de base de données - P>
mauvais résultats - La requête ne fait pas réellement ce que vous voulez qu'il fasse p>
performance - la requête Times Out ou est trop lente. Beaucoup de choses peuvent causer cela, mais quelques causes courantes sont une mauvaise conception de la base de données (n'utilisez pas de tables EAV par exemple), utilisez des technologies de requête mal performantes telles que des sous-requêtes corrélées, une boucle en boucle à la fois, un manque d'indexation correcte, des statistiques Déchargé, les requêtes qui ne sont pas sarparables et bien sûr du matériel et des problèmes de réseau. P>
Pour les inserts, les mises à jour, les suppressions - il peut y avoir des problèmes d'intégrité des données en raison de la mauvaise conception de la base de données (manque de clés étrangères, d'absence de valeurs par défaut, de manque de contraintes) ou de conception de requête. Parfois, les gens choisissent de faire de leur propre champ d'autocramicité au lieu d'utiliser tout ce qui est livré avec la DATBase. Ceux-ci peuvent rencontrer des problèmes de concurrence. P>
Sécurité - La base de données ne protège pas correctement ses données (cryptage des données personnelles, codage pour éviter les attaques d'injection, limiter les droits de faire des choses sur DAT, etc.) P>
Manque de test des cas de bord - Il s'agit d'un problème fréquent dans le SQL dynamique et des déclencheurs, en particulier lorsque les développeurs considèrent que le cas le plus courant et la chose se casse lorsque le boîtier de bord frappe-le. P>
Nous avons une application qui génère des requêtes de manière dynamique. Selon la logique, la requête couvre parfois des pages avec beaucoup de clauses et et pouvons-nous traiter les requêtes en lots ou quelque chose qui rend la requête gérable
Sans voir votre schéma et les quirites elles-mêmes, je ne peux vraiment pas répondre à cela. Pas un fan de la génération de requêtes automatisée en général, ils sont souvent mal formés pour la performance.
C'est un bon article sur Comment optimiser vos relevés SQL et vos choses que vous avez prises en compte: p>
Les meilleures pratiques ne sont pas spécifiques à la base de données ??? Puis-je appliquer ces pratiques dans n'importe quelle base de données?
Eh bien, ceux-ci sont spécifiques à MySQL, bien que beaucoup d'entre eux s'appliquent bien aux bases de données en général.
J'ai débogué avec la méthode indiquée ici strong> et l'une des méthodes a fonctionné pour moi.
J'ai vérifié la requête en cours d'exécution pendant la période la plus longue et de savoir que certaines requêtes étaient bloquées et fonctionnaient depuis plus de 3-4 heures. . Pour vérifier depuis combien de temps la requête est en cours d'exécution, exécutez la commande suivante: p> Si cela est plus d'une heure, c'est le problème. Tuez la longue connexion en cours d'exécution < / a> et limiter l'âge maximum de la connexion du côté de l'application. P> p>
N'utilisez d'abord jamais le terme suite, il est SQL.
Donc, avez-vous un problème concret à l'esprit que vous allez résoudre avec une base de données SQL?