web-dev-qa-db-fra.com

Qu'est-ce que le repérage à chaud dans le contexte de l'ajout de fichiers à tempdb?

J'essaie de savoir s'il est possible d'ajouter des fichiers tempdb à un serveur SQL sans avoir à redémarrer le service SQL Server. J'ai vu cette réponse ici sur les administrateurs de base de données:

Et une réponse dit:

AJOUTER - aucune interruption requise. Bien que, comme l'a souligné Sean de Microsoft, SQL préfère utiliser les fichiers les moins remplis. Si vous passez d'un fichier de données à un autre et que vous en ajoutez d'autres, SQL utilisera les nouveaux pendant un certain temps, mais vos performances ne seront pas pires que d'avoir un seul fichier. Cependant, si vous en avez déjà 2+ et que vous en ajoutez un de plus, alors il va créer un point chaud sur le nouveau et diminuer les performances.

Cependant, un commentaire met en garde les points suivants:

Je voudrais mettre un addendum sur la partie "Ajouter": "Ajouter: Non, mais vous serez très probablement déséquilibré, vous serez donc à chaud, ce qui pourrait aggraver les choses."

J'ai les questions suivantes à propos de ce commentaire, mais on m'a demandé de poser ces questions dans une nouvelle question de moi-même (celle-ci) plutôt que de demander au commentateur via un commentaire dans les réponses à cette question.

Plus précisément:

  1. Qu'est-ce que le repérage à chaud? (J'ai obtenu des informations via Google, mais pas en détail ce qui se passe avec le hotspotting sur tempdb après avoir ajouté des fichiers)
  2. Qu'en est-il des points chauds qui aggravent les choses dans tempdb?
  3. Quelles choses spécifiques dans la DB empireraient?
12
jrdevdba
  1. Qu'est-ce que le repérage à chaud?

    "Repérage à chaud" dans ce contexte signifie que, même si tempdb a plusieurs fichiers, tout le travail d'E/S est effectué dans un seul fichier. Si tempdb est suffisamment occupé pour justifier l'ajout de fichiers, le déséquilibre qui conduit à un repérage à chaud (dû à remplissage proportionnel ) sera de courte durée, donc je pense que les avertissements peuvent être un peu Chicken Little. D'après mon expérience, en tout cas.

  2. Qu'en est-il des points chauds qui aggravent les choses dans tempdb?

    Je pense que cela est considéré comme pire dans tempdb, car il prend le poids de l'activité d'écriture dans la plupart des charges de travail. Vous pouvez certainement souffrir de problèmes similaires dans les bases de données utilisateur, mais puisque vous essayez déjà de résoudre un problème dans tempdb ...

  3. Quelles choses spécifiques dans la base de données pourraient empirer?

    Écrire des temps, surtout. Imaginez tout le monde essayant d'utiliser le même guichet automatique, même s'il y a 7 autres guichets automatiques à proximité. Seulement tant de choses peuvent être écrites à tout moment; tout le reste doit attendre. Avec plus de fichiers (et suffisamment de cœurs pour planifier le travail), les E/S peuvent être réparties plus uniformément.

    Assurez-vous juste:

16
Aaron Bertrand
  1. Qu'est-ce que le repérage à chaud?

Aaron a raison et je ne vais pas répéter ce qu'il a dit ci-dessus, mais il ne s'agit pas uniquement d'E/S disque. La partie principale avec laquelle la plupart des gens ont des problèmes avec TempDB est due à des conflits sur certaines structures de suivi.

Étant donné que le fait d'avoir plusieurs fichiers tempdb permet aux algorithmes de remplissage proportionnel et de tourniquet de se dérouler efficacement en étant "équitables" entre les allocations, l'ajout d'un nouveau fichier sans allocations le fait disparaître un peu. Je ne suis pas d'accord pour dire que c'est un "petit poulet" (voir les mises à jour du produit ci-dessous) si vous commencez à voir PAGELATCH_* attend sur ledit nouveau fichier et pas beaucoup ou pas sur d'autres fichiers. Cela se produit généralement sur les systèmes qui ont une activité TempDB élevée et qui ont déjà plus d'un seul fichier.

Veuillez noter qu'il existe des options dans SQL Server 2019 pour modifier certaines des sous-jacentes tables système en tables en mémoire qui peuvent avoir une amélioration car les objets en mémoire sont alloués différemment des tables cuites sur disque. Les tables sur disque sont les tables traditionnelles avec lesquelles nous avons tous travaillé au fil des ans. SQL Server 2014 a introduit des tables optimisées en mémoire . SQL Server 2019 peut gérer certaines métadonnées d'allocation dans des tables à mémoire optimisée.

Une autre modification a été apportée à SQL Server 2019 pour faciliter les modifications PFS simultanées, ce qui est généralement le cas pour la structure d'allocation en mémoire dans le PAGELATCH_* attend.

  1. Qu'en est-il des points chauds qui aggravent les choses dans tempdb?

Rien à mon humble avis. Oui, TempDB a plus d'éléments qui peuvent provoquer des écritures sans être utilisés directement, ce qui peut gêner certains éléments. Cependant, une base de données d'utilisateurs très chargée en termes de taux de changement de données est tout aussi mauvaise. Cela ne se limite pas à TempDB.

  1. Quelles choses spécifiques dans la DB empireraient?

J'aime vraiment l'analogie d'Aaron! C'est l'essence de ce qui se passe. Ce qui empire vraiment, c'est l'allocation et le suivi de l'espace pour les objets dans la base de données. Si votre base de données utilisateur est principalement statique (faible taux de changement) ou que votre TempDB n'est pas vraiment utilisée, vous ne remarquerez rien. Si, cependant, il s'agit d'un serveur assez occupé, vous pouvez démarrer ou exacerber les attentes de pagelatch, ce qui pourrait entraîner le blocage des convois.

Aaron a déjà souligné que sur l'ancienne version, il existe des indicateurs de trace pour s'assurer que des extensions uniformes sont utilisées et que tous les fichiers d'un groupe de fichiers grandissent ensemble (Aaron souligne 1117 et 1118 qui sont des NOP en 2016+). L'autre chose que je voudrais souligner encore une fois, c'est que ce n'est pas seulement pour TempDB mais pour n'importe quelle base de données, et la disposition physique doit être réfléchie en fonction des besoins.

Ce n'est pas seulement pour les problèmes de points chauds, mais est applicable à d'autres parties du système telles que la sauvegarde/restauration, la gestion des fichiers, la fragmentation des métadonnées du système de fichiers, etc., qui peuvent toutes être aidées en ayant plusieurs fichiers.

Vous pouvez voir le conflit de structure d'allocation en recherchant un waitresource sur une page PFS (qui est la page 1, puis toutes les 8088 pages). Si vous voyez tout cela dans le même fichier (2: fichier: page), alors vous savez que cela se produit.

10
Sean Gallardy