Le LMD (langage de manipulation de données partitionné actif) fournit la progression en temps réel 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, ainsi que la progression réalisée sur ceux-ci.
Dans cet article, nous allons décrire la table en détail, présenter quelques exemples de requêtes qui l'utilisent et, enfin, montrer comment utiliser ces requêtes pour atténuer les problèmes causés par les LMD partitionnés actifs.
Qui peut en bénéficier ?
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 avec 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 des bibliothèques clientes, de Google Cloud CLI ou de la console Google Cloud.
Répertorier les requêtes en cours les plus anciennes
La requête suivante renvoie une liste de LMD partitionnés en cours d'exécution, triés en fonction de l'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;
text | 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 Chanteurs 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 limites suivantes:
Les résultats
PROGRESS
,ROWS_PROCESSED
etLAST_UPDATE_TIMESTAMP
sont incrémentés aux limites de partition terminées. Le LMD partitionné peut donc continuer à mettre à jour les lignes pendant que les valeurs de ces trois champs restent les mêmes.S'il existe des millions de partitions dans un LMD partitionné, la valeur de la colonne
PROGRESS
peut ne pas capturer toute la progression incrémentielle. UtilisezNUM_PARTITIONS_COMPLETE
etNUM_TRIVIAL_PARTITIONS_COMPLETE
pour faire référence à la progression de précision plus précise.Si vous annulez un LMD partitionné à l'aide d'une requête RPC, celui-ci peut toujours apparaître dans la table. Si vous annulez un LMD partitionné en utilisant 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 sur les requêtes et les statistiques sur les transactions fournissent des informations utiles pour résoudre les problèmes de 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. Prenons l'exemple du scénario dans lequel l'utilisation du processeur est élevée et que 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 procéder comme suit.
- 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 une utilisation du processeur supérieure à la normale. Nous décidons donc d'exécuter la requête suivante pour renvoyer 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 obtenir plus d'informations sur les deux LMD partitionnés les plus anciens, en les triant 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;
text | 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 donc exécuter la commande gcloud spanner databases sessions delete
suivante pour supprimer la session en utilisant l'ID de session, ce qui annule le LMD partitionné.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
Étapes suivantes
- 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 la base de données.
- Découvrez les bonnes pratiques SQL pour Spanner.