Le langage de manipulation de données (LMD) partitionné actif fournit la progression en temps réel des instructions LMD partitionnées actuellement actives 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.
Dans cet article, nous allons décrire le tableau en détail, vous montrer des exemples des requêtes utilisant ce tableau et, enfin, montrer comment utiliser ces pour limiter les problèmes causés par les LMD partitionnés actifs.
Disponibilité
Les données SPANNER_SYS
ne sont disponibles que via des interfaces SQL. Par exemple:
Page Spanner Studio d'une base de données dans la console Google Cloud
La commande
gcloud spanner databases execute-sql
L'API
executeQuery
Les autres méthodes de lecture unique fournies par Spanner ne sont pas compatibles
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 LMD partitionné. |
SESSION_ID |
STRING |
ID de la session qui exécute la DML partitionnée. 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 instruction LMD partitionnée. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Dernier code temporel correspondant à la progression du LMD partitionné. 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 LMD partitionnés en cours d'exécution triée 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 |
---|---|---|---|---|---|---|---|---|
METTRE À JOUR Concerts SET VenueId = \'incroyable lieu\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50 % | 2398654 | 21-01-2024 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 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
DELETE from Singers WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20,00% | 238654 | 22-01-2024 15:56:30.498744-08:00 | 22-01-2024 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 pour
PROGRESS
,ROWS_PROCESSED
etLAST_UPDATE_TIMESTAMP
sont incrémentées aux limites de partition terminées, de sorte que le LMD partitionné peut continuer à mettre à jour les lignes alors que les valeurs de ces trois champs restent les mêmes.S'il y a des millions de partitions dans un LMD partitionné, la valeur de il est possible que la colonne
PROGRESS
ne capture pas toute la progression incrémentielle. UtilisezNUM_PARTITIONS_COMPLETE
etNUM_TRIVIAL_PARTITIONS_COMPLETE
pour se référer à des progrès plus précis.Si vous annulez un LMD partitionné à l'aide d'une requête RPC, la classe annulée LMD partitionné peut toujours apparaître dans la table. Si vous annulez un LMD partitionné à l'aide de la suppression de session, il est immédiatement supprimé de la table. Pour en savoir plus, consultez la section 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, considérons le scénario suivant lequel l'utilisation du processeur est élevée et vous souhaitez répondre aux questions suivantes.
- Combien de LMD partitionnés sont exécutés actuellement ?
- Que sont ces LMD partitionnés ?
- Combien de ces LMD partitionnés s'exécutent 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éduire la fréquence d'un LMD partitionné.
Dans le tutoriel suivant, nous allons examiner les LMD partitionnés actifs et déterminer 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 obtenir plus d'informations 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 |
---|---|---|---|---|---|---|---|---|
METTRE À JOUR Concerts SET VenueId = \'incroyable lieu\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50 % | 2398654 | 21-01-2024 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 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
Annuler une requête onéreuse
Nous avons trouvé un LMD partitionné qui s'exécute depuis des jours et ne progresse 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
- Découvrez d'autres outils d'introspection.
- Découvrez les autres informations stockées par Spanner pour chaque base de données dans les tables du schéma d'informations de cette base de données.
- Découvrez les bonnes pratiques SQL pour Spanner.