Aperçu de la technologie fine de gestion et de contrôle des ressources de GaussDB

Cet article est partagé par Huawei Cloud Community « [GaussTech Express] Interprétation technique de la gestion et du contrôle des ressources à granularité fine », auteur : base de données GaussDB.

arrière-plan

Le contrôle et l'isolation des ressources au sein des clusters de bases de données sont des exigences de longue date des entreprises clientes. En tant que base de données distribuée au niveau de l'entreprise, Huawei Cloud GaussDB s'est engagé à répondre aux besoins de gestion des entreprises pour les grands clusters de bases de données.

Les ressources que la base de données peut gérer incluent les ressources informatiques et les ressources de stockage. Les ressources informatiques incluent le processeur, la mémoire, les E/S et les ressources de stockage réseau incluent l'espace de stockage de données, l'espace de stockage de journaux et les fichiers temporaires.

Du point de vue de l'utilisateur, la gestion et le contrôle des ressources garantissent l'engagement envers les accords de niveau de service en définissant des seuils ou des limites de priorité sur l'utilisation des ressources, tout en respectant également l'isolation des ressources entre les différents utilisateurs et en atteignant l'objectif de partage des ressources de base de données entre plusieurs locataires.

Du point de vue du système, l'introduction de méthodes de surveillance et de contrôle des ressources peut atteindre l'objectif d'une utilisation rationnelle des ressources dans des conditions contrôlables, éviter l'épuisement des ressources et empêcher le système d'arrêter la réponse et de planter. La priorité des tâches peut garantir le bon fonctionnement des tâches, empêcher une tâche d'affecter d'autres tâches lorsque son utilisation des ressources est trop élevée et maximiser l'utilisation des ressources lorsque les ressources sont abondantes. De plus, il peut également répondre aux attentes externes et garantir une utilisation maximale des ressources système. En contrôlant le travail, nous pouvons garantir que le travail est stable et éviter tout comportement incontrôlable lors de son exécution.

Afin de résoudre les objectifs ci-dessus, la base de données Huawei Cloud GaussDB fournit une solution pour une gestion et un contrôle précis des ressources dans le cluster de bases de données - une gestion et un contrôle précis des ressources. Cette solution fournit des capacités de gestion et de contrôle correspondantes à différentes granularités de contrôle (telles que le niveau utilisateur, le niveau session et le niveau instruction) et différentes dimensions de contrôle (CPU, mémoire et E/S). Les utilisateurs peuvent adopter des dimensions de contrôle et une granularité de contrôle appropriées en fonction de leurs propres besoins commerciaux pour atteindre les objectifs de contrôle et d'isolation des ressources, et répondre aux besoins de contrôle des ressources dans différents scénarios.

Architecture technologique

Examinons d’abord l’architecture technique et les principes de fonctionnement de la gestion et du contrôle précis des ressources :

Diapositive 1.PNG

Comme vous pouvez le voir sur l'image ci-dessus, GaussDB fournit un module de pool de ressources pour compléter la logique de gestion et de contrôle du CPU, de la mémoire et des E/S. Les utilisateurs peuvent créer un pool de ressources et spécifier les partages de processeur, de mémoire et d'E/S qu'il peut utiliser, et lier le pool de ressources à l'utilisateur. Ensuite, le travail initié par l'utilisateur sera soumis à une gestion et à un contrôle des ressources en temps réel pendant le fonctionnement des modules d'optimisation et d'analyse du noyau de base de données, du moteur d'exécution et du moteur de stockage pour garantir que son processeur, sa mémoire et ses E/S sont dans les limites. portée du pool de ressources correspondant.
 
Supposons que la société A déploie une instance GaussDB et que trois applications différentes accèdent à l'instance en même temps, telles que les activités OLTP, les activités de rapports et d'autres activités faiblement prioritaires. La société A espère gérer et contrôler raisonnablement les ressources des trois entreprises afin que le système puisse fonctionner sans problème tout en garantissant une utilisation maximale des ressources. Nous pouvons utiliser l'administrateur système pour exécuter la commande suivante afin de définir le ratio de partage des ressources pour les trois utilisateurs professionnels à 50:30:10, et les 10 % restants sont réservés au système.
 
