En esta página, se describe y explica cómo usar los arrendamientos de lectura de Spanner. Los arrendamientos de lectura ayudan a tus bases de datos a reducir la latencia de lectura sólida en regiones de lectura y escritura o de solo lectura a costa de una mayor latencia de escritura.
De forma predeterminada, cuando Spanner recibe una solicitud de lectura sólida en una región no líder, la réplica que entrega la lectura se comunica con la región de lectura y escritura líder de la instancia. Este contacto confirma que sus datos están actualizados antes de atender la solicitud. Este proceso genera un viaje de ida y vuelta de la red entre la región que recibe la solicitud y la región principal. A diferencia de la comunicación dentro de una sola región, la distancia geográfica entre regiones agrega latencia adicional a la solicitud.
El uso de concesiones de lectura de Spanner elimina la necesidad de este viaje de ida y vuelta. Cuando configuras una o más regiones de arrendamiento de lectura para tu base de datos, Spanner les otorga a esas regiones el derecho de entregar lecturas coherentes de forma local. Esto permite que las regiones que no son líderes publiquen directamente lecturas sólidas sin comunicarse con la región líder. La publicación de lecturas sólidas desde una región que no es líder y que está más cerca del cliente reduce la latencia en todas las regiones. Esto permite lograr una latencia dentro de la región para las lecturas sólidas en instancias birregionales o multirregionales. Cuando se habilitan los arrendamientos de lectura, las lecturas sólidas dentro de las transacciones de solo lectura se entregan de forma local sin comunicarse con el líder. En el caso de las transacciones de lectura y escritura, las lecturas se siguen dirigiendo a la región líder, a menos que uses el aislamiento de lectura repetible con el enrutamiento adaptado al líder inhabilitado.
Habilitar o inhabilitar la función de arrendamientos de lectura en una región no requiere tiempo de inactividad. Sin embargo, las escrituras experimentan una latencia mayor cuando usas la función, ya que habilitar el alquiler de lectura requiere que el líder se comunique con las regiones de alquiler de lectura cuando se realizan escrituras. Como efecto secundario, las escrituras mantienen los bloqueos durante más tiempo, lo que puede afectar las cargas de trabajo de escritura con alta contención. Para obtener más información, consulta Cuándo usar concesiones de lectura. El arrendamiento de lectura es más adecuado para las aplicaciones que desean compensar el aumento de la latencia de escritura con lecturas coherentes más rápidas. Por ejemplo, un sistema de control de acceso en el que la carga de trabajo tiene lecturas frecuentes, pero escrituras poco frecuentes.
Para obtener información sobre cómo habilitar las concesiones de lectura, consulta Usa concesiones de lectura.
Cuándo usar las concesiones de lectura
Habilita las concesiones de lectura si tu aplicación y carga de trabajo cumplen con los siguientes criterios:
- La latencia baja para lecturas sólidas es más importante que la latencia baja para escrituras.
- Tu carga de trabajo puede tolerar duraciones más largas de bloqueo de escritura o tiene una baja contención de escritura.
Cuando hay escrituras simultáneas, la elección entre usar las APIs de consulta o las APIs de lectura afecta el rendimiento de una base de datos que usa regiones de concesión de lectura.
Para obtener más información sobre la supervisión de la latencia, consulta Supervisión.
Ejemplo de caso de uso
Considera una aplicación implementada a nivel global que realiza escrituras en EE.UU. y tiene clientes en EE.UU., Europa y Asia. Puedes configurar una instancia multirregional de Spanner, como nam-eur-asia1
, con una región líder en us-central1
y réplicas de solo lectura en europe-west1
y asia-east1
.
Cuando habilitas el arrendamiento de lectura en las regiones de solo lectura europe-west1
y asia-east1
, Spanner entrega lecturas sólidas desde Europa y Asia a partir de esas réplicas locales, lo que reduce la latencia. La desventaja es un aumento en la latencia de escritura para todas las escrituras. El aumento de la latencia equivale al tiempo de ida y vuelta entre la región us-central1
líder y las regiones de arrendamiento de lectura más lejanas.
Limitaciones
Los arrendamientos de lectura de Spanner tienen las siguientes limitaciones:
- No puedes usar el arrendamiento de lectura con el geo-partitioning.
- Los arrendamientos de lectura no reducen la latencia de las lecturas que forman parte de una transacción de lectura y escritura. Si deseas lograr una latencia dentro de la región para las lecturas dentro de las transacciones de lectura y escritura, debes usar el nivel de aislamiento de lectura repetible y, luego, inhabilitar el enrutamiento adaptado al líder para usar concesiones de lectura. Incluso cuando se usa el aislamiento de lectura repetible, las lecturas en las transacciones de lectura y escritura aún se pueden dirigir a la región líder, en particular después de que se produjo una escritura dentro de la transacción, para garantizar la coherencia de lectura después de escritura.
- Si mueves tu instancia a una configuración diferente, no se conservará la configuración del alquiler de lectura. Debes volver a habilitar el arrendamiento de lectura en la base de datos después de que se complete la transferencia.
Usa concesiones de lectura
Debes habilitar las concesiones de lectura para poder usarla.
Control de acceso con IAM
Para establecer regiones de arrendamiento de lectura, un usuario necesita el permiso de IAM spanner.databases.create
o spanner.databases.updateDdl
. El rol predefinido de administrador de bases de datos (roles/spanner.databaseAdmin
) incluye estos permisos. Para obtener más información, consulta la Descripción general de IAM para Spanner.
Para obtener información sobre cómo otorgar permisos, consulta Cómo aplicar permisos de IAM.
Antes de comenzar para los usuarios de bases de datos de PostgreSQL
Si deseas usar el alquiler de lectura en una base de datos de PostgreSQL, realiza uno de los siguientes cambios de configuración en tu base de datos. De lo contrario, tus lecturas seguirán siendo atendidas por la región líder, incluso si estableciste regiones de arrendamiento de lectura.
Si solo usas transacciones de solo lectura, configura tu conexión de PostgreSQL de modo que el estado predeterminado de cada transacción nueva en la base de datos se establezca como de solo lectura. Para ello, configura la opción
default_transaction_read_only
entrue
.postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_transaction_read_only=true host=/tmp port=5432 database=DATABASE_ID \ options='-c default_transaction_read_only=true'
Reemplaza lo siguiente:
USER_ID con el identificador único de tu usuario.
PASSWORD con tu contraseña.
DATABASE_ID por el identificador único de tu base de datos.
Si deseas lograr una latencia de lectura dentro de la región en las transacciones de lectura y escritura, o si no siempre puedes cambiar tu opción de conexión, usa el nivel de aislamiento de lectura repetible y deshabilita el enrutamiento adaptado al líder. Estos parámetros de configuración son obligatorios incluso si tu transacción de lectura y escritura solo tiene lecturas. De lo contrario, las lecturas dentro de las transacciones de lectura y escritura siempre se dirigen a la región líder. En este tipo de transacción, la concesión de lectura se inhabilita después de que aparece la primera declaración DML de escritura. Esto se debe a que las escrituras siempre se dirigen a la región líder. Por lo tanto, para leer tu escritura, las lecturas posteriores también deben dirigirse a la región líder.
postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_isolation_level=REPEATABLE_READ -c routeToLeader=false host=/tmp port=5432 database=DATABASE_ID \ options='-c default_isolation_level=REPEATABLE_READ -c routeToLeader=false'
Habilita las concesiones de lectura
Para habilitar las concesiones de lectura cuando crees una base de datos nueva, configura la opción read_lease_regions
en la instrucción DDL ALTER DATABASE
(GoogleSQL, PostgreSQL):
Console
Ve a la página Instancias en la Google Cloud consola.
Selecciona la instancia en la que deseas habilitar el arrendamiento de lectura.
En la página Descripción general de la instancia que se abre, haz clic en Crear base de datos.
En el nombre de la base de datos, ingresa un nombre.
Selecciona un dialecto de la base de datos.
Haz clic en Crear.
La consola de Google Cloud muestra la página Descripción general de la base de datos que creaste.
En el menú de navegación, haz clic en Spanner Studio.
En la página Spanner Studio, haz clic en
Pestaña nueva o usa la pestaña del editor vacía.Ingresa la siguiente declaración DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Reemplaza lo siguiente:
DATABASE_ID por el identificador único de tu base de datos.
READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Reemplaza lo siguiente:
DATABASE_ID por el identificador único de tu base de datos.
READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
Haz clic en Ejecutar.
gcloud
Para establecer la opción de base de datos read_lease_regions
cuando crees tu base de datos, usa gcloud spanner databases create
.
GoogleSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.READ_LEASE_REGION
: Es la región en la que deseas habilitar el alquiler de lectura. Por ejemplo,europe-west1
Puedes habilitar el arrendamiento de lectura para varias regiones. Separa cada región con una coma.
PostgreSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.READ_LEASE_REGION
: Es la región en la que deseas habilitar el alquiler de lectura. Por ejemplo,europe-west1
Puedes habilitar el arrendamiento de lectura para varias regiones. Separa cada región con una coma.
Para habilitar el alquiler de lectura cuando actualizas una base de datos existente, configura la opción read_lease_regions
en la instrucción DDL ALTER DATABASE
(GoogleSQL, PostgreSQL):
Console
Ve a la página Instancias en la Google Cloud consola.
Selecciona la instancia en la que deseas habilitar el arrendamiento de lectura.
Selecciona la base de datos en la que deseas habilitar el arrendamiento de lectura.
En el menú de navegación, haz clic en Spanner Studio.
En la página de Spanner Studio, haz clic en
Nueva pestaña o usa la pestaña del editor vacía.Ingresa la siguiente declaración DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID \ SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Reemplaza lo siguiente:
DATABASE_ID por el identificador único de tu base de datos.
READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
PostgreSQL
ALTER DATABASE DATABASE_ID \ SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Reemplaza lo siguiente:
DATABASE_ID por el identificador único de tu base de datos.
READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
Haz clic en Ejecutar.
gcloud
Para establecer la opción de base de datos read_lease_regions
, usa gcloud spanner databases ddl update
.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.- READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.- READ_LEASE_REGION por la región en la que deseas habilitar el arrendamiento de lectura. Por ejemplo,
europe-west1
Puedes habilitar la concesión de lectura para varias regiones. Separa cada región con una coma.
Inhabilita las concesiones de lectura
El arrendamiento de lectura está inhabilitado de forma predeterminada.
Para actualizar y habilitar la función en una base de datos existente, configura la opción read_lease_regions
en la instrucción DDL ALTER DATABASE
(GoogleSQL, PostgreSQL) en NULL
:
Console
Ve a la página Instancias en la Google Cloud consola.
Selecciona la instancia en la que deseas inhabilitar el arrendamiento de lectura.
Selecciona la base de datos en la que deseas inhabilitar el alquiler de lectura.
En el menú de navegación, haz clic en Spanner Studio.
En la página de Spanner Studio, haz clic en
Nueva pestaña o usa la pestaña del editor vacía.Ingresa la siguiente declaración DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
Reemplaza DATABASE_ID por el identificador único de tu base de datos.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
Reemplaza DATABASE_ID por el identificador único de tu base de datos.
Haz clic en Ejecutar.
gcloud
Para establecer la opción de base de datos read_lease_regions
, usa gcloud spanner databases ddl update
.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"
Reemplaza lo siguiente:
DATABASE_ID
: Es el identificador permanente de tu base de datos de Spanner.INSTANCE_ID
: Es el identificador permanente de tu instancia de Spanner.
Prácticas recomendadas
Para maximizar los beneficios de usar esta función, usa sesiones multiplexadas, que te permiten crear una gran cantidad de solicitudes simultáneas en una sola sesión.
Supervisar
Después de habilitar el arrendamiento de lectura, es importante supervisar la latencia para confirmar que la función logra el efecto deseado. Para ello, identifica la región principal y las regiones con arrendamiento de lectura habilitado consultando la tabla del esquema de información data_options
(GoogleSQL, PostgreSQL) o tu base de datos. Las regiones que tienen habilitado el arrendamiento de lectura esperan que las lecturas sólidas tengan latencia dentro de la región. Al mismo tiempo, la latencia de escritura aumenta con un tiempo de ida y vuelta entre la región líder y la región más lejana con el arrendamiento de lectura habilitado.
También puedes usar la siguiente métrica de latencia de Spanner para supervisar las latencias de las solicitudes de lectura en tus instancias:
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Puedes filtrar esta métrica con el campo /serving_location
. El campo /serving location
indica la ubicación del servidor de Spanner desde el que se entrega la solicitud.
Para obtener una lista completa de las métricas disponibles, consulta la lista de métricas de Spanner.
Consideraciones de costo
Las lecturas sólidas que se entregan desde regiones con la función de arrendamiento de lectura habilitada usan un poco menos recursos de procesamiento. Por otro lado, las escrituras para bases de datos con la función de arrendamiento de lectura habilitada usan un poco más de recursos de procesamiento. Para obtener más información, consulta Precios de la capacidad de procesamiento de Spanner.
La función no afecta otros componentes de precios, como el almacenamiento y la red.
¿Qué sigue?
- Obtén más información sobre la replicación de Spanner.
- Obtén más información sobre las lecturas fuera de las transacciones.