Attends Attends Attends
Bien que les performances et les licences soient intéressantes, elles ne sont pas le seul aspect d'une charge de travail à prendre en compte.
Les threads de travail peuvent avoir un impact sur le choix du processeur.
Fils de travail?
Ouais mec! Ce sont les choses que votre serveur SQL utilisera pour exécuter vos requêtes et effectuer toutes les tâches d'arrière-plan nécessaires pour garder les choses en forme.
Lorsque vous manquez de threads de travail, vous atteignez THREADPOOL attend
THREADPOOL?
THREADPOOL. Il s'agit de l'une des attentes les plus désagréables que vous puissiez avoir sur votre serveur, avec RESOURCE_SEMAPHORE et RESOURCE_SEMAPHORE_QUERY_COMPILE . Mais ce sont des attentes de mémoire, et c'est une question de CPU.
Revenons donc à la raison pour laquelle c'est de la wiggité.
Voici comment SQL Server calcule les threads de travail :
Remarquez que le fait de doubler le nombre de cœurs ne double pas le nombre maximal de threads de travail, et vous obtenez le même nombre avec 1 cœur que vous le faites avec 4 cœurs? L'équation est:512 + ((logical CPUs - 4) * 16)
C'est dommage, car lorsque le nombre de cœurs augmente, la vitesse d'horloge chute généralement d'une génération ou deux en arrière.
En jetant un œil à toute gamme récente de puces Intel , vous constaterez une tendance similaire.
Comment savoir de combien de threads j'ai besoin?
Cela dépendra beaucoup de:
- Nombre d'utilisateurs
- Nombre de requêtes parallèles
- Nombre de requêtes en série
- Nombre de bases de données et synchronisation des données (mise en miroir, AG, sauvegardes pour l'envoi de journaux)
- Si vous laissez MAXDOP et CTFP aux valeurs par défaut
Si vous n'en manquez pas aujourd'hui, vous êtes probablement d'accord.
Mais comment savoir si vous l'êtes?
Il y a de bonnes questions, et il y a de grandes questions, et laissez-moi vous dire quelque chose, c'est une GRANDE QUESTION .
THREADPOOL peut se manifester sous la forme de problèmes de connexion , et vous pouvez voir des messages dans le journal des erreurs indiquant qu'il est impossible de générer un thread .
Vous pouvez également consulter les statistiques d'attente de votre serveur en utilisant un outil gratuit comme sp_Blitz ou sp_BlitzFirst (divulgation complète, je contribue à ce projet).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Puis-je simplement augmenter le nombre maximal de threads de travail?
L'augmentation du MWT peut entraîner une augmentation des SOS_SCHEDULER_YIELD
attentes.
Ce n'est pas la fin du monde, mais pensez-y comme l'ajout d'un buncha hurlant des enfants à la classe d'un professeur.
Tout d'un coup, il sera plus difficile pour chaque enfant d'attirer l'attention.
Lorsqu'un processus épuise son quantum de 4 ms , il y aura potentiellement plus de threads devant lui en attente de monter sur le CPU.
Les performances peuvent sembler à peu près les mêmes.
Comment puis-je utiliser moins de threads de travail?
Vous [cruel] cruel d'un [substantif], ce sont des travailleurs avec des familles à soutenir! Hypothèques! Rêves!
Mais d'accord, je dois respecter les résultats. Tu es le patron.
L'endroit le plus simple pour commencer est de modifier les paramètres tels que MAXDOP et Cost Threshold For Parallelism par défaut.
Si vous avez des questions sur la façon de les configurer, rendez-vous ici:
Après cela, votre travail devient beaucoup plus difficile. Vous devez comprendre ce qui utilise tous ces fils. Vous pouvez parfois le faire en consultant vos statistiques d'attente.
Plus précisément, si vous avez des attentes élevées sur le parallélisme ( CXPACKET
) ET des attentes élevées sur les verrous ( LCK_
), vous risquez de rencontrer de longues chaînes de blocage impliquant des requêtes parallèles.
Tu sais ce qui pue? Alors que toutes ces requêtes parallèles attendent d'obtenir leurs verrous, elles ne rendent pas leurs threads alloués.
Vous pouvez presque entendre que la machine virtuelle à quatre cœurs que votre administrateur vous a assuré était plus que suffisante pour toute charge de travail à bout de souffle, hein?
Malheureusement, le type de requête et de réglage d'index que vous devez faire pour résoudre ce problème dépasse le cadre de la question.
J'espère que cela t'aides!