Voici seulement des exemples d'utilisation simples. La signification spécifique de chaque paramètre sera expliquée en détail dans les chapitres suivants.
 
créer un pool de ressources respool_tp avec (control_group="cgroup_tp", max_dynamic_memory="5GB", max_shared_memory="5GB", io_limits=50, io_priority="High");
modifier le rôle tp_user PISCINE DE RESSOURCES 'respool_tp' ;

créer un pool de ressources respool_report avec (control_group="cgroup_report", max_dynamic_memory="3GB", max_shared_memory="3GB", io_limits=30, io_priority="Medium");
modifier le rôle report_user RESOURCE POOL 'respool_report' ;

créer un pool de ressources respool_other avec (control_group="cgroup_other", max_dynamic_memory="1GB", max_shared_memory="1GB", io_limits=10, io_priority="Low");
modifier le rôle other_user POOL DE RESSOURCES 'respool_other';
Après les opérations ci-dessus, lorsque les activités OLTP, les activités de rapports et d'autres activités de faible priorité utilisent tp_user, report_user et other_user pour se connecter à GaussDB afin d'exécuter des tâches, ces trois entreprises seront contrôlées par les pools de ressources correspondants respool_tp, respool_report et respool_other. ressource En cas de conflit, il est garanti que les trois entreprises peuvent utiliser respectivement 50 %, 30 % et 10 % des ressources du cluster GaussDB.

capacités clés

Après avoir compris l'architecture globale et l'utilisation de la gestion et du contrôle précis des ressources, examinons ses fonctionnalités clés et la valeur commerciale que ces fonctionnalités peuvent apporter aux clients.

Contrôle du processeur

La gestion et le contrôle du processeur de GaussDB sont basés sur la granularité du pool de ressources pour la gestion et le contrôle des ressources utilisateur. Chaque pool de ressources est lié à un groupe de contrôle, et la gestion et le contrôle du processeur sont implémentés via le groupe de contrôle (Control Group, CGroup). CGroup est un mécanisme fourni par le noyau Linux pour limiter, enregistrer et isoler les ressources physiques (telles que le processeur, la mémoire, les E/S, etc.) utilisées par les groupes de processus.
 
En tenant compte de l'isolement et de la configurabilité des systèmes de base de données, des utilisateurs et des tâches dans différentes dimensions, GaussDB utilise les caractéristiques hiérarchiques des groupes de contrôle pour construire un modèle conforme au scénario de base de données (voir la figure ci-dessous), qui répond aux caractéristiques clés de SLA du client et prend en charge trois dimensions d'isolation et de contrôle hiérarchiques : isolation entre les programmes de base de données et les programmes non liés à la base de données, isolation entre les threads de sauvegarde résidents de la base de données et les threads de travail d'exécution, et isolation entre plusieurs utilisateurs de base de données.

Diapositive 2.PNG

Le groupe de contrôle GaussDB peut définir le pourcentage de CPU et la limite supérieure du nombre de cœurs. Le nœud racine est responsable du contrôle du partage de CPU disponible pour le processus GaussDB ; le groupe de contrôle Backend est responsable du contrôle du partage de CPU du résident de la base de données ; des threads d'arrière-plan (Vacuum, DefaultBackend) ; le groupe de contrôle de classe est responsable du contrôle. Le partage CPU du thread de travail de l'utilisateur (UserClass1, UserClass2,...UserClassN) peut également être créé ; au sein du groupe de contrôle Classe pour un contrôle plus précis.
 
Poursuivant l'exemple ci-dessus, nous utilisons l'outil CGroup fourni par GaussDB pour créer des groupes de contrôle pour les activités OLTP, les activités de reporting et d'autres activités faiblement prioritaires de la société A, avec des ratios d'allocation CPU de 50 %, 30 % et 10 %.
 
