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:
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 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
etLAST_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. UtilisezNUM_PARTITIONS_COMPLETE
etNUM_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
- 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.