Configurer des groupes de contrôle
Informations d'arrière-plan
Le noyau de la gestion de la charge des ressources openGauss est le pool de ressources. Pour configurer le pool de ressources, vous devez d'abord implémenter les paramètres du groupe de contrôle Cgroups dans l'environnement. Pour plus d'informations sur les principes de Cgroups, veuillez consulter le manuel du produit du système d'exploitation concerné.
Le groupe de contrôle de classe est le groupe de contrôle de niveau supérieur dans lequel s'exécute l'activité de base de données. Le groupe de contrôle de sous-classe par défaut "DefaultClass" est automatiquement généré lors du déploiement du cluster. Le groupe de contrôle Medium de DefaultClass contiendra les travaux déclenchés par le système en cours d'exécution. Ce groupe de contrôle n'autorise pas la modification des ressources et les travaux exécutés sur ce groupe de contrôle ne sont pas contrôlés par la gestion des ressources. Il est donc recommandé de créer une nouvelle sous-classe et sa charge de travail. control.group pour définir le ratio de ressources.
Conditions préalables
Familier avec l'utilisation des chapitres "Server Tools > gs_cgroup" et "Server Tools > gs_ssh" dans la Référence des outils.
Pas
illustrer:
- Dans openGauss, il est nécessaire d'effectuer la création, la mise à jour et la suppression du groupe de contrôle sur chaque nœud du cluster afin de contrôler l'ensemble des ressources du cluster. Par conséquent, dans les étapes suivantes, utilisez "Server Tools > gs_ssh" dans "Tool Reference " exécution de la commande.
- Les exigences de dénomination pour les groupes de contrôle sont les suivantes :
- Ni le groupe de contrôle de sous-classe ni le groupe de contrôle de charge de travail ne sont autorisés à contenir le caractère ":" dans le nom.
- Les groupes de contrôle portant le même nom ne peuvent pas être créés.
Créer un groupe de contrôle de sous-classe et un groupe de contrôle de charge de travail
1. Connectez-vous au nœud maître openGauss en tant qu'utilisateur du système d'exploitation omm.
2. Créez des groupes de contrôle de sous-classe nommés "class_a" et "class_b", et définissez le quota de ressources CPU sur 40 % et 20 % de la classe respectivement.
gs_ssh -c "gs_cgroup -c -S class_a -s 40"
gs_ssh -c "gs_cgroup -c -S class_b -s 20"
3. Créez des groupes de contrôle de charge de travail nommés "workload_a1" et "workload_a2" sous le groupe de contrôle de sous-classe "class_a". Les quotas de ressources CPU sont respectivement de 20 % et 60 % du groupe de contrôle "class_a".
gs_ssh -c "gs_cgroup -c -S class_a -G workload_a1 -g 20 "
gs_ssh -c "gs_cgroup -c -S class_a -G workload_a2 -g 60 "
4. Créez des groupes de contrôle de charge de travail nommés "workload_b1" et "workload_b2" sous le groupe de contrôle de sous-classe "class_b". Les quotas de ressources CPU sont respectivement de 50 % et 40 % du groupe de contrôle "class_b".
gs_ssh -c "gs_cgroup -c -S class_b -G workload_b1 -g 50 "
gs_ssh -c "gs_cgroup -c -S class_b -G workload_b2 -g 40 "
Mise à jour des quotas de ressources pour les groupes de contrôle
1. Mettez à jour le quota de ressources CPU du groupe de contrôle "class_a" à 30 %.
gs_ssh -c "gs_cgroup -u -S class_a -s 30"
2. Mettez à jour le quota de ressources CPU de "workload_a1" sous "class_a" à 30 % de "class_a".
gs_ssh -c "gs_cgroup -u -S class_a -G workload_a1 -g 30"
Remarque : La ressource CPU occupée par le groupe de contrôle de charge de travail ajusté "workload_a1" ne doit pas être supérieure au groupe de contrôle de sous-classe correspondant "class_a". De plus, ce nom ne peut pas être le nom par défaut du Cgroup Timeshare tel que "Low", "Medium", "High" ou "Rush".
supprimer le groupe de contrôle
gs_ssh -c "gs_cgroup -d -S class_a"
L'opération ci-dessus peut supprimer le groupe de contrôle "class_a".
Remarque : L'utilisateur root ou un utilisateur avec un accès root spécifie "-d" et "-U username" pour supprimer les Cgroups par défaut accessibles par l'utilisateur normal "username". Les utilisateurs ordinaires peuvent supprimer des groupes de classe C existants en spécifiant "-d" et "-S classname".
Afficher les informations du groupe de contrôle
1. Affichez les informations du groupe de contrôle dans le fichier de configuration.
gs_cgroup -p
Informations de configuration du groupe de contrôle
gs_cgroup -p
Top Group information is listed:
GID: 0 Type: Top Percent(%): 1000( 50) Name: Root Cores: 0-47
GID: 1 Type: Top Percent(%): 833( 83) Name: Gaussdb:omm Cores: 0-20
GID: 2 Type: Top Percent(%): 333( 40) Name: Backend Cores: 0-20
GID: 3 Type: Top Percent(%): 499( 60) Name: Class Cores: 0-20
Backend Group information is listed:
GID: 4 Type: BAKWD Name: DefaultBackend TopGID: 2 Percent(%): 266(80) Cores: 0-20
GID: 5 Type: BAKWD Name: Vacuum TopGID: 2 Percent(%): 66(20) Cores: 0-20
Class Group information is listed:
GID: 20 Type: CLASS Name: DefaultClass TopGID: 3 Percent(%): 166(20) MaxLevel: 1 RemPCT: 100 Cores: 0-20
GID: 21 Type: CLASS Name: class1 TopGID: 3 Percent(%): 332(40) MaxLevel: 2 RemPCT: 70 Cores: 0-20
Workload Group information is listed:
GID: 86 Type: DEFWD Name: grp1:2 ClsGID: 21 Percent(%): 99(30) WDLevel: 2 Quota(%): 30 Cores: 0-5
Timeshare Group information is listed:
GID: 724 Type: TSWD Name: Low Rate: 1
GID: 725 Type: TSWD Name: Medium Rate: 2
GID: 726 Type: TSWD Name: High Rate: 4
GID: 727 Type: TSWD Name: Rush Rate: 8
Group Exception information is listed:
GID: 20 Type: EXCEPTION Class: DefaultClass
PENALTY: QualificationTime=1800 CPUSkewPercent=30
GID: 21 Type: EXCEPTION Class: class1
PENALTY: AllCpuTime=100 QualificationTime=2400 CPUSkewPercent=90
GID: 86 Type: EXCEPTION Group: class1:grp1:2
ABORT: BlockTime=1200 ElapsedTime=2400
Les informations de configuration du groupe de contrôle vu dans l'exemple précédent sont présentées dans le tableau 1.
Tableau 1 Informations de configuration du groupe de contrôle
2. Affichez les informations du groupe de contrôle dans l'arborescence du système d'exploitation.
Exécutez la commande suivante pour interroger les informations sur l'arborescence du groupe de contrôle.
gs_cgroup -P
Les informations renvoyées sont les suivantes, où parts représente la valeur du quota de ressources dynamiques "cpu.shares" des ressources CPU dans le système d'exploitation, et cpus représente la valeur du quota de ressources dynamiques "cpuset.cpus" des ressources CPUSET dans le système d'exploitation, ce qui signifie que le groupe de contrôle peut Le nombre de cœurs utilisés.
Mount Information:
cpu:/dev/cgroup/cpu
blkio:/dev/cgroup/blkio
cpuset:/dev/cgroup/cpuset
cpuacct:/dev/cgroup/cpuacct
Group Tree Information:
- Gaussdb:wangrui (shares: 5120, cpus: 0-20, weight: 1000)
- Backend (shares: 4096, cpus: 0-20, weight: 400)
- Vacuum (shares: 2048, cpus: 0-20, weight: 200)
- DefaultBackend (shares: 8192, cpus: 0-20, weight: 800)
- Class (shares: 6144, cpus: 0-20, weight: 600)
- class1 (shares: 4096, cpus: 0-20, weight: 400)
- RemainWD:1 (shares: 1000, cpus: 0-20, weight: 100)
- RemainWD:2 (shares: 7000, cpus: 0-20, weight: 700)
- Timeshare (shares: 1024, cpus: 0-20, weight: 500)
- Rush (shares: 8192, cpus: 0-20, weight: 800)
- High (shares: 4096, cpus: 0-20, weight: 400)
- Medium (shares: 2048, cpus: 0-20, weight: 200)
- Low (shares: 1024, cpus: 0-20, weight: 100)
- grp1:2 (shares: 3000, cpus: 0-5, weight: 300)
- TopWD:1 (shares: 9000, cpus: 0-20, weight: 900)
- DefaultClass (shares: 2048, cpus: 0-20, weight: 200)
- RemainWD:1 (shares: 1000, cpus: 0-20, weight: 100)
- Timeshare (shares: 1024, cpus: 0-20, weight: 500)
- Rush (shares: 8192, cpus: 0-20, weight: 800)
- High (shares: 4096, cpus: 0-20, weight: 400)
- Medium (shares: 2048, cpus: 0-20, weight: 200)
- Low (shares: 1024, cpus: 0-20, weight: 100)
- TopWD:1 (shares: 9000, cpus: 0-20, weight: 900)
3. Obtenez les informations de configuration du groupe de contrôle via la vue système.
a. Utilisez gsql pour vous connecter à la base de données.
b. Obtenez les informations de configuration de tous les groupes de contrôle du système.
openGauss=# SELECT * FROM gs_all_control_group_info;
Créer un pool de ressources
Informations d'arrière-plan
openGauss prend en charge la division des ressources hôtes en créant des pools de ressources. Une fois la gestion de la charge des ressources activée, seule l'utilisation du pool de ressources par défaut ne peut pas répondre aux demandes de l'entreprise en matière de gestion de la charge des ressources. De nouveaux pools de ressources doivent être créés selon les besoins pour réaffecter les ressources système afin de répondre aux besoins réels de l'entreprise en matière de gestion fine du système. Ressources. Les caractéristiques des pools de ressources communes sont présentées dans le tableau 1.
Tableau 1 Caractéristiques des pools de ressources communes
Classification du pool de ressources | Caractéristiques |
---|---|
Pool de ressources communes (scénario courant) | 1. Associez le groupe de contrôle de la charge de travail. Et il ne doit y avoir aucun pool de ressources de groupe associé à la sous-classe correspondant au groupe de contrôle. Autrement dit, si un groupe de contrôle d'association de pool de ressources métier 'class1:wd' est créé, il ne doit pas y avoir d'association de pool de ressources de groupe 'class1'. 2. La valeur par défaut de mem_percent est 0 % et il n'y a pas de limite à ce que la somme de mem_percent soit inférieure à 100 %. |
Une fois la fonction de gestion de la charge des ressources activée, le système crée automatiquement un default_pool. Lorsqu'une session ou un utilisateur ne spécifie pas de pool de ressources associé, il sera associé au default_pool par défaut. default_pool est lié par défaut au groupe de contrôle DefaultClass:Medium et ne limite pas le nombre de services simultanés qui lui sont associés. Les propriétés détaillées de default_pool sont présentées dans le tableau 2.
Tableau 2 propriétés default_pool
Les attributs | valeur d'attribut | illustrer |
---|---|---|
nom_respool | default_pool | Nom du pool de ressources. |
mem_percent | 100 | Pourcentage maximal de mémoire occupée. |
affinité_cpu | -1 | Affinité CPU, paramètres réservés. |
groupe de contrôle | Classe par défaut : moyen | Groupe de contrôle associé au pool de ressources. |
active_statements | -1 | Nombre maximal de simultanéités autorisées par le pool de ressources. -1 signifie simultanéité illimitée. |
max_dop | 1 | Une fois SMP activé, la simultanéité d'exécution de l'opérateur est réservée. |
memory_limit | 8 Go | La limite supérieure d'utilisation de la mémoire, paramètres réservés. |
parents | 0 | OID du pool de ressources parent. |
io_limits | 0 | La limite supérieure du nombre de déclenchements d'E/S par seconde. L'unité de stockage de ligne est de 10 000 fois/s et l'unité de stockage de colonne est de fois/s. 0 signifie aucun contrôle. |
io_priority | Rien | Lorsque le taux d'utilisation des E/S atteint 90 %, il s'agit du niveau de priorité associé à une forte consommation de travaux d'E/S pour la gestion et le contrôle des ressources d'E/S. Aucun signifie aucun contrôle. |
groupe de nœuds | installation | Nom du cluster logique où se trouve le pool de ressources. |
est_étranger | F | Les pools de ressources ne sont pas utilisés pour les utilisateurs en dehors du cluster logique. |
Remarque : openGauss n'autorise pas la modification du paramètre default_pool.
Conditions préalables
Vous êtes familiarisé avec la syntaxe de CREATE RESOURCE POOL, ALTER RESOURCE POOL et DROP RESOURCE POOL.
Opération en cours
Créer un pool de ressources
1. Utilisez gsql pour vous connecter à la base de données.
2. Créez un pool de ressources de groupe associé au groupe de contrôle de sous-classe spécifié. Par exemple, ce qui suit : Le pool de ressources de groupe nommé "resource_pool_a" est associé au groupe de contrôle "class_a".
openGauss=# CREATE RESOURCE POOL resource_pool_a WITH (control_group='class_a');
openGauss=# CREATE RESOURCE POOL resource_pool_b WITH (control_group='class_b');
CREATE RESOURCE POOL
3. Créez un pool de ressources métier et associez-le au groupe de contrôle de charge de travail spécifié. Par exemple, ce qui suit : le pool de ressources de service nommé "resource_pool_a1" est associé au groupe de contrôle "workload_a1".
openGauss=# CREATE RESOURCE POOL resource_pool_a1 WITH (control_group='class_a:workload_a1');
openGauss=# CREATE RESOURCE POOL resource_pool_a2 WITH (control_group='class_a:workload_a2');
openGauss=# CREATE RESOURCE POOL resource_pool_b1 WITH (control_group='class_b:workload_b1');
openGauss=# CREATE RESOURCE POOL resource_pool_b2 WITH (control_group='class_b:workload_b2');
CREATE RESOURCE POOL
illustrer:
- Si le groupe de contrôle associé n'est pas spécifié lors de la création d'un pool de ressources, le pool de ressources sera associé au groupe de contrôle par défaut ("Medium" groupe de contrôle Timeshare sous le groupe de contrôle DefaultClass).
- La valeur de control_group est sensible à la casse et doit être spécifiée entre guillemets simples.
- Si l'utilisateur de la base de données spécifie la chaîne représentée par le groupe de contrôle Timeshare, c'est-à-dire "Rush", "High", "Medium" ou "Low", comme la chaîne de control_group est "High", cela signifie que le Le pool de ressources est affecté au groupe de contrôle DefaultClass sous le groupe de contrôle "High" Timeshare.
- control_group peut spécifier un utilisateur pour créer un groupe de contrôle de charge de travail, à savoir 'class1:wd', ou il peut avoir un niveau de groupe de contrôle, par exemple : 'class1:wd:2', ce niveau doit être compris entre 1 et 10 , mais ce niveau ne fera aucune distinction. Dans les anciennes versions, il était permis de créer des groupes de contrôle de charge de travail portant le même nom et de les différencier par niveau. Cependant, après la mise à niveau de la nouvelle version, il n'est pas autorisé de créer un groupe de contrôle portant le même nom. Si un utilisateur a créé un groupe de contrôle de charge de travail portant le même nom dans l'ancienne version, le niveau ne sera pas distingué lors de l'utilisation. Cela peut entraîner le problème que le groupe de contrôle n'est pas clairement utilisé. Les utilisateurs peuvent supprimer eux-mêmes l'ancien groupe de contrôle portant le même nom pour effacer l'utilisation du groupe de contrôle.
Gérer les pools de ressources
Modifiez les propriétés du pool de ressources. Par exemple, ce qui suit : Modifiez le groupe de contrôle associé au pool de ressources "resource_pool_a2" en "class_a:workload_a1" (en supposant que class_a:workload_a1 n'est pas associé à d'autres pools de ressources).
openGauss=# ALTER RESOURCE POOL resource_pool_a2 WITH (control_group="class_a:workload_a1");
ALTER RESOURCE POOL
supprimer le pool de ressources
Supprimez le pool de ressources. Par exemple, supprimez le pool de ressources "resource_pool_a2" ci-dessous.
openGauss=# DROP RESOURCE POOL resource_pool_a2;
DROP RESOURCE POOL
illustrer:
- Si un rôle est déjà associé au pool de ressources, il ne peut pas être supprimé.
- Dans un scénario multilocataire, si vous supprimez un pool de ressources de groupe, tous ses pools de ressources métier seront supprimés. Un pool de ressources ne peut être supprimé que lorsqu'aucun utilisateur n'est associé.
Afficher des informations sur les pools de ressources
Remarque :
1. Il n'est pas permis d'utiliser INSERT, UPDATE, DELETE, TRUNCATE pour faire fonctionner la table système pg_resource_pool de gestion de la charge des ressources.
2. Il n'est pas permis de modifier les attributs memory_limit et cpu_affinity du pool de ressources.
- Afficher les informations sur tous les pools de ressources du cluster actuel.
openGauss=# SELECT * FROM PG_RESOURCE_POOL;
respool_name | mem_percent | cpu_affinity | control_group | active_statements | max_dop | memory_limit | parentid | io_limits | io_priority | nodegroup | is_foreign | max_worker
------------------+-------------+--------------+---------------------+-------------------+---------+--------------+----------+-----------+--------------+--------------+------------
default_pool | 100 | -1 | DefaultClass:Medium | -1 | 1 | 8GB | 0 | 0 | None | installation | f |
resource_pool_a | 20 | -1 | class_a | 10 | 1 | 8GB | 0 | 0 | None | installation | f |
resource_pool_b | 20 | -1 | class_b | 10 | 1 | 8GB | 0 | 0 | None | installation | f |
resource_pool_a1 | 20 | -1 | class_a:workload_a1 | 10 | 1 | 8GB | 16970 | 0 | None | installation | f |
resource_pool_a2 | 20 | -1 | class_a:workload_a2 | 10 | 1 | 8GB | 16970 | 0 | None | installation | f |
resource_pool_b1 | 20 | -1 | class_b:workload_b1 | 10 | 1 | 8GB | 16971 | 0 | None | installation | f |
resource_pool_b2 | 20 | -1 | class_b:workload_b2 | 10 | 1 | 8GB | 16971 | 0 | None | installation | f |
(7 rows)
- Afficher les informations de groupe de contrôle associées à un pool de ressources. Pour plus de détails, reportez-vous à la fonction gs_control_group_info(pool text) dans le chapitre Fonctions statistiques.
Dans la commande suivante, "resource_pool_a1" est le nom du pool de ressources.
openGauss=# SELECT * FROM gs_control_group_info('resource_pool_a1');
name | class | workload | type | gid | shares | limits | rate | cpucores
---------------------+---------+-------------+-------+-----+--------+--------+------+----------
class_a:workload_a1 | class_a | workload_a1 | DEFWD | 87 | 30 | 0 | 0 | 0-3
(1 row)
Tableau 3 Attributs gs_control_group_info
Les attributs | valeur d'attribut | illustrer |
---|---|---|
Nom | classe_a : charge de travail_a1 | nom de la classe et de la charge de travail |
classe | Classe A | Nom du groupe de contrôle de la classe |
charge de travail | charge de travail_a1 | Nom du groupe de contrôle de la charge de travail |
taper | DEFWD | Type de groupe de contrôle (Top, CLASS, BAKWD, DEFWD, TSWD) |
gid | 87 | identifiant du groupe de contrôle |
actions | 30 | Le pourcentage de ressources CPU du nœud parent |
limites | 0 | Pourcentage des cœurs de processeur du nœud parent |
taux | 0 | Ratio de distribution en multipropriété |
cœurs de processeur | 0-3 | Nombre de cœurs de processeur |