gs_cgroup -c -S cgroup_tp -s 50 ;
gs_cgroup -c -S cgroup_report -s 30 ;
gs_cgroup -c -S cgroup_other -s 10;
L'exécution de la commande ci-dessus signifie que nous avons créé avec succès trois groupes de contrôle. Nous pouvons ensuite spécifier le nom du groupe de contrôle lors de la création d'un pool de ressources. Les tâches lancées par les utilisateurs liés au pool de ressources seront contrôlées par le partage CPU correspondant du groupe de contrôle.
 
Il y a deux problèmes auxquels vous devez prêter attention lors du contrôle du processeur avec CGroup :
 
Premièrement, si le CPU d'un thread doit être contrôlé par un CGroup, alors l'API système du CGroup doit être exécutée pour lier le CGroup correspondant au thread, ce qui est une opération qui prend du temps ;
Deuxièmement, l'effet de contrôle du processeur de CGroup est optimal lorsque le nombre de threads est proportionnel au processeur.
 
Sur la base de ces problèmes, GaussDB a proposé le concept de groupe de threads. Chaque pool de ressources correspond à un groupe de threads, et les threads du groupe de threads sont liés au CGroup correspondant au pool de ressources. Dans le même temps, GaussDB ajustera le nombre de threads dans chaque groupe de threads pour être cohérent avec la part CPU du CGroup correspondant. Voir la figure ci-dessous pour plus de détails :
Diapositive 3.PNG
Chaque travail lancé par l'utilisateur sera distribué aux threads du groupe de threads correspondant pour exécution. Étant donné que le thread a été lié au nœud Cgroup correspondant, le système d'exploitation terminera la gestion et le contrôle du processeur pendant la planification des threads.
 
GaussDB fournit un mécanisme utilisateur à deux niveaux. Le pool de ressources lié au groupe de contrôle de classe est appelé pool de ressources de groupe, et les utilisateurs correspondants sont des utilisateurs de groupe. Le pool de ressources lié au groupe de contrôle de charge de travail est appelé pool de ressources d'entreprise. les utilisateurs correspondants sont des utilisateurs professionnels. Les utilisateurs groupe correspondent généralement à un service, tandis que les utilisateurs métier correspondent aux différents métiers de ce service. La part des ressources de chaque dimension de ressources dans le pool de ressources d'entreprise dépassera-t-elle la part du pool de ressources du groupe auquel elle appartient, atteignant ainsi l'objectif de gestion et de contrôle des ressources à deux niveaux.
 
Le contrôle du processeur fournit également un GUC nommé session_respool pour limiter le processeur d'une seule session afin de ne pas dépasser la limite de processeur du pool de ressources correspondant.

Gestion de la mémoire

GaussDB fournit la gestion et le contrôle de la mémoire dynamique et du cache partagé lors de la création d'un pool de ressources, vous pouvez spécifier max_dynamic_memory et max_shared_memory pour compléter les paramètres de seuil de la mémoire dynamique et du cache partagé respectivement.
 
La gestion dynamique de la mémoire ne modifie pas son mécanisme d'allocation de ressources mémoire d'origine. Elle ajoute simplement une couche de jugement logique avant d'allouer de la mémoire pour tenir compte de la mémoire excessivement allouée, et vérifie si la valeur comptable atteint la limite supérieure de la mémoire autorisée et complète la gestion de la mémoire. contrôle. Lorsque la mémoire dynamique dépasse la limite supérieure, la tâche ne parvient pas à demander de la mémoire. Lorsqu'un travail se termine, la mémoire demandée par le travail sera libérée pour garantir que les autres travaux peuvent s'exécuter normalement. De la même manière, lorsque le cache partagé utilisé par une tâche dépasse la limite supérieure du pool de ressources et que vous postulez à nouveau pour le cache partagé, vous devez d'abord libérer le cache partagé que vous avez déjà occupé, tel que BufferPool When. le travail s'applique à une page, la page qu'elle a déjà occupée sera éliminée. Les pages restantes après élimination sont disponibles pour votre utilisation continue.
 
