Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Spanner proporciona tablas integradas que registran estadísticas de operaciones de lectura, consulta y escritura para las columnas de tu tabla. Con las estadísticas de operaciones de columnas, puedes hacer lo siguiente:
Identifica las columnas con tráfico de lectura, escritura y consultas inesperado.
Identifica las columnas que se usan con frecuencia.
Cuando consultas o escribes en una columna, Spanner incrementa en uno el recuento de operaciones correspondiente para esa columna, independientemente de la cantidad de filas a las que se accede.
Puedes supervisar el rendimiento general de una base de datos con métricas que miden las operaciones por segundo, las operaciones por segundo por método de API y otras métricas relacionadas en tus gráficos de System Insights.
Cómo acceder a las estadísticas de operaciones de columnas
Spanner proporciona las estadísticas de las operaciones de columna en el esquema SPANNER_SYS. Puedes usar lo siguiente para acceder a los datos de SPANNER_SYS:
La página de Spanner Studio de una base de datos en la consola de Google Cloud
En las siguientes tablas, se realiza un seguimiento de las estadísticas de lectura, consulta y escritura en tus columnas durante un período específico:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Operaciones en intervalos de 1 minuto
SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Operaciones en intervalos de 10 minutos
SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Operaciones en intervalos de 1 hora
Estas tablas tienen las siguientes propiedades:
Cada tabla contiene datos de intervalos de tiempo no superpuestos de la longitud que se especifica en el nombre de la tabla.
Los intervalos de 1 minuto comienzan en el minuto, los intervalos de 10 minutos comienzan cada 10 minutos a partir de la hora y los intervalos de 1 hora comienzan en la hora.
Por ejemplo, a las 11:59:30 a.m., las consultas de SQL pueden acceder a los siguientes intervalos más recientes:
1 minuto: de 11:58:00 a 11:58:59 a.m.
10 minutos: de 11:40:00 a 11:49:59 a.m.
1 hora: de 10:00:00 a 10:59:59 a.m.
Esquema para todas las tablas de estadísticas de operaciones de columnas
Nombre de la columna
Tipo
Descripción
INTERVAL_END
TIMESTAMP
Es el final del intervalo en el que se recopilaron las estadísticas de uso de la columna.
TABLE_NAME
STRING
Nombre de la tabla o el índice.
COLUMN_NAME
STRING
Nombre de la columna.
READ_COUNT
INT64
Cantidad de lecturas de la columna.
QUERY_COUNT
INT64
Cantidad de consultas que leen la columna.
WRITE_COUNT
INT64
Es la cantidad de consultas que escriben en la tabla.
IS_QUERY_CACHE_MEMORY_CAPPED
BOOL
Indica si la recopilación de estadísticas se limitó debido a la presión de la memoria.
Si insertas datos en tu base de datos con mutaciones, Spanner incrementa WRITE_COUNT en 1 por cada tabla a la que accede la instrucción de inserción. Además, una consulta que accede a un índice sin analizar la tabla subyacente solo incrementa el QUERY_COUNT en el índice.
Retención de datos
Como mínimo, Spanner conserva los datos para cada tabla durante los siguientes períodos:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Intervalos que abarcan las seis horas anteriores.
SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Intervalos que abarcan los cuatro días anteriores.
SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Intervalos que abarcan los 30 días anteriores.
Consultas de ejemplo
En esta sección, se incluyen varias instrucciones de SQL de ejemplo que recuperan estadísticas agregadas de operaciones de columnas. Puedes ejecutar estas instrucciones de SQL con las bibliotecas cliente o la CLI de Google Cloud.
Consulta las columnas de la tabla con la mayor cantidad de operaciones de escritura para el intervalo más reciente
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-05 (UTC)"],[],[],null,["# Column operations statistics\n\nSpanner provides built-in tables that record read, query, and write\noperation statistics for your table columns. With column operations statistics\nyou can do the following:\n\n- Identify columns with unexpected read, query, and write traffic.\n\n- Identify heavily-used columns.\n\nWhen you query or write to a column, Spanner increments the\ncorresponding operation count for that column increments by one, regardless of the\nnumber of rows accessed.\n\nYou can monitor a database's overall using metrics that measure\noperations-per-second, operations per second by API method, and other\nrelated metrics within your [System Insights](/spanner/docs/monitoring-console)\ncharts.\n\nAccess column operations statistics\n-----------------------------------\n\nSpanner provides the column operations statistics in the\n`SPANNER_SYS` schema. You can use the following to access `SPANNER_SYS` data:\n\n- A database's Spanner Studio page in the Google Cloud console\n\n- The [`gcloud spanner databases execute-sql`](/sdk/gcloud/reference/spanner/databases/execute-sql) command\n\n- The [`executeSql`](/spanner/docs/reference/rest/v1/projects.instances.databases.sessions/executeSql)\n or the [`executeStreamingSql`](/spanner/docs/reference/rest/v1/projects.instances.databases.sessions/executeStreamingSql)\n method.\n\nThe following single read methods that Spanner provides\ndon't support `SPANNER_SYS`:\n\n- Performing a strong read from a single row or multiple rows in a table.\n- Performing a stale read from a single row or multiple rows in a table.\n- Reading from a single row or multiple rows in a secondary index.\n\nFor more information, see [Single read methods](/spanner/docs/reads#single_read_methods).\n\nColumn operations statistics\n----------------------------\n\nThe following tables track the read, query, and write statistics on your columns\nduring a specific time period:\n\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE`: Operations during 1-minute intervals\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE`: Operations during 10-minute intervals\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR`: Operations during 1-hour intervals\n\nThese tables have the following properties:\n\n- Each table contains data for non-overlapping time intervals of the length that\n the table name specifies.\n\n- 1-minute intervals start on the minute,\n 10-minute intervals start every 10 minutes starting on the hour, and 1-hour\n intervals start on the hour.\n\n For example, at 11:59:30 AM, SQL queries can access the following most\n recent intervals:\n - **1 minute**: 11:58:00--11:58:59 AM\n - **10 minute**: 11:40:00--11:49:59 AM\n - **1 hour**: 10:00:00--10:59:59 AM\n\n### Schema for all column operations statistics tables\n\nIf you insert data into your database using mutations, Spanner\nincrements the `WRITE_COUNT` by 1 for each table that the insert statement\naccesses. In addition, a query that accesses an index without scanning the\nunderlying table only increments the `QUERY_COUNT` on the index.\n\nData retention\n--------------\n\nAt a minimum, Spanner keeps data for each table for the following\ntime periods:\n\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE`: Intervals covering the previous\n six hours.\n\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE`: Intervals covering the\n previous four days.\n\n- `SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR`: Intervals covering the previous 30\n days.\n\n| **Note:** You can't prevent Spanner from collecting column operations statistics. To delete the data in these tables, you must delete the database associated with them or wait until Spanner removes the data after the data retention period ends.\n\n### Example queries\n\nThis section includes several example SQL statements that retrieve aggregate\ncolumn operations statistics. You can run these SQL statements using the\n[client libraries](/spanner/docs/reference/libraries) or the\n[Google Cloud CLI](/spanner/docs/gcloud-spanner#execute_sql_statements).\n\n#### Query the table columns with the most write operations for the most recent interval\n\n### GoogleSQL\n\n\n```googlesql\n SELECT interval_end,\n table_name,\n column_name,\n write_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE interval_end = (\n SELECT MAX(interval_end)\n FROM spanner_sys.column_operations_stats_minute)\n ORDER BY write_count DESC;\n```\n\n\u003cbr /\u003e\n\n### PostgreSQL\n\n\n```postgresql\n SELECT interval_end,\n table_name,\n column_name,\n write_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE interval_end = (\n SELECT MAX(interval_end)\n FROM spanner_sys.column_operations_stats_minute)\n ORDER BY write_count DESC;\n```\n\n\u003cbr /\u003e\n\n#### Query the columns with the most query operations for the most recent interval\n\n### GoogleSQL\n\n\n```googlesql\n SELECT interval_end,\n table_name,\n column_name,\n query_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE interval_end = (\n SELECT MAX(interval_end)\n FROM spanner_sys.column_operations_stats_minute)\n ORDER BY query_count DESC;\n```\n\n\u003cbr /\u003e\n\n### PostgreSQL\n\n\n```postgresql\n SELECT interval_end,\n table_name,\n column_name,\n query_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE interval_end = (\n SELECT MAX(interval_end)\n FROM spanner_sys.column_operations_stats_minute)\n ORDER BY query_count DESC;\n```\n\n\u003cbr /\u003e\n\n#### Query the usage of a column over the last 6 hours\n\n### GoogleSQL\n\n```googlesql\n SELECT interval_end,\n read_count,\n query_count,\n write_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE table_name = \"\u003cvar translate=\"no\"\u003etable_name\u003c/var\u003e\"\n AND column_name = \"\u003cvar translate=\"no\"\u003ecolumn_name\u003c/var\u003e\"\n ORDER BY interval_end DESC;\n \n```\n\nWhere:\n\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003etable_name\u003c/code\u003e\u003c/var\u003e must be an existing table or index in the database.\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003ecolumn_name\u003c/code\u003e\u003c/var\u003e must be an existing column in the table.\n\n### PostgreSQL\n\n```postgresql\n SELECT interval_end,\n read_count,\n query_count,\n write_count\n FROM spanner_sys.column_operations_stats_minute\n WHERE table_name = '\u003cvar translate=\"no\"\u003etable_name\u003c/var\u003e'\n AND column_name = '\u003cvar translate=\"no\"\u003ecolumn_name\u003c/var\u003e'\n ORDER BY interval_end DESC;\n \n```\n\nWhere:\n\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003etable_name\u003c/code\u003e\u003c/var\u003e must be an existing table or index in the database.\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003ecolumn_name\u003c/code\u003e\u003c/var\u003e must be an existing column in the table.\n\n#### Query the usage of a column over the last 14 days\n\n### GoogleSQL\n\n```googlesql\nSELECT interval_end,\n read_count,\n query_count,\n write_count\nFROM spanner_sys.column_operations_stats_hour\nWHERE interval_end \u003e TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)\n AND table_name = \"\u003cvar translate=\"no\"\u003etable_name\u003c/var\u003e\"\n AND column_name = \"\u003cvar translate=\"no\"\u003ecolumn_name\u003c/var\u003e\"\nORDER BY interval_end DESC;\n```\n\nMake the following replacements:\n\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003etable_name\u003c/code\u003e\u003c/var\u003e: table or index name in the database.\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003ecolumn_name\u003c/code\u003e\u003c/var\u003e: column name in the table.\n\n### PostgreSQL\n\n```postgresql\nSELECT interval_end,\n read_count,\n query_count,\n write_count\nFROM spanner_sys.column_operations_stats_hour\nWHERE interval_end \u003e spanner.timestamptz_subtract(now(), '14 DAY')\n AND table_name = '\u003cvar translate=\"no\"\u003etable_name\u003c/var\u003e'\n AND column_name = '\u003cvar translate=\"no\"\u003ecolumn_name\u003c/var\u003e'\nORDER BY interval_end DESC;\n```\n\nMake the following replacements:\n\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003etable_name\u003c/code\u003e\u003c/var\u003e: table or index name in the database.\n- \u003cvar translate=\"no\"\u003e\u003ccode translate=\"no\" dir=\"ltr\"\u003ecolumn_name\u003c/code\u003e\u003c/var\u003e: column name in the table.\n\nWhat's next\n-----------\n\n- Learn about other [Built-in statistics tables](/spanner/docs/introspection).\n\n- Learn more about [SQL best practices](/spanner/docs/sql-best-practices) for\n Spanner."]]