Spanner fournit des tables intégrées qui enregistrent les statistiques des opérations de lecture (ou de requête), d'écriture et de suppression de vos tables (y compris les tables de flux de modifications) et de vos index. Avec les statistiques des opérations de table, vous pouvez effectuer les opérations suivantes:
Identifiez les tables avec une augmentation du trafic en écriture correspondant à l'augmentation de l'espace de stockage.
Identifiez les tables générant du trafic inattendu de lecture, d'écriture ou de suppression.
Identifier les tables très utilisées
Lorsque vous interrogez ou écrivez dans une table, le nombre d'opérations correspondant à la table est incrémenté d'une unité, quel que soit le nombre de lignes consultées.
Les métriques globales d'opérations par seconde d'une base de données peuvent être surveillées avec Operations per second
, Operations per second by API method
et d'autres métriques associées dans vos graphiques System Insights.
Qui peut en bénéficier ?
Spanner fournit les statistiques des opérations de la table dans le schéma SPANNER_SYS
. Les données SPANNER_SYS
ne sont disponibles que via les 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
.
Statistiques des opérations de la table
Les tables suivantes suivent les statistiques de lecture (ou de requête), d'écriture et de suppression de vos tables et index pendant une période spécifique:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE
: opérations à intervalles d'une minuteSPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE
: opérations à intervalles de 10 minutesSPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR
: opérations à intervalles d'une heure
Ces tables ont les propriétés suivantes :
Chaque table contient des données pour des intervalles de temps sans chevauchement de la longueur spécifiée par le nom de la table.
Les intervalles sont définis selon l'heure réelle. Les intervalles d'une minute commencent toutes les minutes, les intervalles de 10 minutes commencent toutes les 10 minutes à partir de l'heure, et les intervalles d'une heure commencent toutes les heures.
Par exemple, à 11:59:30, les intervalles les plus récents disponibles pour les requêtes SQL sont les suivants :
- 1 minute : 11:58:00 – 11:58:59
- 10 minutes : 11:40:00 – 11:49:59
- 1 heure : 10:00:00 – 10:59:59
Schéma de toutes les tables de statistiques sur les opérations de table
Nom de la colonne | Type | Description |
---|---|---|
INTERVAL_END |
TIMESTAMP |
Fin de l'intervalle de temps pendant lequel les tailles de table ont été collectées. |
TABLE_NAME |
STRING |
Nom de la table ou de l'index. |
READ_QUERY_COUNT |
INT64 |
Nombre de requêtes ou de lectures lues dans la table. |
WRITE_COUNT |
INT64 |
Nombre de requêtes en écriture dans la table. |
DELETE_COUNT |
INT64 |
Nombre de requêtes effectuant des suppressions dans la table. |
Si vous insérez des données dans votre base de données à l'aide de mutations, write_count
incrémente d'une unité pour chaque table accessible par l'instruction d'insertion. De plus, une requête qui accède à un index sans analyser la table sous-jacente n'incrémente que le read_query_count
de l'index.
Conservation des données
Spanner conserve au minimum les données de chaque table pour les périodes suivantes:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE
: intervalles couvrant les 6 heures précédentesSPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE
: intervalles couvrant les quatre jours précédentsSPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR
: intervalles couvrant les 30 derniers jours
Exemples de requêtes
Cette section inclut plusieurs exemples d'instructions SQL qui récupèrent des statistiques agrégées sur les opérations des tables. Vous pouvez exécuter ces instructions SQL à l'aide des bibliothèques clientes ou de la commande gcloud spanner.
Interroger les tables et les index avec le plus d'opérations en écriture pour l'intervalle le plus récent
SELECT interval_end, table_name, write_count FROM spanner_sys.table_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.table_operations_stats_minute) ORDER BY write_count DESC;
Interroger les tables et les index avec le plus d'opérations de suppression pour l'intervalle le plus récent
SELECT interval_end, table_name, delete_count FROM spanner_sys.table_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.table_operations_stats_minute) ORDER BY delete_count DESC;
Interroger les tables et les index avec le plus d'opérations de lecture et d'interrogation pour l'intervalle le plus récent
SELECT interval_end, table_name, read_query_count FROM spanner_sys.table_operations_stats_minute WHERE interval_end = ( SELECT MAX(interval_end) FROM spanner_sys.table_operations_stats_minute) ORDER BY read_query_count DESC;
Interroger l'utilisation d'une table au cours des 6 dernières heures
SELECT interval_end, read_query_count, write_count, delete_count FROM spanner_sys.table_operations_stats_minute WHERE table_name = table_name ORDER BY interval_end DESC;
Où :
table_name
doit être une table ou un index existant dans la base de données.
Interroger l'utilisation d'une table au cours des 14 derniers jours
GoogleSQL
SELECT interval_end, read_query_count, write_count, delete_count FROM spanner_sys.table_operations_stats_hour WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY) AND table_name = table_name ORDER BY interval_end DESC;
Où :
table_name
doit être une table ou un index existant dans la base de données.
Interroger les tables et les index qui n'ont pas été utilisés au cours des dernières 24 heures
GoogleSQL
(SELECT t.table_name FROM information_schema.tables AS t WHERE t.table_catalog = "" AND t.table_schema = "" AND t.table_type = "BASE TABLE" UNION ALL SELECT cs.change_stream_name FROM information_schema.change_streams cs WHERE cs.change_stream_catalog = "" AND cs.change_stream_schema = "" UNION ALL SELECT idx.index_name FROM information_schema.indexes idx WHERE idx.index_type = "INDEX" AND idx.table_catalog = "" AND idx.table_schema = "") EXCEPT ALL (SELECT DISTINCT(table_name) FROM spanner_sys.table_operations_stats_hour WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR));
Étapes suivantes
Utilisez les statistiques sur les tailles de table pour déterminer la taille de vos tables et de vos index.
Découvrez d'autres outils d'introspection.
Découvrez les bonnes pratiques SQL concernant Spanner.