Résoudre les problèmes de gestion de la charge de travail BigQuery

Ce document explique comment résoudre les problèmes courants liés à la gestion de la charge de travail BigQuery, y compris l'allocation et les attributions de réservations, les erreurs de configuration de réservations, les engagements de capacité, la contention des emplacements et la surveillance des réservations.

Pour afficher et gérer les réservations, les engagements et les graphiques des ressources administratives, assurez-vous de disposer des rôles IAM (Identity and Access Management) requis, tels que Lecteur de ressources BigQuery (roles/bigquery.resourceViewer) ou Administrateur de ressources BigQuery (roles/bigquery.resourceAdmin) sur le projet d'administration. Pour en savoir plus, consultez Contrôle des accès avec IAM.

Résoudre les problèmes liés aux réservations

Utilisez les informations suivantes pour résoudre les problèmes courants liés aux réservations, comme les erreurs lors de l'ajout d'emplacements, les raisons pour lesquelles une réservation n'est pas utilisée pour un job BigQuery ou les réservations non reconnues.

Impossible d'ajouter d'autres emplacements à la taille de la réservation

Si vous rencontrez des erreurs telles que Failed to allocate slots for reservation in the current system state ou Failed to update reservation: Failed to allocate slots for reservation lorsque vous essayez d'ajouter des créneaux à votre réservation, il s'agit généralement d'un problème temporaire. Pour résoudre ce problème, procédez comme suit :

  • Réessayez avec un nombre d'emplacements plus petit.
  • Si vous rencontrez toujours des problèmes avec un nombre réduit d'emplacements, patientez 15 minutes, puis réessayez.

Si, après plusieurs tentatives et 30 minutes d'attente, vous recevez toujours la même erreur, contactez l'assistance Cloud Customer Care.

Le quota est insuffisant pour traiter cette demande.

Si le message d'erreur indique There is insufficient quota to complete this request, cela signifie que la requête dépasse la limite de quota définie pour le projet.

Pour résoudre cette erreur, effectuez l'une des opérations suivantes :

  • Ajoutez un nombre d'emplacements plus petit à la réservation afin que la demande ne dépasse pas la limite de quota.
  • Demandez une augmentation de quota dans la région correspondante. Pour en savoir plus, consultez Demander une augmentation de quota.

Réservation non utilisée par BigQuery pour exécuter un job

Il existe plusieurs scénarios dans lesquels un job peut s'exécuter avec la tarification à la demande ou un pool d'emplacements partagés sans frais au lieu d'utiliser la réservation que vous avez créée.

La requête et la réservation se trouvent dans des régions différentes.

Les réservations sont des ressources régionales. Une requête s'exécute au même emplacement que les tables référencées dans la requête.

Si l'emplacement d'une table ne correspond pas à celui de la réservation, la requête n'utilise pas la réservation et s'exécute plutôt avec la tarification à la demande (ou le pool d'emplacements partagés sans frais pour les jobs d'exportation et de chargement par lot éligibles).

Interroger des tables BigQuery Omni

Lorsque vous interrogez une table BigQuery Omni, veillez à créer la réservation dans la même région que la table, et non dans une région colocalisée. Si vous créez la réservation dans la région BigQuery colocalisée, la requête s'exécute avec la tarification à la demande.

La réservation a été créée, mais le projet ne lui a pas été attribué

Pour utiliser les emplacements d'une réservation, vous devez créer une attribution qui attribue le projet, le dossier ou l'organisation à la réservation spécifique. Assurez-vous que le projet dispose d'une attribution correspondante pour la réservation.

Discordance au niveau du type de mission

Veillez à sélectionner le type de mission approprié lorsque vous créez une attribution. Sinon, les tâches n'utiliseront pas la réservation.

Par exemple, si vous sélectionnez PIPELINE comme type de mission, tous les jobs de requête s'exécutent avec la tarification à la demande. Définissez le type d'attribution sur QUERY pour que les jobs de requête s'exécutent à l'aide de la réservation.

