0
votes

Exécution de la même déclaration de sélection simple ou de la même procédure stockée sur SQL Azure prend beaucoup de temps ou de temps

J'ai deux instances SQL Server Azure avec standard S2: 50 DTU. Lorsque j'exécute des instructions simples Sélectionner sur deux cas, l'un d'entre eux prend plus de temps que d'autres ou moments. Plus lentement, vous avez plus d'enregistrements dans des tables dans une instance plus lente.

Les deux cas ont le même schéma de table. Nombre d'enregistrements dans les tableaux présents dans des instances plus lentes, la table LogEvidence contient 1324928 et la table LogItem contient 649391. Nombre d'enregistrements dans des tables présents dans des instances plus rapides, la table LogEvidence contient 89504 et la table de logitem contient 89496. P>

ci-dessous est le Énoncé de sélection simple P>

select count(*) from logitem 


0 commentaires

3 Réponses :


0
votes

Ces requêtes simples effectuent de grosses analyses sur la table et impliquent la lecture de toutes les lignes. Si la table dispose d'un index en cluster, vous n'avez pas à effectuer un compte sélectionné (*) pour connaître le nombre d'enregistrements. La requête suivante devrait à ce chiffre plus rapide: xxx

si la table n'a pas d'identité, veuillez ajouter un authène sur la table et en faire l'index en cluster.

Vous pouvez Essayez également d'ajouter une clause inutile où la clause comme ci-dessous à la requête, et vous pouvez obtenir une meilleure performance. xxx

où id est la colonne Autoid.


0 commentaires

0
votes

J'ai eu une certaine expérience avec Azure et, de votre description, je pense qu'il y a une des choses suivantes que vous pouvez faire:

  1. Puisque vous n'utilisez que compter, les index ne jouent aucun rôle. Bien que je comprenne, une autre réponse indique d'utiliser où id> 0 , mais Azure devrait compter 1 m des rangées sans 30 secondes. Mais pour d'autres requêtes que vous avez besoin d'index ou d'azur échouera.

  2. Vérifiez si votre serveur n'est pas en maintenance, il est faible de chances, mais cela se produit avec nous, nous sommes sur S4 et notre serveur vient de rester lentement, mais après 10-30 minutes, cela fonctionne bien. Peut-être que le matériel réel obtient un processus qui le ralentit.

  3. C'est la raison la plus importante de l'exécution lente, surtout si vous avez beaucoup d'écriture et de suppression sur votre serveur. Vérifiez la taille de la base de données. La base de données Azure a été fragmentée trop rapidement, nous devons optimiser sa fragmentation de données tous les 10 jours, si votre taille BACPAC est de 100 Mo et que votre taille de base de données dans Azure montre de 5 à 6 Go, il a définitivement besoin d'une optimisation lorsque beaucoup de fragments ont été générés. MSDN a donné des questions à recréer des index et de supprimer la fragmentation, je ne me souviens pas de leur URL, mais une simple recherche Google apportera cela. Il devrait accélérer les choses.

  4. Azure a une fonctionnalité générant automatiquement des index, de vérifier si les deux table partagent les mêmes index, peut-être que votre version plus rapide a un index azur crée par lui-même.


0 commentaires

0
votes

Vous devez reculer et réfléchir à votre hypothèse: 1. "La performance devrait être à peu près la même" - vous avez plus de données dans une case contre l'autre. Dans la limite, vous devez vous attendre à ce que les performances du second soient potentiellement un peu plus lentes que l'originale.

Maintenant, allons entrer dans la "Pourquoi" peut être plus lent et comment vous pouvez enquêter sur chaque cas: Étape 1: Regardez les plans de requête pour chaque cas et voyez ce que vous avez. Probablement, vous aurez quelque chose comme: Streamagg <- Scan d'index clustered (Si vous avez d'autres index B-Tree, vous pouvez numériser l'un d'entre eux et peut être plus rapide car l'index ne serait pas aussi large et que l'index aura donc moins de pages à numériser)

Étape 2: Vous pouvez examiner les temps d'exécution et la ressource actuels pour chaque requête pour voir pourquoi elles sont différentes. Un moyen de faire cela consiste à exécuter "Définir le temps de statistiques sur", puis "Set Statistics io on", puis exécutez votre requête. Il va dévoiler des informations supplémentaires dans SSMS lorsque vous exécutez la requête à partir de là. (Vous pouvez en lire ici ici: https://docs.microsoft.com/en-us/sql/t-sql/statifs/set-statistics-io-transact-sql?view=SQL-Server-2017 < / a>)

Si vous passez en revue la sortie de chacune d'elles, vous pouvez trouver des raisons pour lesquelles la performance est différente. Une explication possible est que la quantité de mémoire est limitée dans un S2 et que vous êtes juste à la limite de l'endroit où toutes les pages correspondent à la mémoire vs non pour les deux exemples. Dans ce cas, faire une requête de comptage (*) aurait besoin de parcourir toutes les pages et de faire beaucoup plus d'IO que dans le cas plus petit où ils pourraient tous être en mémoire déjà.

Étape 3: Vous pouvez également examiner potentiellement le magasin de requêtes pour mieux comprendre pourquoi un cas est rapide et un cas n'est pas. Un aperçu de la façon d'utiliser c'est ici: https://docs.microsoft.com/en-us/sql/relante-databases/performance/monitoring-performance-by--utilisant?view=SQL-SERVER-2017 < / a> Remarque: il est par défaut dans SQL Azure afin que vous puissiez simplement aller regarder la fenêtre de temps lorsque vous avez exécuté les requêtes pour obtenir un aperçu de ce qui se passait à cette époque de votre base de données.

Enfin, vous pourriez envisager des moyens de faire passer la requête plus rapide si vous en avez besoin pour être plus rapide. * La création d'un index étroit arbre B sur la table peut aider à une requête (Nombre (*) ne renvoie aucune colonne et nécessite simplement un nombre de lignes de certains index non filtrés). * Vous pouvez utiliser une colonne de colonne (qui nécessite un S3 ou ci-dessus pour des raisons de mémoire). Ce type d'index orienté colonne est optimisé pour ce type de requête et serait beaucoup plus rapide que la taille de la table augmente à l'avenir.

espère que cela aide


0 commentaires