L'onglet LMD (langage de manipulation de données) 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 leur progression.
Cette page décrit la table en détail, affiche des exemples de requêtes utilisant cette table et, pour finir, vous montre comment utiliser ces requêtes 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 utilisant le dialecte GoogleSQL et le dialecte PostgreSQL.
Accéder aux statistiques LMD partitionnées actives
Spanner fournit les statistiques LMD partitionnées actives dans le schéma SPANNER_SYS
. Vous pouvez accéder aux données SPANNER_SYS
de différentes manières :
Page Spanner Studio d'une base de données dans la console Google Cloud .
La commande
gcloud spanner databases execute-sql
La méthode
executeSql
ouexecuteStreamingSql
.
Les méthodes de lecture unique suivantes fournies par Spanner ne sont pas compatibles avec SPANNER_SYS
:
- effectuer une lecture forte à partir d'une ou de plusieurs lignes d'une table ;
- effectuer une lecture non actualisée à partir d'une ou de plusieurs lignes d'une table ;
- lire à partir d'une ou de plusieurs lignes d'un index secondaire.
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
Vous trouverez ci-dessous le schéma de la table 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 pour lesquelles le LMD partitionné a été effectué. |
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 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'un LMD partitionné. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Dernier code temporel indiquant la progression du LMD partitionné. Mise à jour après 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 la Google Cloud CLI ou de la consoleGoogle Cloud .
Répertorier les requêtes en cours les plus anciennes
La requête suivante renvoie la liste des DML partitionnés en cours d'exécution, triés 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 | progress | 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. Il est donc possible que le LMD partitionné continue de mettre à jour les lignes alors 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 refléter toute la progression incrémentielle. UtilisezNUM_PARTITIONS_COMPLETE
etNUM_TRIVIAL_PARTITIONS_COMPLETE
pour indiquer une progression plus précise.Si vous annulez une instruction LMD partitionnée à l'aide d'une requête RPC, elle peut toujours apparaître dans la table. 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 est en cours d'exécution 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 ?
- Qu'est-ce que le LMD partitionné ?
- 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'un LMD partitionné.
Dans le tutoriel suivant, nous allons examiner les DML partitionnés actifs et déterminer les mesures à prendre, le cas échéant.
Récupérer un récapitulatif 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és actifs.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La requête donne le résultat suivant.
active_count |
---|
22 |
Répertorier les deux opérations LMD partitionnées en cours les plus anciennes
Nous pouvons ensuite exécuter une requête pour en savoir plus sur les deux instructions LMD partitionnées en cours les plus anciennes, triées par heure de début.
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 | progress | 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 coûteuse
Nous avons trouvé un LMD partitionné qui s'exécute depuis des jours sans progresser. 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 cette base de données.
- Explorez les bonnes pratiques SQL relatives à Spanner.