Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Tutoriel : Configuration des files d'attente pour la gestion manuelle de la charge de travail (WLM)
Avec Amazon Redshift, vous pouvez configurer des files d'attente de gestion manuelle de la charge de travail (WLM) afin de hiérarchiser et d'allouer des ressources pour différents types de requêtes et d'utilisateurs. Les WLM files d'attente manuelles vous permettent de contrôler les paramètres de mémoire et de simultanéité pour des files d'attente spécifiques, afin de garantir que les charges de travail critiques reçoivent les ressources nécessaires tout en empêchant les requêtes de faible priorité de monopoliser le système. Les sections suivantes vous guident tout au long du processus de création et de configuration de WLM files d'attente manuelles dans Amazon Redshift afin de répondre à vos exigences en matière de gestion de charge de travail.
Présentation
Nous vous recommandons de configurer la gestion automatique de la charge de travail (WLM) dans Amazon Redshift. Pour plus d'informations sur le mode automatiqueWLM, consultezGestion de la charge de travail. Toutefois, si vous avez besoin de plusieurs WLM files d'attente, ce didacticiel explique le processus de configuration de la gestion manuelle de la charge de travail (WLM) dans Amazon Redshift. En configurant manuellementWLM, vous pouvez améliorer les performances des requêtes et l'allocation des ressources dans votre cluster.
Amazon Redshift achemine les requêtes des utilisateurs vers les files d'attente en vue de leur traitement. WLMdéfinit la manière dont ces requêtes sont acheminées vers les files d'attente. Par défaut, Amazon Redshift possède deux files d'attente disponibles pour les requêtes : une pour les superutilisateurs et une pour les utilisateurs. La file d'attente des super-utilisateurs ne peut pas être configurée et ne peut traiter qu'une requête à la fois. Vous devez réserver cette file d'attente à des fins de dépannage uniquement. La file d'attente des utilisateurs peut traiter jusqu'à cinq requêtes à la fois, mais vous pouvez configurer ce nombre en modifiant le niveau de concurrence de la file d'attente si nécessaire.
Lorsque vous avez plusieurs utilisateurs exécutant des requêtes sur la base de données, vous pouvez considérer une autre configuration comme étant plus efficace. Par exemple, si certains utilisateurs exécutent des opérations gourmandes en ressourcesVACUUM, celles-ci peuvent avoir un impact négatif sur les requêtes moins gourmandes, telles que les rapports. Vous pouvez envisager d'ajouter des files d'attente supplémentaires et de les configurer pour différentes charges de travail.
Durée estimée : 75 minutes
Coût estimé : 50 cents
Prérequis
Vous avez besoin d'un cluster Amazon Redshift, de la TICKIT base de données d'exemple et de l'outil client Amazon RSQL Redshift. Si vous ne les avez pas déjà configurés, consultez le guide de démarrage Amazon Redshift et Amazon Redshift. RSQL
Sections
Section 1 : Comprendre le comportement de traitement de file d'attente par défaut
Avant de commencer la configuration manuelleWLM, il est utile de comprendre le comportement par défaut du traitement des files d'attente dans Amazon Redshift. Dans cette section, vous créez deux vues de base de données qui retournent des informations à partir de plusieurs tables système. Ensuite, vous exécutez quelques requêtes de test pour voir comment elles sont routées par défaut. Pour plus d’informations sur les tables système, consultez Informations de référence sur les tables et les vues système.
Étape 1 : Création de la vue WLM _ QUEUE _ STATE _VW
Au cours de cette étape, vous allez créer une vue nommée WLM _ QUEUE _ STATE _VW. Cette vue retourne des informations à partir des tables système suivantes.
Vous utilisez cette vue tout au long du didacticiel pour surveiller ce qu'il advient des files d'attente après avoir modifié la WLM configuration. Le tableau suivant décrit les données renvoyées par la vue WLM QUEUE _ _ STATE _VW.
Colonne | Description |
---|---|
file d’attente | Numéro associé à la ligne qui représente une file d'attente. Le numéro de la file d'attente détermine l'ordre des files d'attente dans la base de données. |
description | Valeur qui indique si la file d'attente est disponible uniquement pour certains groupes d'utilisateurs, pour certains groupes de requêtes ou pour tous les types de requêtes. |
slots | Nombre d'emplacements alloués à la file d'attente. |
mem | Quantité de mémoire allouée à la file d'attente, exprimée en Mo par emplacement. |
max_execution_time | Durée pendant laquelle une requête est autorisée à s'exécuter avant d'être terminée. |
user_* | Valeur qui indique si les caractères génériques sont autorisés dans la WLM configuration pour correspondre aux groupes d'utilisateurs. |
query_* | Valeur qui indique si les caractères génériques sont autorisés dans la WLM configuration pour correspondre aux groupes de requêtes. |
queued | Nombre de requêtes qui sont en attente dans la file d'attente pour être traitées. |
executing | Nombre de requêtes qui sont en cours d'exécution. |
executed | Nombre de requêtes exécutées. |
Pour créer la vue WLM _ QUEUE _ STATE _VW
-
Ouvrez Amazon Redshift RSQL et connectez-vous à votre base de données d'TICKITexemple. Si vous n'avez pas cette base de données, consultez Prérequis.
-
Exécutez la requête suivante pour créer la vue WLM _ QUEUE _ STATE _VW.
create view WLM_QUEUE_STATE_VW as select (config.service_class-5) as queue , trim (class.condition) as description , config.num_query_tasks as slots , config.query_working_mem as mem , config.max_execution_time as max_time , config.user_group_wild_card as "user_*" , config.query_group_wild_card as "query_*" , state.num_queued_queries queued , state.num_executing_queries executing , state.num_executed_queries executed from STV_WLM_CLASSIFICATION_CONFIG class, STV_WLM_SERVICE_CLASS_CONFIG config, STV_WLM_SERVICE_CLASS_STATE state where class.action_service_class = config.service_class and class.action_service_class = state.service_class and config.service_class > 4 order by config.service_class;
-
Exécutez la requête suivante pour afficher les informations que la vue contient.
select * from wlm_queue_state_vw;
Voici un exemple de résultat.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (querytype:any) | 5 | 836 | 0 | false | false | 0 | 1 | 160
Étape 2 : Création de la vue WLM _ QUERY _ STATE _VW
Au cours de cette étape, vous allez créer une vue nommée WLM _ QUERY _ STATE _VW. Cette vue retourne des informations à partir de la table système STV_WLM_QUERY_STATE.
Vous utilisez cette vue tout au long du didacticiel pour surveiller les requêtes en cours d'exécution. Le tableau suivant décrit les données renvoyées par la vue WLM QUERY _ _ STATE _VW.
Colonne | Description |
---|---|
query | ID de requête. |
file d’attente | Numéro de la file d'attente. |
slot_count | Nombre d'emplacements alloués à la requête. |
start_time | Heure de début de la requête. |
state | État de la requête (en cours d'exécution, par exemple). |
queue_time | Nombre de microsecondes passées par la requête dans la file d'attente. |
exec_time | Nombre de microsecondes pendant lesquelles la requête était en cours d'exécution. |
Pour créer la vue WLM _ QUERY _ STATE _VW
-
DansRSQL, exécutez la requête suivante pour créer la vue WLM _ QUERY _ STATE _VW.
create view WLM_QUERY_STATE_VW as select query, (service_class-5) as queue, slot_count, trim(wlm_start_time) as start_time, trim(state) as state, trim(queue_time) as queue_time, trim(exec_time) as exec_time from stv_wlm_query_state;
-
Exécutez la requête suivante pour afficher les informations que la vue contient.
select * from wlm_query_state_vw;
Voici un exemple de résultat.
query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 1249 | 1 | 1 | 2014-09-24 22:19:16 | Executing | 0 | 516
Étape 3 : Exécuter les requêtes de test
Au cours de cette étape, vous exécutez des requêtes à partir de plusieurs connexions RSQL et passez en revue les tables système pour déterminer comment les requêtes ont été acheminées pour être traitées.
Pour cette étape, deux RSQL fenêtres doivent être ouvertes :
-
Dans RSQL la fenêtre 1, vous exécutez des requêtes qui surveillent l'état des files d'attente et des requêtes à l'aide des vues que vous avez déjà créées dans ce didacticiel.
-
Dans RSQL la fenêtre 2, vous exécutez des requêtes de longue durée pour modifier les résultats que vous trouvez dans RSQL la fenêtre 1.
Pour exécuter les requêtes de test
-
Ouvrez deux RSQL fenêtres. Si vous avez déjà une fenêtre ouverte, il vous suffit d'en ouvrir une seconde. Vous pouvez choisir le même compte utilisateur pour ces deux connexions.
-
Dans RSQL la fenêtre 1, exécutez la requête suivante.
select * from wlm_query_state_vw;
Voici un exemple de résultat.
query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 1258 | 1 | 1 | 2014-09-24 22:21:03 | Executing | 0 | 549
Cette requête retourne un résultat faisant référence à elle-même. La requête en cours d'exécution est l'SELECTinstruction de cette vue. Une requête sur cette vue retourne toujours au moins un résultat. Comparez ce résultat à celui obtenu après le démarrage de la requête de longue durée à l'étape suivante.
-
Dans RSQL la fenêtre 2, exécutez une requête à partir de la base de données TICKIT d'exemple. Cette requête doit être exécutée pendant environ une minute afin que vous ayez le temps d'explorer les résultats de la vue WLM _ QUEUE _ STATE _VW et de la vue WLM _ QUERY _ STATE _VW que vous avez créées précédemment. Dans certains cas, vous pouvez constater que la requête ne s'exécute pas assez longtemps pour que vous puissiez interroger les deux vues. Dans ces cas, vous pouvez augmenter la valeur du filtre sur
l.listid
pour qu'elle s'exécute plus longtemps.Note
Pour raccourcir le temps d'exécution des requêtes et améliorer les performances du système, Amazon Redshift met en cache le résultat de certains types de requêtes dans la mémoire du nœud principal. Lorsque la mise en cache des résultats est activée, les requêtes ultérieures s'exécutent beaucoup plus rapidement. Pour empêcher une exécution trop rapide de la requête, désactivez la mise en cache des résultats pour la séance en cours.
Pour désactiver la mise en cache du résultat sur la séance en cours, définissez le paramètre enable_result_cache_for_session sur
off
, comme illustré ci-après.set enable_result_cache_for_session to off;
Dans RSQL la fenêtre 2, exécutez la requête suivante.
select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid < 100000;
-
Dans RSQL la fenêtre 1, interrogez WLM _ QUEUE _ STATE _VW et WLM _ QUERY _ STATE _VW et comparez les résultats aux résultats précédents.
select * from wlm_queue_state_vw; select * from wlm_query_state_vw;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (querytype:any) | 5 | 836 | 0 | false | false | 0 | 2 | 163 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 1267 | 1 | 1 | 2014-09-24 22:22:30 | Executing | 0 | 684 1265 | 1 | 1 | 2014-09-24 22:22:36 | Executing | 0 | 4080859
Notez les différences suivantes entre vos requêtes précédentes et les résultats de cette étape :
-
Il y a maintenant deux lignes dans WLM _ QUERY _ STATE _VW. L'un des résultats est la requête autoréférentielle permettant d'exécuter une SELECT opération sur cette vue. Le deuxième résultat est la longue requête de l'étape précédente.
-
La colonne d'exécution dans WLM _ QUEUE _ STATE _VW est passée de 1 à 2. Cette entrée de colonne signifie qu'il y a deux requêtes en cours d'exécution dans la file d'attente.
-
La colonne exécutée est augmentée chaque fois que vous exécutez une requête dans la file d'attente.
La vue WLM _ QUEUE _ STATE _VW est utile pour avoir une vue d'ensemble des files d'attente et du nombre de requêtes traitées dans chaque file d'attente. La vue WLM QUERY _ _ STATE _VW est utile pour obtenir une vue plus détaillée des requêtes individuelles en cours d'exécution.
Section 2 : Modification de la configuration de la file d'attente de WLM requêtes
Maintenant que vous comprenez le fonctionnement par défaut des files d'attente, vous pouvez apprendre à configurer manuellement les files d'attente de requêtes. WLM Dans cette section, vous créez et configurez un nouveau groupe de paramètres pour votre cluster. Vous créez deux files d'attente d'utilisateurs supplémentaires et les configurez pour accepter les requêtes basées sur le groupe d'utilisateurs des requêtes ou sur les étiquettes de groupe de requêtes. Toute requête qui n'est pas routée vers l'une de ces deux files d'attente est routée vers la file d'attente par défaut au moment de l'exécution.
Pour créer une WLM configuration manuelle dans un groupe de paramètres
-
Connectez-vous à la console Amazon Redshift AWS Management Console et ouvrez-la à l'adresse. https://console.aws.amazon.com/redshiftv2/
-
Dans le menu de navigation, choisissez Configurations, puis choisissez Gestion des charges de travail pour afficher la page Gestion des charges de travail.
-
Choisissez Créer pour afficher la fenêtre Créer un groupe de paramètres.
-
Saisissez
WLMTutorial
pour le Nom du groupe de paramètres et la Description, puis choisissez Créer pour créer le groupe de paramètres.Note
Le Nom du groupe de paramètres est converti au format minuscules pour toutes les lettres lors de sa création.
-
Sur la page Gestion des charges de travail, choisissez le groupe de paramètres
wlmtutorial
pour afficher la page des détails avec des onglets pour Paramètres et Gestion des charges de travail. -
Vérifiez que vous êtes sur l'onglet Gestion de la charge de travail, puis choisissez le WLMmode Switch pour afficher la fenêtre des paramètres de simultanéité.
-
Choisissez Manuel WLM, puis cliquez sur Enregistrer pour passer au mode manuelWLM.
-
Choisissez Modifier les files d'attente de charge de travail.
-
Choisissez Ajouter une file d'attente deux fois pour ajouter deux files d'attente. Il y a désormais trois files d'attente : File d'attente 1, File d'attente 2 et File d'attente.
-
Entrez les informations de chaque file d'attente de la façon suivante :
-
Pour File d'attente 1, entrez
30
pour Mémoire (%),2
pour Simultanéité sur principal ettest
pour Groupes de requêtes. Conservez les valeurs par défaut des autres paramètres. -
Pour File d'attente 2, entrez
40
pour Mémoire (%),3
pour Simultanéité sur principal etadmin
pour Groupes d'utilisateurs. Conservez les valeurs par défaut des autres paramètres. -
N'apportez aucune modification à la File d'attente par défaut. WLMaffecte de la mémoire non allouée à la file d'attente par défaut.
-
-
Choisissez Save (Enregistrer) pour enregistrer vos paramètres.
Associez ensuite le groupe de paramètres WLM configuré manuellement à un cluster.
Pour associer un groupe de paramètres à une WLM configuration manuelle avec un cluster
-
Connectez-vous à la console Amazon Redshift AWS Management Console et ouvrez-la à l'adresse. https://console.aws.amazon.com/redshiftv2/
-
Dans le menu de navigation, choisissez Clusters, puis choisissez Clusters pour afficher la liste des clusters.
-
Choisissez votre cluster, par exemple
examplecluster
, pour afficher les informations du cluster. Sélectionnez ensuite l'option Propriétés pour afficher les propriétés de ce cluster. -
Dans la section Configurations de base de données, sélectionnez Modifier, puis Modifier le groupe de paramètres pour afficher la fenêtre Groupes de paramètres.
-
Pour Groupes de paramètres, sélectionnez le groupe de paramètres
wlmtutorial
que vous avez précédemment créé. -
Sélectionnez Enregistrer les modifications pour associer le groupe de paramètres.
Le cluster est modifié avec le groupe de paramètres modifié. Toutefois, vous devez redémarrer le cluster pour que les modifications soient également appliquées à la base de données.
-
Choisissez votre cluster, puis choisissez Redémarrer le cluster comme Actions.
Une fois que le cluster a été redémarré, le statut redevient Disponible.
Section 3 : Acheminement des requêtes vers les files d'attente en fonction des groupes d'utilisateurs et des groupes de requêtes
Votre cluster est maintenant associé à un nouveau groupe de paramètres et vous avez configuréWLM. Ensuite, exécutez quelques requêtes pour voir comment Amazon Redshift achemine les requêtes dans les files d'attente pour le traitement.
Étape 1 : Afficher la configuration de la file d'attente de requêtes dans la base de données
Vérifiez d'abord que la base de données possède la WLM configuration que vous attendez.
Pour afficher la configuration de la file d'attente de requêtes
-
Ouvrez RSQL et exécutez la requête suivante. La requête utilise la vue WLM _ QUEUE _ STATE _VW que vous avez créée dansÉtape 1 : Création de la vue WLM _ QUEUE _ STATE _VW. Si vous aviez déjà une séance connectée à la base de données avant le redémarrage du cluster, vous devez vous reconnecter.
select * from wlm_queue_state_vw;
Voici un exemple de résultat.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 0 | 0 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 0 | 0 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 0
Comparer ces résultats à ceux que vous avez reçus dans Étape 1 : Création de la vue WLM _ QUEUE _ STATE _VW. Notez qu'il y a désormais deux files d'attente supplémentaires. Queue 1 est maintenant la file d'attente du groupe de requêtes de test et Queue 2 la file d'attente du groupe utilisateur administrateur.
Queue 3 est maintenant la file d'attente par défaut. La dernière file d'attente de la liste est toujours la file d'attente par défaut. Elle correspond à la file d'attente vers laquelle les requêtes sont routées par défaut si aucun groupe d'utilisateurs ni groupe de requêtes n'est spécifié dans une requête.
-
Exécutez la requête suivante pour confirmer que votre requête s'exécute maintenant dans la file d'attente 3.
select * from wlm_query_state_vw;
Voici un exemple de résultat.
query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2144 | 3 | 1 | 2014-09-24 23:49:59 | Executing | 0 | 550430
Étape 2 : Exécuter une requête à l'aide de la file d'attente du groupe de requêtes
Pour exécuter une requête à l'aide de la file d'attente du groupe de requêtes
-
Exécutez la requête suivante pour l'acheminer vers le groupe de requêtes
test
.set query_group to test; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Dans l'autre RSQL fenêtre, exécutez la requête suivante.
select * from wlm_query_state_vw;
Voici un exemple de résultat.
query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2168 | 1 | 1 | 2014-09-24 23:54:18 | Executing | 0 | 6343309 2170 | 3 | 1 | 2014-09-24 23:54:24 | Executing | 0 | 847
La requête a été acheminée vers le groupe de requêtes de test, à savoir queue 1 maintenant.
-
Sélectionnez tout à partir de la vue d'état de la file d'attente.
select * from wlm_queue_state_vw;
Vous voyez un résultat similaire au suivant.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 1 | 0 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 0 | 0 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 0
-
Maintenant, réinitialisez le groupe de requêtes et exécutez la longue requête à nouveau :
reset query_group; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Exécutez les requêtes sur les vues pour afficher les résultats.
select * from wlm_queue_state_vw; select * from wlm_query_state_vw;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 0 | 1 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 0 | 0 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 2 | 5 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2186 | 3 | 1 | 2014-09-24 23:57:52 | Executing | 0 | 649 2184 | 3 | 1 | 2014-09-24 23:57:48 | Executing | 0 | 4137349
Le résultat doit être que la requête s'exécute maintenant dans la file d'attente 3 à nouveau.
Étape 3 : Créer un utilisateur de base de données et un groupe
Avant de pouvoir exécuter des requêtes dans cette file d'attente, vous devez créer le groupe d'utilisateurs dans la base de données et ajouter un utilisateur au groupe. Ensuite, vous vous connectez en RSQL utilisant les informations d'identification du nouvel utilisateur et vous exécutez des requêtes. Vous avez besoin d'exécuter des requêtes comme super-utilisateur, tel qu'utilisateur administrateur, pour pouvoir créer des utilisateurs de base de données.
Pour créer un utilisateur de base de données et un groupe d'utilisateurs
-
Dans la base de données, créez un nouvel utilisateur de base de données nommé en
adminwlm
exécutant la commande suivante dans une RSQL fenêtre.create user adminwlm createuser password '123Admin';
-
Puis, exécutez les commandes suivantes pour créer le nouveau groupe d'utilisateurs et lui ajouter votre nouvel utilisateur
adminwlm
.create group admin; alter group admin add user adminwlm;
Étape 4 : Exécuter une requête à l'aide de la file d'attente du groupe d'utilisateurs
Ensuite, vous exécutez une requête et la routez vers la file d'attente du groupe d'utilisateurs. Vous procédez ainsi lorsque vous souhaitez acheminer votre requête vers une file d'attente configurée pour gérer le type de requête que vous souhaitez exécuter.
Pour exécuter une requête à l'aide de la file d'attente du groupe d'utilisateurs
-
Dans RSQL la fenêtre 2, exécutez les requêtes suivantes pour passer au
adminwlm
compte et exécuter une requête sous le nom de cet utilisateur.set session authorization 'adminwlm'; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Dans RSQL la fenêtre 1, exécutez la requête suivante pour voir la file d'attente vers laquelle les requêtes sont acheminées.
select * from wlm_query_state_vw; select * from wlm_queue_state_vw;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 0 | 1 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 1 | 0 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 8 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2202 | 2 | 1 | 2014-09-25 00:01:38 | Executing | 0 | 4885796 2204 | 3 | 1 | 2014-09-25 00:01:43 | Executing | 0 | 650
La file d'attente dans laquelle cette requête a été exécutée est la file d'attente 2, celle de l'utilisateur
admin
. Chaque fois que vous exécutez des requêtes en étant connecté sous l'identité de cet utilisateur, elles s'exécutent dans la file d'attente 2, sauf si vous spécifiez un autre groupe de requêtes à utiliser. La file d'attente choisie dépend des règles d'affectation de file d'attente. Pour de plus amples informations, veuillez consulter WLMrègles d'attribution des files d'attente. -
Exécutez maintenant la requête suivante à partir de RSQL la fenêtre 2.
set query_group to test; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Dans RSQL la fenêtre 1, exécutez la requête suivante pour voir la file d'attente vers laquelle les requêtes sont acheminées.
select * from wlm_queue_state_vw; select * from wlm_query_state_vw;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 1 | 1 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 0 | 1 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 10 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2218 | 1 | 1 | 2014-09-25 00:04:30 | Executing | 0 | 4819666 2220 | 3 | 1 | 2014-09-25 00:04:35 | Executing | 0 | 685
-
Lorsque vous avez terminé, réinitialisez le groupe de requêtes.
reset query_group;
Section 4 : Utilisation de wlm_query_slot_count pour remplacer temporairement le niveau de concurrence d'une file d'attente
Parfois, les utilisateurs peuvent avoir temporairement besoin de plus de ressources pour une requête donnée. Si tel est le cas, ils peuvent utiliser le paramètre de configuration wlm_query_slot_count pour remplacer temporairement la manière dont les emplacements sont alloués dans une file d'attente de requêtes. Les slots sont des unités de CPU mémoire utilisées pour traiter les requêtes. Vous pouvez annuler le nombre d'emplacements lorsque vous avez des requêtes occasionnelles qui utilisent beaucoup de ressources dans le cluster, par exemple lorsque vous effectuez une VACUUM opération dans la base de données.
Vous constatez peut-être que les utilisateurs ont souvent besoin de définir wlm_query_slot_count pour certains types de requêtes. Si tel est le cas, envisagez d'ajuster la WLM configuration et de fournir aux utilisateurs une file d'attente mieux adaptée aux besoins de leurs requêtes. Pour de plus amples informations sur la substitution temporaire du niveau de concurrence à l'aide du nombre d'emplacements, veuillez consultez wlm_query_slot_count.
Étape 1 : Remplacer le niveau de concurrence à l'aide de wlm_query_slot_count
Dans le cadre de ce didacticiel, nous exécutons la même SELECT requête de longue durée. Nous l'exécutons sous l'identité de l'utilisateur adminwlm
en utilisant wlm_query_slot_count pour augmenter le nombre d'emplacements disponibles pour la requête.
Pour remplacer le niveau de concurrence à l'aide de wlm_query_slot_count
-
Augmentez la limite de requête pour vous assurer que vous disposez de suffisamment de temps pour interroger la vue WLM _ QUERY _ STATE _VW et obtenir un résultat.
set wlm_query_slot_count to 3; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Maintenant, interrogez WLM _ QUERY _ STATE _VW auprès de l'administrateur pour voir comment la requête s'exécute.
select * from wlm_query_state_vw;
Voici un exemple de résultat.
query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2240 | 2 | 1 | 2014-09-25 00:08:45 | Executing | 0 | 3731414 2242 | 3 | 1 | 2014-09-25 00:08:49 | Executing | 0 | 596
Notez que le nombre d'emplacements pour la requête est 3. Ce nombre signifie que la requête utilise les trois emplacements pour traiter la requête et alloue la totalité des ressources de la file d'attente à cette requête.
-
Maintenant, exécutez la requête suivante.
select * from WLM_QUEUE_STATE_VW;
Voici un exemple de résultat.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 0 | 4 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 1 | 3 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 25
Le paramètre de configuration wlm_query_slot_count est valide pour la séance en cours uniquement. Si cette session expire ou si un autre utilisateur exécute une requête, la WLM configuration est utilisée.
-
Réinitialisez le nombre d'emplacements et exécutez à nouveau le test.
reset wlm_query_slot_count; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 0 | 0 | 2 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 1 | 2 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 14 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+-----------+------------+----------- 2260 | 2 | 1 | 2014-09-25 00:12:11 | Executing | 0 | 4042618 2262 | 3 | 1 | 2014-09-25 00:12:15 | Executing | 0 | 680
Étape 2 : Exécuter les requêtes à partir de différentes séances
Ensuite, exécutez les requêtes à partir de différentes séances.
Pour exécuter les requêtes à partir de différentes séances
-
Dans les RSQL fenêtres 1 et 2, exécutez ce qui suit pour utiliser le groupe de requêtes de test.
set query_group to test;
-
Dans RSQL la fenêtre 1, exécutez la requête longue suivante.
select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Comme la requête de longue durée est toujours en cours dans RSQL la fenêtre 1, exécutez ce qui suit. Elles augmentent le nombre d'emplacements pour utiliser tous les emplacements pour la file d'attente, puis commencent à exécuter la requête de longue durée.
set wlm_query_slot_count to 2; select avg(l.priceperticket*s.qtysold) from listing l, sales s where l.listid <40000;
-
Ouvrez une troisième RSQL fenêtre et interrogez les vues pour voir les résultats.
select * from wlm_queue_state_vw; select * from wlm_query_state_vw;
Voici quelques exemples de résultats.
query | description | slots | mem | max_time | user_* | query_* | queued | executing | executed ------+-------------------------------------------+-------+-----+----------+--------+---------+--------+-----------+---------- 0 | (super user) and (query group: superuser) | 1 | 357 | 0 | false | false | 0 | 0 | 0 1 | (query group: test) | 2 | 627 | 0 | false | false | 1 | 1 | 2 2 | (suser group: admin) | 3 | 557 | 0 | false | false | 0 | 0 | 3 3 | (querytype:any) | 5 | 250 | 0 | false | false | 0 | 1 | 18 query | queue | slot_count | start_time | state | queue_time | exec_time ------+-------+------------+---------------------+---------------+------------+----------- 2286 | 1 | 2 | 2014-09-25 00:16:48 | QueuedWaiting | 3758950 | 0 2282 | 1 | 1 | 2014-09-25 00:16:33 | Executing | 0 | 19335850 2288 | 3 | 1 | 2014-09-25 00:16:52 | Executing | 0 | 666
Notez que la première requête utilise l'un des emplacements alloués à la file d'attente 1 pour exécuter la requête. De plus, notez qu'une requête est en attente dans la file d'attente (
queued
a pour valeur1
etstate
a pour valeurQueuedWaiting
). Une fois la première requête terminée, la deuxième commence à s'exécuter. Cette exécution se produit parce que les deux requêtes sont acheminées vers le groupe de requêtestest
et la deuxième requête doit attendre qu'il y ait un nombre suffisant d'emplacements pour commencer le traitement.
Section 5 : Nettoyage de vos ressources
Votre cluster continue d’accumuler les frais aussi longtemps qu’il est en cours d’exécution. Lorsque vous avez terminé ce tutoriel, remettez votre environnement dans l'état précédent en suivant les étapes des rubriques Trouver des ressources supplémentaires et Réinitialiser votre environnement du Guide de démarrage d'Amazon Redshift.
Pour plus d'informations surWLM, voirGestion de la charge de travail.