En esta página se describe cómo crear y gestionar puntos de división en tu base de datos. Puedes crear puntos de división para dividir previamente tu base de datos y prepararte para un aumento previsto del tráfico. Para obtener más información sobre la división previa, consulta el artículo Introducción a la división previa.
Antes de empezar
-
Para obtener el permiso que necesitas para crear y gestionar puntos de división, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de base de datos de Cloud Spanner (
roles/spanner.databaseAdmin
) en tu instancia. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.Este rol predefinido contiene el permiso
spanner.databases.addSplitPoints
, que es necesario para crear y gestionar puntos de división.También puedes obtener este permiso con roles personalizados u otros roles predefinidos.
En los ejemplos de la CLI gcloud de esta página se dan por supuestos los siguientes aspectos:
- Has configurado gcloud CLI para usarlo con Spanner. Si es la primera vez que usas la CLI de gcloud con Spanner, consulta el artículo Crear y consultar una base de datos con la CLI de gcloud.
Has configurado gcloud CLI con tu proyecto. Por ejemplo:
gcloud config set core/project PROJECT_ID
Asegúrate de que tu instancia de Spanner tenga suficientes nodos para admitir el aumento de tráfico previsto. Para obtener más información, consulta la introducción a la prepartición.
Crear puntos de división
Puedes crear puntos de división con Google Cloud CLI o las APIs REST.
gcloud
Si quieres crear puntos de división con la CLI de Google Cloud, debes crear un archivo que contenga todas las divisiones y proporcionar la ruta en el comando de la CLI de gcloud. El archivo no debe superar el límite de la API de 100 puntos por solicitud de API. Para obtener más información, consulta Cuotas y límites.
El archivo debe usar el siguiente formato para especificar los puntos de división:
ObjectType ObjectName (SplitValue1)
ObjectType ObjectName (SplitValue2)
ObjectType ObjectName (SplitValueN)
Sustituye las siguientes variables al crear el archivo:
- ObjectType: el tipo de objeto en el que quieres añadir divisiones. Los valores válidos son
TABLE
yINDEX
. - ObjectName: el nombre de la tabla o el índice de la base de datos.
- SplitValue1..N: los valores de los puntos de división en los que quieras introducir las divisiones.
Siga estas reglas al crear los valores de punto de división en el archivo:
- Los valores de cadena deben ir entre comillas simples. Por ejemplo,
'splitKeyPart'
- Los valores booleanos deben ser
true
ofalse
. - Los valores de los tipos de datos
INT64
yNUMERIC
de Spanner deben ir entre comillas simples. Por ejemplo,'123'
o'99.99'
. - El resto de los valores numéricos deben escribirse sin comillas simples. Por ejemplo,
1.287
. - Los valores de marca de tiempo deben proporcionarse en el
'2020-06-18T17:24:53Z'
formato entre comillas simples. - Los valores divididos deben estar entre paréntesis.
- El orden de los valores de las claves de división debe ser el mismo que el de las claves principales.
- Si el valor de división debe incluir una coma, debes usar el carácter `\` para escapar la coma.
- Para dividir índices, puede proporcionar la clave de índice o el índice completo y la clave de tabla completa.
- Siempre debes usar la clave completa al especificar el punto de división.
A continuación, se muestra un archivo de ejemplo que indica cómo se especifican los puntos de división:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9d̦b22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SPLITS_FILE: la ruta al archivo de divisiones.
- INSTANCE_ID: el ID de instancia.
- DATABASE_ID: el ID de la base de datos.
-
EXPIRATION_DATE:
(opcional) la fecha de vencimiento de los puntos divididos. Acepta una marca de tiempo en formato
'2020-06-18T17:24:53Z'
. - INITIATOR: (opcional) el iniciador de los puntos de división.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
Puedes usar el método
projects.instances.databases.addSplitPoints
para crear puntos de división.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto.
- INSTANCE_ID: el ID de instancia.
- DATABASE_ID: el ID de la base de datos.
Método HTTP y URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Cuerpo JSON de la solicitud:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.
Bibliotecas de cliente
Go
Java
Node.js
Python
Posibles situaciones de error
En los siguientes casos, se puede producir un error al crear puntos de división:
- La división de nivel de índice tiene un nombre de tabla incorrecto en la entrada.
- El punto de división del nivel de la tabla tiene más de una clave.
- El punto de división del nivel de índice tiene más de dos claves.
- Los puntos de división se definen en tablas o índices que no están definidos en el esquema de la base de datos.
- La solicitud contiene puntos de división duplicados.
Para obtener información sobre las cuotas y los límites, consulta Cuotas y límites.
Ver puntos divididos
Puedes ver todos los puntos de división creados en tu base de datos con laGoogle Cloud consola o la CLI de gcloud:
Consola
Para obtener el recuento de puntos de división consultando la vista SPANNER_SYS.USER_SPLIT_POINTS
de la consola, Google Cloud haz lo siguiente:
Abre la página Instancias de Spanner.
Selecciona los nombres de la instancia de Spanner y de la base de datos que quieras consultar.
En el panel de navegación de la izquierda, haga clic en Spanner Studio.
Escribe la siguiente consulta en el campo de texto:
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTS
Haz clic en Realizar una consulta.
Aparecerá un resultado similar al siguiente:
TABLE_NAME | INDEX_NAME | INITIATOR | SPLIT_KEY | EXPIRE_TIME |
---|---|---|---|---|
B | CloudAddSplitPointsAPI | T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-06T09:58:58.007201Z | |
B | T_IDX | CloudAddSplitPointsAPI | Índice: T_IDX en T, clave de índice: (10), clave de tabla principal: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
B | T_IDX | CloudAddSplitPointsAPI | Índice: T_IDX en T, clave de índice: (9091), clave de tabla principal: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
Ejecuta el siguiente comando de la CLI de gcloud para ver los puntos de división de tu base de datos:
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
Sustituye las siguientes variables al ejecutar este comando:
- INSTANCE_ID: el ID de la instancia de Spanner.
- DATABASE_ID: el ID de la base de datos de Spanner.
Aparecerá una respuesta similar a la siguiente:
TABLE_NAME: T
INDEX_NAME:
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-06T09:58:58.007201Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
EXPIRE_TIME: 2025-03-08T07:33:23.861682Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-08T07:35:25.990007Z
Cómo caducar un punto de división
Puedes definir un tiempo de vencimiento para cada punto de división que crees. Para obtener más información, consulta Vencimiento de los puntos de división. Puedes hacer que los puntos de división caduquen mediante la CLI de Google Cloud o las APIs REST.
gcloud
Si quieres que los puntos de división caduquen con la CLI de Google Cloud, debes crear un archivo que contenga todas las divisiones que quieras que caduquen y proporcionar su ruta mediante el parámetro splits-file
en el comando de la CLI de gcloud. El archivo no debe superar el límite de la API de 100 puntos por solicitud de API. Para obtener más información, consulta Cuotas y límites.
El archivo debe usar el siguiente formato para especificar los puntos de división:
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
ObjectType ObjectName (SplitValue)
Sustituye las siguientes variables al crear el archivo:
- ObjectType: el tipo de objeto de la división que quieres que caduque. Los valores válidos son
TABLE
yINDEX
. - ObjectName: el nombre de la tabla o el índice de la base de datos.
- SplitValue: el valor del punto de división que quieres que caduque.
Siga estas reglas al crear los valores de punto de división en el archivo:
- Los valores de cadena deben ir entre comillas simples. Por ejemplo,
'splitKeyPart'
- Los valores booleanos pueden ser
true
ofalse
. - Los valores de los tipos de datos
INT64
yNUMERIC
de Spanner deben ir entre comillas simples. Por ejemplo,'123'
o'99.99'
. - El resto de los valores numéricos deben escribirse sin comillas simples. Por ejemplo,
1.287
. - Los valores de marca de tiempo deben proporcionarse en el
'2020-06-18T17:24:53Z'
formato entre comillas simples. - Los valores divididos deben estar entre paréntesis.
- El orden de los valores de las claves de división debe ser el mismo que el de las claves principales.
- Si el valor de división debe incluir una coma, debes usar el carácter `\` para escapar la coma.
- Para dividir índices, puede proporcionar la clave de índice o el índice completo y la clave de tabla completa.
- Siempre debes usar la clave completa al especificar el punto de división.
A continuación, se muestra un archivo de ejemplo que indica cómo se especifican los puntos de división:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey
(123,'ab\,c')
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- SPLITS_FILE: la ruta al archivo de divisiones.
- INSTANCE_ID: el ID de instancia.
- DATABASE_ID: el ID de la base de datos.
-
EXPIRATION_DATE:
(opcional) la fecha de vencimiento de los puntos divididos. Acepta una marca de tiempo en formato
'2020-06-18T17:24:53Z'
. - INITIATOR: (opcional) el iniciador de los puntos de división.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto.
- INSTANCE_ID: el ID de instancia.
- DATABASE_ID: el ID de la base de datos.
Método HTTP y URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Cuerpo JSON de la solicitud:
{ "split_points": [ { "table": "T1", "index": "T1_IDX", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 3 ] } }, { "key_parts": { "values": [ 10 ] } } ] }, { "table": "T2", "expire_time": "2023-04-22T10:00:20.021Z", "keys": [ { "key_parts": { "values": [ 50 ] } } ] } ] }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.