En plus du contrôle granulaire de la mémoire par l'utilisateur, GaussDB fournit également deux paramètres GUC, session_max_dynamic_memory et query_max_mem, pour effectuer le contrôle de la mémoire dynamique au niveau de la session et de l'instruction. Lorsque la mémoire dynamique utilisée par une session ou une instruction atteint le seuil GUC, le travail est exécuté. ne parvient pas à demander de la mémoire.

Contrôle des E/S

Les E/S de lecture et d'écriture du disque de GaussDB sont toutes complétées par un thread d'arrière-plan. Ce fil ne peut pas distinguer le propriétaire de la page. Il écrit uniquement sur le disque par ordre chronologique et ne peut pas contrôler différentes utilisations des E/S pour différents utilisateurs. Sur cette base, considérez que la fonction de gestion et de contrôle des E/S utilise des statistiques d'E/S logiques pour contrôler et limiter les E/S de lecture et d'écriture des utilisateurs ou des sessions. Un nombre d'E/S logiques est ajouté entre le thread de travail et le cache partagé pour les tables de stockage de lignes. tous les 6000 (peut être transmis io_control_unit GUC (modifié par GUC) est compté comme une IO. Lorsque le nombre de requêtes IO de lecture et d'écriture générées en une seconde dépasse le seuil défini par le pool de ressources, la requête IO sera ajoutée à une attente file d'attente du thread d'arrière-plan, et le thread d'arrière-plan répondra à la file d'attente. Ces requêtes IO sont surveillées, et lorsque leur temps d'attente remplit les conditions, ces requêtes IO sont réveillées de la file d'attente.
 
GaussDB prend en charge deux modes de gestion et de contrôle des ressources IO. Le mode numérique en ligne contrôle les ressources IO en définissant une valeur fixe pour déclencher les temps d'IO ; le mode prioritaire signifie que lorsque l'utilisation actuelle du disque atteint plus de 95 % pendant une longue période, toutes les tâches sont exécutées. ne peut pas être Lorsqu'ils atteignent le mode de valeur en ligne, les utilisateurs peuvent contrôler les IO via ce mode pour contrôler le rapport de priorité de la tâche qui a initialement déclenché les IO. La priorité comprend trois niveaux : Élevé, Moyen et Faible.
 

4.PNG

En continuant à partir de l'exemple ci-dessus, nous créons des pools de ressources pour l'activité OLTP, l'activité de reporting et d'autres activités faiblement prioritaires de la société A, et définissons les pondérations IO sur Élevé, Moyen et Faible respectivement. Ensuite, l'entreprise OLTP peut utiliser 50 % des demandes d'E/S pour lire ou écrire des données dans le BufferPool, et un petit nombre de demandes d'E/S entreront dans la file d'attente pour attendre ; l'entreprise de reporting peut utiliser 20 % des demandes d'E/S pour lire ; ou écrire des données dans le BufferPool. Plus de demandes d'E/S entreront dans la file d'attente pour attendre ; d'autres entreprises de faible priorité peuvent utiliser 10 % des demandes d'E/S pour lire ou écrire des données dans le BufferPool, et davantage de demandes d'E/S entreront dans la file d'attente pour attendre. attendez ; le thread de surveillance en arrière-plan parcourra périodiquement la file d'attente d'E/S et réveillera les demandes d'E/S qui respectent le temps d'attente requis pour lire ou écrire des données à partir du BufferPool.
 
En plus de prendre en charge le contrôle IO granulaire de l'utilisateur, GaussDB prend également en charge la définition des paramètres GUC au niveau de la session io_limits et io_priority pour terminer le contrôle IO des tâches autorisées sur une session spécifiée.

Nombre de connexions et gestion de la concurrence

GaussDB fournit un contrôle du numéro de connexion et un contrôle de concurrence basé sur des pools de ressources, lors de la création d'un pool de ressources, vous pouvez spécifier max_connections et max_concurrency pour compléter les paramètres du nombre de connexions et de la concurrence respectivement. Vous pouvez utiliser le SQL suivant pour fournir les ressources correspondant à. les trois métiers de la société A dans l'exemple précédent. Le pool complète la gestion et le contrôle du nombre de connexions et du nombre de simultanéités :
 
