Le langage de manipulation de données (LMD) partitionné actif (LMD) fournit des données en temps réel progression des LMD partitionnés actuellement actifs dans votre base de données.
Spanner fournit une table intégrée,
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, qui répertorie les LMD partitionnés en cours d'exécution
et les progrès réalisés
sur ces éléments.
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 une liste de LMD partitionnés actifs, triés en fonction de leur heure de début.
Schéma de la table
Vous trouverez ci-dessous le schéma de la table pour 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 le LMD partitionné. La suppression de l'ID de session annule la requête. |
NUM_PARTITIONS_TOTAL |
INT64 |
Nombre total de partitions dans le LMD partitionné. |
NUM_PARTITIONS_COMPLETE |
INT64 |
Nombre de partitions terminées par le LMD partitionné. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
Nombre de partitions complètes pour lesquelles aucune ligne n'a été traitée. |
PROGRESS |
DOUBLE |
La progression d'un LMD partitionné est calculée en divisant le nombre de partitions importantes terminées par le nombre total de partitions importantes. |
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'un LMD partitionné. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Dernier code temporel correspondant à la progression du LMD partitionné. Mise à jour à la fin d'une partition. |
Exemples de requêtes
Vous pouvez exécuter les exemples d'instructions SQL suivants à l'aide de la méthode client les bibliothèques, Google Cloud CLI, ou Console Google Cloud :
Répertorier les requêtes en cours les plus anciennes
La requête suivante renvoie une liste des LMD partitionnés en cours d'exécution, triés en fonction du nombre de au moment 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 | 22-01-2024 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 |
METTRE À JOUR LES CHAÎNES SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 22-01-2024 15:57:47.498744-08:00 | 22-01-2024 15:57:39.049799-08:00 |
Limites
L'utilisation de la table SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
présente les caractéristiques suivantes :
Limites:
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 indiquer 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 une session LMD utilisant la suppression de session, il est immédiatement retiré 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
Statistiques sur les requêtes et statistiques sur les transactions fournissent des informations utiles lors du dépannage de la latence d'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 est en cours d'exécution dans le système. Par exemple, supposons que le 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 de prendre les mesures suivantes action.
- 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 remarquons une utilisation du processeur supérieure à la normale. Nous décidons donc de exécutez la requête suivante pour obtenir le nombre de LMD partitionnés actifs.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La requête produit le résultat suivant.
active_count |
---|
22 |
Répertorier les deux plus anciens LMD partitionnés en cours d'exécution
Nous pouvons ensuite exécuter une requête pour trouver plus d'informations sur les 2 premières images exécutant des LMD partitionnés, triés par l'heure de début du LMD partitionné.
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 | 22-01-2024 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 coûteuse
Nous avons trouvé un LMD partitionné qui s'exécute depuis des jours et ne progresse pas. Nous pouvons
Exécutez donc la commande gcloud spanner databases sessions delete
suivante
pour supprimer la session à l'aide de l'ID de session qui annule le LMD partitionné.
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.
- Pour en savoir plus sur les autres informations stockées par Spanner pour chaque base de données, consultez la du schéma d'informations de la base de données.
- En savoir plus sur les bonnes pratiques SQL pour Spanner.