Statistiques sur les LMD partitionnés actifs

Le langage de manipulation de données (LMD) partitionné actif fournit la progression en temps réel des LMD partitionnés actifs dans votre base de données.

Spanner fournit une table intégrée, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, qui répertorie les instructions LMD partitionnées en cours d'exécution et la progression de leur exécution.

Cette page décrit le tableau en détail, présente des exemples de requêtes qui l'utilisent et, enfin, explique comment les utiliser pour limiter les problèmes causés par les LMD partitionnés actifs. Les informations de cette page s'appliquent aux bases de données en dialecte GoogleSQL et en dialecte PostgreSQL.

Disponibilité

Les données SPANNER_SYS ne sont disponibles que via des interfaces SQL. Exemple:

Les autres méthodes de lecture unique fournies par Spanner ne sont pas compatibles avec SPANNER_SYS.

ACTIVE_PARTITIONED_DMLS

SPANNER_SYS.ACTIVE_PARTITIONED_DMLS renvoie la liste des LMD partitionnés actifs triés par heure de début.

Schéma de la table

Le schéma de table suivant présente SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.

Nom de la colonne Type Description
TEXT STRING Texte de l'instruction de requête LMD partitionnée.
TEXT_FINGERPRINT INT64 L'empreinte est un hachage du texte de la LMD partitionnée.
SESSION_ID STRING ID de la session qui exécute le LMD partitionné. La suppression de l'ID de session annule la requête.
NUM_PARTITIONS_TOTAL INT64 Nombre total de partitions dans la LMD partitionnée.
NUM_PARTITIONS_COMPLETE INT64 Nombre de partitions que la LMD partitionnée a terminées.
NUM_TRIVIAL_PARTITIONS_COMPLETE INT64 Nombre de partitions complètes pour lesquelles aucune ligne n'a été traitée.
PROGRESS DOUBLE L'avancement d'une instruction LMD partitionnée est calculé en divisant le nombre de partitions non triviales terminées par le nombre total de partitions non triviales.
ROWS_PROCESSED INT64 Nombre de lignes traitées jusqu'à présent, mis à jour à la fin de chaque partition.
START_TIMESTAMP TIMESTAMP Limite supérieure de l'heure de début d'une LMD partitionnée.
LAST_UPDATE_TIMESTAMP TIMESTAMP Dernier code temporel de progression de la LMD partitionnée. Mise à jour une fois la partition terminée.

Exemples de requêtes

Vous pouvez exécuter les exemples d'instructions SQL suivants à l'aide des bibliothèques clientes, de la Google Cloud CLI ou de la console Google Cloud.

Répertorier les requêtes en cours les plus anciennes

La requête suivante renvoie la liste des DML partitionnées en cours d'exécution triées par heure de début de la requête.

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC;
texte session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete progression rows_processed start_timestamp last_update_timestamp
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50% 2398654 2024-01-21 15:56:30.498744-08:00 2024-01-22 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = '' 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00,00% 0 2024-01-22 15:55:18.498744-08:00 2024-01-22 15:56:28.049799-08:00
DELETE from Singers WHERE SingerId > 1000000 0071a85e-7e5c-576b-8a17-f9bc3d157eea 8 4 3 20,00% 238654 2024-01-22 15:56:30.498744-08:00 2024-01-22 15:56:19.049799-08:00
UPDATE Singers SET MarketingBudget = 1000 WHERE true 036097a9-91d4-566a-a399-20c754eabdc2 8 5 0 62,50% 238654 2024-01-22 15:57:47.498744-08:00 2024-01-22 15:57:39.049799-08:00

Limites

L'utilisation de la table SPANNER_SYS.ACTIVE_PARTITIONED_DMLS présente les limites suivantes:

  • Les résultats PROGRESS, ROWS_PROCESSED et LAST_UPDATE_TIMESTAMP sont incrémentés aux limites de partition terminées afin que le LMD partitionné puisse continuer à mettre à jour les lignes, tandis que les valeurs de ces trois champs restent les mêmes.

  • S'il existe des millions de partitions dans une instruction DML partitionnée, la valeur de la colonne PROGRESS risque de ne pas refléter l'intégralité de la progression incrémentielle. Utilisez NUM_PARTITIONS_COMPLETE et NUM_TRIVIAL_PARTITIONS_COMPLETE pour faire référence à une progression plus précise.

  • Si vous annulez une instruction LMD partitionnée à l'aide d'une requête RPC, l'instruction LMD partitionnée annulée peut toujours apparaître dans le tableau. Si vous annulez une instruction LMD partitionnée à l'aide de la suppression de session, elle est immédiatement supprimée de la table. Pour en savoir plus, consultez Supprimer l'ID de session.

Utiliser les données des requêtes LMD partitionnées actives pour résoudre les problèmes d'utilisation élevée du processeur

Les statistiques des requêtes et les statistiques de transactions fournissent des informations utiles lors de la résolution de problèmes de latence dans une base de données Spanner. Ces outils fournissent des informations sur les requêtes déjà terminées. Cependant, il est parfois nécessaire de savoir ce qui s'exécute dans le système. Par exemple, imaginons que l'utilisation du processeur soit élevée et que vous souhaitiez répondre aux questions suivantes.

  • Combien de LMD partitionnés sont en cours d'exécution actuellement ?
  • De quoi s'agit-il ?
  • Combien de ces LMD partitionnés sont exécutés depuis longtemps ?
  • Quelle session exécute la requête ?

Si vous avez des réponses aux questions précédentes, vous pouvez décider d'effectuer l'action suivante.

  • Supprimer la session qui exécute la requête pour une résolution immédiate.
  • Réduisez la fréquence d'une instruction LMD partitionnée.

Dans le tutoriel suivant, nous examinons les DML partitionnées actives et déterminons les mesures à prendre, le cas échéant.

Récupérer un résumé des LMD partitionnés actifs

Dans notre exemple de scénario, nous constatons que l'utilisation du processeur est supérieure à la normale. Nous allons donc exécuter la requête suivante pour renvoyer le nombre de DML partitionnées actives.

SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;

La requête renvoie le résultat suivant.

active_count
22

Répertorier les 2 premières instructions LMD partitionnées en cours les plus anciennes

Nous pouvons ensuite exécuter une requête pour en savoir plus sur les deux LMD partitionnées en cours d'exécution les plus anciennes, triées en fonction de l'heure de début de la LMD partitionnée.

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC LIMIT 2;
texte session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete progression rows_processed start_timestamp last_update_timestamp
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50% 2398654 2024-01-21 15:56:30.498744-08:00 2024-01-22 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = '' 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00,00% 0 2024-01-22 15:55:18.498744-08:00 2024-01-22 15:56:28.049799-08:00

Annuler une requête onéreuse

Nous avons détecté une instruction LMD partitionnée qui s'exécute depuis des jours et qui n'avance pas. Nous pouvons donc exécuter la commande gcloud spanner databases sessions delete suivante pour supprimer la session à l'aide de l'ID de session, ce qui annule la LMD partitionnée.

gcloud spanner databases sessions delete\
   5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
    --database=singer_db --instance=test-instance

Étape suivante