modifier le pool de ressources respool_tp avec (max_connections=-1, max_concurrency = -1) ;
modifier le pool de ressources respool_report avec (max_connections=200, max_concurrency = 100) ;
modifier le pool de ressources respool_other avec (max_connections=100, max_concurrency = 50) ;
Une fois le SQL ci-dessus exécuté avec succès, il prendra effet en temps réel. Le nombre de connexions et la simultanéité de l'activité OLTP de la société A ne sont pas limités. Elle peut l'utiliser tant que le cluster dispose de ressources ; le nombre maximum de connexions pour l'activité de reporting est de 200 et le nombre maximum de connexions pour les autres activités de faible priorité. business est de 100. Lorsque ces deux entreprises Lorsque le nombre de connexions établies dépasse cette valeur, le noyau GaussDB interceptera automatiquement et signalera que le nombre actuel de connexions est insuffisant et que le lien échoue, le nombre maximum de simultanéités pour l'entreprise de rapport est de 100 ; , et le nombre maximum de simultanéités pour les autres entreprises à faible priorité est de 50. Lorsque ces deux entreprises Lorsque le nombre de tâches lancées en même temps dépasse cette valeur, les tâches en excès entreront dans la file d'attente et GaussDB ne le réveillera pas. continuez à exécuter le travail jusqu'à ce que les travaux existants soient terminés.

Gestion et contrôle de l'espace de stockage

La gestion et le contrôle de l'espace de stockage sont utilisés pour limiter les quotas d'espace que différents utilisateurs peuvent utiliser afin d'éviter que l'ensemble de l'activité de base de données ne soit bloqué en raison d'une utilisation excessive de l'espace de stockage par un seul utilisateur. GaussDB gère et contrôle les ressources de stockage en spécifiant la taille de l'espace de stockage lors de la création d'un utilisateur.
 
Les ressources d'espace de stockage sont divisées en trois types : l'espace table permanent (Perm Space), l'espace table temporaire (Temp Space) et l'espace disque inférieur de l'opérateur (Spill Space).
 
Vous pouvez utiliser le SQL suivant pour compléter la gestion et le contrôle de l'espace disque pour les utilisateurs correspondant aux trois activités de la société A dans l'exemple précédent.
 
modifier l'utilisateur tp_user PERM SPACE '200G' TEMP SPACE '20G' SPILL SPACE '20G';
modifier l'utilisateur report_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
modifier l'utilisateur other_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
 
La gestion de l'espace de stockage prend en charge la gestion de l'espace de stockage pour les utilisateurs de groupe et les utilisateurs professionnels. Lorsque le groupe d'utilisateurs correspondant à l'utilisateur professionnel a des restrictions d'espace, l'espace de l'utilisateur professionnel est également limité par la limite d'espace du groupe d'utilisateurs. Après avoir spécifié la taille de l'espace de stockage, toutes les opérations d'écriture effectuées par l'utilisateur sur le DN augmenteront l'espace utilisé par l'utilisateur, et les opérations de suppression diminueront l'espace utilisé par l'utilisateur. CN obtiendra périodiquement l'espace total utilisé à partir du DN et calculera l'espace utilisé. espace utilisé par l'utilisateur. L'espace est évalué lorsque la valeur maximale est dépassée, le travail d'écriture est annulé (insérer/créer une table en tant que/copie) et les travaux d'écriture suivants signalent une erreur et se terminent.

Démonstration des fonctionnalités

Démonstration des fonctionnalités Ici, nous démontrerons simplement l'effet du contrôle du processeur pour tout le monde, car le processeur a le plus grand impact sur l'entreprise.
 
Créez deux pools de ressources et définissez respectivement 20 % et 60 % du processeur, puis utilisez deux utilisateurs liés aux pools de ressources pour commencer à gérer l'entreprise. Observez l’utilisation réelle du processeur.

1. Créez un groupe de contrôle :

