Lorsqu’il s’agit d’exécuter des applications telles que SQL Server sur Windows, il est important de comprendre comment elles sont assignées à l’espace mémoire. Cela implique de décomposer l’application en processus et en threads.
Processus
Un processus est une instance d’un programme en cours d’exécution sur Windows. Il peut avoir un ou plusieurs threads. Chaque processus est composé de deux composants : un objet noyau de processus et un espace d’adressage virtuel. L’espace d’adressage virtuel contient tout le code et les données, mais il n’est pas chargé tant qu’il n’est pas nécessaire par le système d’exploitation en blocs de la taille d’une page.
SQL Server est un processus qui peut s’exécuter soit en tant que service, soit en tant qu’application en mode console.
Threads
Les threads sont les unités d’exécution au sein d’un processus. Sans threads, les processus d’application sont incapables d’effectuer des tâches sur le système. Un thread ne peut pas accéder à l’espace d’adressage d’autres processus sans une section de mémoire partagée.
Lorsqu’un processus est créé, le système crée automatiquement son premier thread appelé thread principal ou principal. Lorsque ce thread est tué ou se termine, le processus se termine.
États des threads
Un thread peut exister dans différents états, notamment Initialisé, Prêt, En cours d’exécution, En attente, Terminé, En attente de transition et Inconnu. Windows permet de suspendre et de reprendre les threads en fonction des API Windows. Un thread peut également se suspendre pendant une période spécifiée, appelée thread en sommeil.
Priorités des threads
Windows attribue des priorités aux threads, qui régissent leur comportement en matière de cession et de commutation de contexte. Les threads commencent leur vie en héritant de la priorité de base de leur processus. Cette priorité peut être définie lors de la création du processus.
Fibres
Les fibres sont une construction de l’espace utilisateur qui permet une planification coopérative. Elles ont moins de surcharge associée à elles que les threads. Cependant, certains composants de SQL Server, tels que SQLMail et SQLXML, ne fonctionnent pas bien lorsque SQL Server s’exécute en mode fibre.
Modèles d’exécution du processeur
Il existe deux modèles d’exécution du processeur : le modèle d’exécution à thread unique et le modèle d’exécution multi/hyper-threadé. Dans le modèle d’exécution à thread unique, un thread est exécuté par processeur CPU. Dans le modèle d’exécution multi/hyper-threadé, plusieurs threads sont exécutés par processeur CPU.
Ordonnancement du processeur
Les décisions d’ordonnancement du processeur sont prises dans diverses conditions, telles que lorsqu’un processus passe de l’état d’exécution à l’état d’attente ou lorsqu’un processus se termine. Le système peut être soit non préemptif, soit préemptif, selon que l’ordonnancement a lieu uniquement dans certaines conditions ou à tout moment.
Architecture du processeur
L’architecture du processeur fait référence à la manière dont la mémoire est connectée au processeur. Elle peut être soit Symmetric Multiprocessing (SMP), soit NonUniform Memory Access (NUMA). L’architecture SMP connecte tous les processeurs à toute la mémoire via un bus système partagé, tandis que l’architecture NUMA divise la mémoire totale disponible en plusieurs nœuds.
SQLOS
SQLOS est une couche mince qui se situe entre SQL Server et Windows. Elle est responsable de la planification, de l’achèvement des E/S, de la gestion de la mémoire et de la gestion des ressources. SQLOS offre une plus grande flexibilité et un meilleur contrôle sur l’architecture sous-jacente et offre des capacités de diagnostic étendues pour un meilleur dépannage.
Tâches et travailleurs
Dans SQL Server, tout travail assigné à être effectué ou exécuté est appelé une tâche. Les tâches sont différentes des SPID (Server Process IDs) de SQL Server. Une tâche peut être décomposée en travailleurs, qui encapsulent des threads ou des fibres et effectuent les tâches au sein de SQL Server.
Le planificateur
Lorsque SQL Server démarre, un planificateur est créé pour chaque processeur du système. Le planificateur récupère les travailleurs du pool de travailleurs pour les exécuter. Chaque planificateur est défini comme en ligne ou hors ligne en fonction de l’option de masque d’affinité du processeur.
Conclusion
Comprendre les concepts de processus, de threads et d’ordonnancement dans SQL Server est crucial pour optimiser les performances et la gestion des ressources. SQLOS joue un rôle essentiel dans la gestion de ces aspects et offre une couche de contrôle et de flexibilité.
Pour plus d’informations sur ce sujet, vous pouvez consulter les ressources suivantes :
- Tâches, threads de travail et threads de planification – Tout expliquer et DMVs
- Système d’exploitation SQL Server (SQLOS) – Architecture des tâches et des travailleurs
- Système d’exploitation SQL Server (SQLOS) – Planificateurs
- Système d’exploitation SQL Server (SQLOS) – Architecture de la mémoire
- Système d’exploitation SQL Server (SQLOS) – Architecture du processeur
- Système d’exploitation SQL Server (SOS) – Partie 1
- Un examen approfondi de la mémoire de SQL Server – Partie 1
Dans les prochains articles de blog, nous explorerons la ségrégation de la mémoire en termes de SQL Server.