Question

Je dirige une communauté de photographes en ligne et il semble que le site ait besoin d'une analyse approfondie de l'accès à la base de données, ce qui entraîne parfois des dépassements de délai.

Je me considère assez compétent pour écrire des requêtes SQL et concevoir des tables, mais je ne suis en aucun cas un DBA ... d'où le problème.

Quelques antécédents:

  1. Mon site et le serveur SQL s'exécutent sur un hôte distant. Je met à jour le code ASP.NET à partir de Visual Studio et le code SQL via SQL Server Mgmt. Studio Express. Je n'ai pas d'accès physique au serveur.

  2. Tous mes processus stockés (je pense les avoir tous) sont encapsulés dans des transactions.

  3. La table principale ne contient que 9400 enregistrements pour le moment. J'ajoute 12 nouveaux enregistrements à cette table tous les soirs.

  4. Il existe une vue sur cette table principale qui regroupe les données de plusieurs autres tables dans une seule vue.

  5. les tables secondaires sont des enregistrements plus petits, mais plus nombreux. 70 000 en un, 115 000 en un autre. Il s’agit des enregistrements de commentaires et d’évaluations des éléments du n ° 3.

  6. Les index sont sur les champs les plus nécessaires. Et je les ai configurés pour recalculer automatiquement les statistiques sur les grandes tables.

Lorsque le site s'arrête, si j'exécute le code pour effacer le journal des transactions, mettre à jour les statistiques, reconstruire la vue principale, ainsi que pour reconstruire la procédure stockée afin d'obtenir les commentaires, la vitesse est renvoyée. Je dois le faire manuellement cependant.

Malheureusement, mes utilisateurs sont frustrés par ces problèmes et leur participation diminue.

Donc, ma question est ... dans un environnement distant, quel est le meilleur moyen de configurer et de planifier un plan de maintenance pour que ma base de données SQL fonctionne à son maximum ???

Merci beaucoup! KLK

Était-ce utile?

La solution

Vous n'avez pas besoin de configurer vos tâches de maintenance en tant que plan de maintenance.

Créez simplement une procédure stockée qui exécute les tâches de maintenance que vous souhaitez effectuer, des reconstructions d'index, des mises à jour de statistiques, etc.

Créez ensuite un travail qui appelle votre / vos procédure (s) stockée (s). Le travail peut être configuré pour s'exécuter selon le planning souhaité.

Pour créer un travail, utilisez la procédure sp_add_job.

Pour créer une planification, utilisez la procédure sp_add_schedule.

J'espère que mes explications sont claires et compréhensibles, mais n'hésitez pas à me laisser un message si vous avez besoin d'une assistance supplémentaire.

À la vôtre John

Autres conseils

Mon instinct dit que vous faites quelque chose de mal. Cela ressemble un peu aux histoires que vous entendez et où un système ne peut pas rester en place à moins de redémarrer le serveur tous les soirs: -)

Quelque chose ne va pas avec vos requêtes, le nombre de lignes que vous avez est presque toujours sans rapport avec les performances et votre base de données est très petite de toute façon. Je ne connais pas trop le serveur SQL, mais j'imagine que celui-ci dispose de très bons outils d'analyse de requêtes. J'imagine aussi qu'il permet de journaliser les requêtes lentes.

On dirait vraiment que vous avez un index manquant. Bien sûr, vous pensez peut-être que vous avez ajouté les bons index, mais tant que vous n'avez pas vérifié qu'ils sont utilisés, cela n'a pas d'importance. Vous pensez peut-être en avoir les bons, mais vos questions suggèrent le contraire.

D'abord, essayez de savoir comment enregistrer vos requêtes. Les chances sont très bonnes que vous ayez un tueur qui effectue une analyse séquentielle qu'un index corrigerait.

Deuxièmement, vous pourriez avoir toute une série de petites requêtes qui la tueraient. Par exemple, vous pourriez avoir des "utilisateurs" " objet qui frappe la base de données chaque fois que vous recherchez un nom d'utilisateur à partir d'un ID utilisateur. Recherchez cent fois les endroits où vous interrogez la base de données et remplacez-les par un cache, même si cela " cache " n’est rien de plus qu’une variable privée qui s’efface à la fin d’une requête.

En bout de ligne, je doute vraiment que ce soit quelque chose de mal configuré dans SQL Server. Je veux dire, si vous deviez redémarrer votre serveur tous les soirs parce que le système s'arrêtait, est-ce que vous blâmeriez le système ou votre code? Même affaire ici ... découvrez les outils fournis par SQL Server, je parie qu’ils sont assez lisses: -)

Cela dit, une fois que vous acceptez de faire quelque chose de mal, appréciez le processus. Rien, à mon avis, ne permet d’optimiser les requêtes de base de données lentes. C’est tout simplement incroyable que vous puissiez prendre une requête avec une exécution de 10 secondes et la transformer en une requête avec une exécution de 50 ms avec un seul index bien placé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top