Le langage de manipulation de données partitionné actif (LMD) fournit une progression en temps réel pour les 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 la progression associée.
Dans cet article, nous allons décrire la table en détail, présenter quelques exemples de requêtes qui l'utilisent et, enfin, dé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 où aucune ligne n'a été traitée. |
PROGRESS |
DOUBLE |
La progression d'un LMD partitionné est calculée en divisant le nombre de partitions non significatives terminées par le nombre total de partitions non significatives. |
ROWS_PROCESSED |
INT64 |
Nombre de lignes traitées jusqu'à présent, mis à jour une fois la partition terminée. |
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 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 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 les 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 |
SUPPRIMER de 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 | 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, de sorte que le LMD partitionné puisse continuer à mettre à jour des lignes tant 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 la colonne
PROGRESS
peut ne pas capturer toute la progression incrémentielle. UtilisezNUM_PARTITIONS_COMPLETE
etNUM_TRIVIAL_PARTITIONS_COMPLETE
pour indiquer une progression plus précise.Si vous annulez un LMD partitionné à l'aide d'une requête RPC, le LMD partitionné annulé 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 intensive 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 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 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 en cours d'exécution ?
- Que sont ces LMD partitionnés ?
- Combien de LMD partitionnés s'exécutent-ils 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'un LMD partitionné.
Dans le tutoriel suivant, nous allons examiner les LMD partitionnés actifs et déterminer l'action à effectuer, 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 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 génère le résultat suivant.
active_count |
---|
22 |
Lister 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 plus anciens LMD partitionnés en cours d'exécution, triés en fonction de 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 les 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 détecté un LMD partitionné qui est en cours d'exécution depuis plusieurs 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 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 concernant Spanner.