Requêtes à plusieurs instructions

Si vous exécutez des requêtes à plusieurs instructions, l'objet de job parent n'est associé à aucune réservation, même si les jobs enfants s'exécutent sous une réservation.

Pour vérifier si le job a réellement utilisé une réservation, consultez les métadonnées du job enfant.

Récupérer les résultats mis en cache

Lorsqu'un job de requête récupère des résultats mis en cache, le champ de réservation est vide, car BigQuery n'effectue aucun calcul et récupère les résultats directement à partir de la table temporaire.

Opérations de modification des lignes de capture des données modifiées

Si vous avez des tables de capture des données modifiées (CDC), BigQuery applique les modifications de ligne en attente dans l'intervalle max_staleness en tant que jobs d'arrière-plan qui utilisent le type d'attribution BACKGROUND. S'il n'y a pas d'attributions BACKGROUND, ces jobs utilisent la tarification à la demande. Envisagez de créer une attribution BACKGROUND pour le projet afin d'éviter des coûts à la demande inattendus. Vous pouvez identifier ces jobs par la sous-chaîne queueworker_cdc_background_merge_coalesce dans l'identifiant du job.

Types de modèles BigQuery ML qui utilisent des services externes

Si aucune attribution de réservation avec un type de mission ML_EXTERNAL n'est trouvée dans le projet, les jobs de création de modèles externes s'exécutent avec la tarification à la demande. L'attribution du type de job QUERY s'applique aux modèles BigQuery ML standards et aux modèles de factorisation matricielle (qui nécessitent une réservation Enterprise ou Enterprise Plus), tandis que les modèles externes nécessitent une attribution ML_EXTERNAL. Pour en savoir plus, consultez Attribuer des emplacements aux charges de travail BigQuery.

Réservations non reconnues identifiées dans le projet

BigQuery possède des réservations qui représentent un pool d'emplacements partagés sans frais pour certaines opérations dans BigQuery.

default-pipeline

Par défaut, le chargement ou l'exportation par lots de données dans BigQuery utilisent un pool d'emplacements partagé sans frais. Lorsque vous inspectez ces jobs de chargement ou d'extraction, le champ de réservation affiche default-pipeline.

L'utilisation du pool d'emplacements partagés n'entraîne aucuns frais. Si vous souhaitez obtenir des performances cohérentes et prévisibles, envisagez d'acheter une réservation PIPELINE.

Résoudre les problèmes liés aux tâches de gestion des réservations

Vous pouvez rencontrer les erreurs suivantes lorsque vous créez ou modifiez une réservation.

La taille de la réservation ou les emplacements de référence doivent être un multiple de 50

Message d'erreur

  • Max reservation size can only be configured in multiples of 50, except when covered by excess commitments.
  • Baseline slots can only be configured in multiples of 50, except when covered by excess commitments.

Cause

Les emplacements sont toujours ajustés automatiquement à un multiple de 50. BigQuery augmente le nombre d'emplacements en fonction de l'utilisation réelle et l'arrondit à la tranche de 50 emplacements la plus proche. En l'absence d'engagement ou si l'engagement ne peut pas couvrir les augmentations, vous ne pouvez augmenter les emplacements de référence et d'autoscaling que par multiples de 50.

Si baseline slots ou max reservation size - baseline slots n'est pas un multiple de 50 (et n'est pas couvert par des engagements de capacité excédentaire), la réservation ne peut pas être mise à l'échelle jusqu'à la taille maximale de la réservation, ce qui entraîne cette erreur.

Solution

Effectuez l'une des opérations suivantes :

  • Achetez des engagements de capacité supplémentaires pour couvrir l'augmentation du nombre d'emplacements.
  • Choisissez un nombre d'emplacements de base et un nombre maximal d'emplacements par incréments de 50.

Résoudre les problèmes liés aux engagements de capacité