gs_cgroup -c -S classe1 -s 20 ;
gs_cgroup -c -S classe2 -s 60 ;

2. Créez un pool de ressources :

CRÉER UN POOL DE RESSOURCES xuuer_pool with(control_group = "class1");
CRÉER UN POOL DE RESSOURCES xyuser1_pool with(control_group = "class2");

3. Créez un pool de ressources lié à l'utilisateur :

créer le rôle user1 POOL DE RESSOURCES 'xuuer_pool' ;
créer le rôle user2 RESOURCE POOL 'xyuser1_pool' ;
4. Observez l'état du processeur du système via Top, et la gestion et le contrôle précis des ressources fournissent la fonction gs_wlm_respool_cpu_info pour observer l'état du processeur en temps réel de chaque pool de ressources.

Diapositive 5.PNG

Comme le montre la figure ci-dessus, on peut voir que le processeur système initial est inactif et la vue de surveillance du processeur du pool de ressources montre également que l'utilisation du processeur est de 0. Laissez l'utilisateur 1 démarrer l'exécution des services. On peut voir que le processeur du système est occupé par certains services. L'interrogation de la vue de surveillance du processeur du pool de ressources montre que l'utilisateur 1 peut utiliser 80 % du processeur. À ce stade, laissez l'utilisateur 2 commencer également à exécuter ses activités.L'observation montre que le processeur du système est entré dans un état occupé. L'interrogation de la fonction système de surveillance des ressources CPU du pool de ressources montre que l'utilisation du processeur de l'utilisateur 1 commence à diminuer et que celle de l'utilisateur 2 commence à augmenter. .

Triez l'utilisation du processeur des deux utilisateurs et tracez le graphique courbe comme indiqué ci-dessous. On peut voir que l'utilisation du processeur de l'utilisateur 1 et de l'utilisateur 2 finira par s'équilibrer à un état de 3 : 1, ce qui est cohérent avec les 20 % et 60. Paramètres dans le groupe de contrôle CGroup correspondant au pourcentage du pool de ressources, obtenant l'effet de contrôle du processeur.

Diapositive 6.PNG

Résumer

La fonctionnalité fine de gestion et de contrôle des ressources prend actuellement en charge les systèmes centralisés et distribués. La gestion et le contrôle des ressources informatiques distribuées signifient que chaque nœud contrôle indépendamment les ressources de son propre nœud, tandis que la gestion et le contrôle des ressources de stockage sont gérés dans leur ensemble à partir de la dimension du cluster.

La gestion et le contrôle précis des ressources servent de base à l'isolation des ressources multi-locataires, permettant une division et un contrôle précis des ressources et résolvant le problème de l'indisponibilité du cluster causée par des ressources insuffisantes dans des scénarios de charge élevée. Cette fonctionnalité convient aux scénarios dans lesquels l'isolation des données n'est pas sensible, mais l'isolation des ressources est requise pour différentes entreprises. Si les clients ont des exigences à la fois en matière d'isolation des ressources et d'isolation des données, vous pouvez prêter attention à la fonctionnalité de base de données multi-tenant que nous partagerons plus tard !

 

Cliquez pour suivre et découvrir les nouvelles technologies de Huawei Cloud dès que possible~

Les lycéens créent leur propre langage de programmation open source en guise de cérémonie de passage à l'âge adulte - commentaires acerbes des internautes : S'appuyant sur la défense, Apple a publié la puce M4 RustDesk. Les services nationaux ont été suspendus en raison d'une fraude généralisée. À l'avenir, il envisage de produire un jeu indépendant sur la plateforme Windows Taobao (taobao.com) Redémarrer le travail d'optimisation de la version Web, destination des programmeurs, Visual Studio Code 1.89 publie Java 17, la version Java LTS la plus couramment utilisée, Windows 10 a un part de marché de 70 %, Windows 11 continue de décliner Open Source Daily | Google soutient Hongmeng pour prendre le relais ; l'anxiété et les ambitions de Microsoft ont fermé la plate-forme ouverte ;
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4526289/blog/11105586
conseillé
Classement