Cette section décrit les étapes de dépannage qui vous seront utiles en cas de problèmes avec les engagements de capacité BigQuery.

Les emplacements achetés sont en attente

Les emplacements sont soumis à la capacité disponible. Lorsque vous achetez des engagements d'emplacements et que BigQuery les alloue, la colonne État affiche une coche. Si BigQuery ne peut pas allouer immédiatement les emplacements demandés, la colonne État reste en attente. Vous devrez peut-être attendre plusieurs heures avant que les emplacements ne soient disponibles. Si vous avez besoin d'accéder plus rapidement aux emplacements, essayez les solutions suivantes :

  1. Supprimez l'engagement en attente.
  2. Souscrivez un nouvel engagement pour un plus petit nombre d'emplacements. Selon la capacité, l'engagement le plus petit peut devenir immédiatement actif.
  3. Achetez les emplacements restants en tant qu'engagement distinct. Les emplacements peuvent apparaître comme étant en attente dans la colonne État, mais ils deviennent généralement actifs en quelques heures.
  4. Facultatif : Lorsque les deux engagements deviennent actifs, fusionnez-les en un seul engagement, à condition qu'ils soient dans la même région et la même édition, et qu'ils aient le même forfait d'engagement.

Si un engagement de créneaux échoue ou prend beaucoup de temps, envisagez d'utiliser temporairement la tarification à la demande. Cette solution vous permet d'exécuter des requêtes critiques dans un autre projet qui n'est attribué à aucune réservation, d'attribuer le projet à None ou de supprimer complètement l'attribution du projet.

Résoudre les problèmes de conflit d'emplacements

Des conflits d'emplacements peuvent se produire lorsque le nombre d'emplacements est insuffisant pour exécuter tous vos jobs, ce qui entraîne des problèmes de performances. Pour déterminer si la dégradation des performances provient d'une augmentation de la charge de travail ou de modifications de la configuration de l'environnement, vous pouvez comparer deux intervalles système entre les réservations et les projets.

Pour résoudre les problèmes de contention de créneaux, suivez les étapes et les bonnes pratiques ci-dessous.

Si vous avez essayé ces bonnes pratiques, mais que vous rencontrez toujours des problèmes de performances, vous pouvez demander de l'aide.

Pics de simultanéité des jobs

Utilisez la vue détaillée dans les graphiques de ressources administratives pour vérifier si le nombre d'exécutions de jobs a soudainement augmenté, avec des pics simultanés d'utilisation des emplacements. Ces pics peuvent indiquer qu'un trop grand nombre de jobs se disputent les emplacements disponibles dans votre réservation.

Bonne pratique : Envisagez d'optimiser les requêtes gourmandes en ressources ou d'augmenter la capacité d'emplacements de votre réservation. Pour en savoir plus sur l'optimisation des performances des requêtes, consultez Optimiser le calcul des requêtes.

Utilisation élevée des emplacements

Utilisez la vue détaillée pour vérifier si la durée des jobs a augmenté, en particulier s'il existe des jobs qui dépassent la capacité maximale de votre réservation. Une utilisation constamment élevée des emplacements peut indiquer une contention en cours.

Bonne pratique : Vérifiez les requêtes à l'aide du filtre de contention des emplacements de l'explorateur de jobs pour identifier les requêtes qui consomment le plus d'emplacements et les optimiser.

Durée des jobs trop longue

Si les jobs mettent beaucoup plus de temps à se terminer, consultez la vue détaillée. Des pics de simultanéité des jobs et d'utilisation des emplacements peuvent indiquer une contention des emplacements.

Bonne pratique : Isolez les jobs critiques en mettant temporairement en veille les jobs moins importants ou en réduisant votre taux global d'envoi de jobs.

Messages de conflit d'emplacements

Le tableau "Insights" peut afficher des messages tels que There were NUMBER jobs detected with slot_contention in the reservation., qui indiquent des problèmes de contention de créneaux. Consultez l'explorateur de jobs pour examiner les détails des jobs spécifiques signalés dans ces messages.

Bonne pratique : Optimisez les requêtes identifiées ou ajustez l'allocation de slots de votre réservation.

Résoudre les problèmes de surveillance des réservations

Les sections suivantes décrivent comment résoudre les problèmes courants liés à la surveillance des réservations BigQuery et de l'utilisation des emplacements.

Les métriques d'utilisation des emplacements ne correspondent pas INFORMATION_SCHEMA

Si vous constatez des écarts entre les métriques d'utilisation des emplacements dans les graphiques de ressources et les données INFORMATION_SCHEMA, essayez ce qui suit :

  • Réduisez la précision. Définissez la précision du graphique sur des intervalles d'une seconde au lieu d'une heure.
  • Alignez l'agrégation. Assurez-vous d'utiliser des méthodes d'agrégation cohérentes entre les graphiques de ressources et les données INFORMATION_SCHEMA. Par exemple, pour mieux refléter l'utilisation maximale dans les graphiques de ressources, définissez l'agrégation de métriques sur p99 ou p90 de manière cohérente.

Les emplacements empruntés s'affichent lorsque les emplacements inactifs sont désactivés.

Vos graphiques de surveillance peuvent afficher une valeur non nulle pour borrowed_slots même si ignore_idle_slots=true est défini pour une ou plusieurs réservations. Ce paramètre empêche une réservation d'emprunter des emplacements inactifs, mais ne l'empêche pas de prêter ses emplacements inutilisés à d'autres réservations.

Ces créneaux empruntés s'affichent dans les cas suivants :

  • Prêt à d'autres réservations : Une réservation avec ignore_idle_slots=true peut prêter ses emplacements de référence inutilisés à d'autres réservations du même projet d'administration, de la même région et de la même édition qui autorisent l'emprunt d'emplacements inactifs (ignore_idle_slots=false). Si toutes les réservations d'un projet d'administration, d'une région et d'une édition ont ignore_idle_slots=true, les emplacements inactifs ne sont pas partagés entre elles.

    Par exemple, supposons que la réservation A comporte 100 emplacements, 0 utilisation et soit configurée avec ignore_idle_slots=true. La réservation B se trouve dans le même projet d'administration, la même région et la même édition. Elle dispose de 100 emplacements, mais en nécessite 150 pour sa charge de travail et est configurée avec ignore_idle_slots=false. La réservation B peut emprunter 50 emplacements inactifs à la réservation A pour répondre à ses besoins. Dans ce cas, les graphiques de surveillance indiquent 50 lent_slots pour la réservation A et 50 borrowed_slots pour la réservation B.

  • L'utilisation dépasse la capacité. Si l'utilisation des emplacements d'une réservation dépasse temporairement sa capacité (emplacements de référence + emplacements avec autoscaling), les graphiques de surveillance affichent cette différence sous la forme borrowed_slots. Ce comportement peut se produire même pour les réservations avec ignore_idle_slots=true.

Le nombre d'emplacements utilisés peut parfois dépasser la somme de vos emplacements de base et de vos emplacements avec autoscaling. Les emplacements excédentaires (par rapport à la somme de vos emplacements de base et de vos emplacements avec autoscaling) ne vous sont pas facturés.

Les emplacements empruntés s'affichent avant qu'une réservation ne soit entièrement utilisée.

Les tableaux de bord de surveillance utilisent des données échantillonnées, qui peuvent ne pas refléter précisément le calendrier d'utilisation des emplacements au cours d'un intervalle d'échantillonnage.

Pour une analyse plus précise de l'utilisation des emplacements, interrogez les colonnes liées aux emplacements inactifs, telles que les colonnes borrowed_slots et lent_slots dans la vue INFORMATION_SCHEMA.RESERVATIONS_TIMELINE.

Étapes suivantes