Leer arrendamiento

En esta página se describe y se 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 en regiones que no son líderes en las transacciones que requieren una coherencia sólida.

De forma predeterminada, cuando Spanner recibe una solicitud de lectura sólida en una región que no es la principal, la réplica que sirve la lectura se pone en contacto con la región de lectura y escritura principal de la instancia. Este contacto confirma que sus datos están actualizados antes de atender la solicitud. Este proceso implica un ciclo de ida y vuelta de la red entre la región que recibe la solicitud y la región líder. A diferencia de la comunicación dentro de una misma región, la distancia geográfica entre regiones añade latencia adicional a la solicitud.

Si se usan concesiones de lectura de Spanner, no es necesario hacer este viaje de ida y vuelta. Cuando defines una o varias regiones de concesión de lectura para tu base de datos, Spanner otorga el derecho de servir lecturas de forma local a una o varias regiones que no sean principales, de lectura y escritura o de solo lectura. De esta forma, las regiones que no son líderes pueden ofrecer lecturas sólidas directamente sin comunicarse con la región líder. Servir lecturas sólidas desde una región que no sea la principal y que esté más cerca del cliente reduce la latencia entre regiones. De esta forma, se consigue una latencia intrarregional para las lecturas sólidas en instancias birregionales o multirregionales.

Habilitar o inhabilitar la función de concesiones de lectura en una región no requiere tiempo de inactividad. Sin embargo, las escrituras experimentan una latencia mayor cuando se usa la función, ya que para habilitar el bloqueo de lectura, el líder debe ponerse en contacto con las regiones de bloqueo de lectura al servir las escrituras. Como efecto secundario, las escrituras mantienen los bloqueos durante más tiempo, lo que puede afectar a las cargas de trabajo de escritura con mucha contención. Para obtener más información, consulta Cuándo usar los bloqueos de lectura. La lectura de concesión es más adecuada para las aplicaciones que están dispuestas a sacrificar una mayor latencia de escritura para obtener lecturas sólidas 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 habituales.

Para saber cómo habilitar las concesiones de lectura en una región que no es líder, consulta el artículo Usar concesiones de lectura.

Cuándo usar las concesiones de lectura

Habilita las concesiones de lectura si tu aplicación y tu carga de trabajo cumplen los siguientes criterios:

  • Es más importante que la latencia sea baja para las lecturas sólidas que para las escrituras.
  • Tu carga de trabajo puede tolerar duraciones de bloqueo de escritura más largas o tiene una baja contención de escritura.

Si habilitas las concesiones de lectura, aumenta la latencia de escritura, lo que provoca que los bloqueos de escritura se mantengan durante más tiempo. Si tu carga de trabajo de escritura ya tiene una alta contención de escritura, esta función puede empeorar la latencia de escritura y reducir el rendimiento.

Cuando hay escrituras simultáneas, la elección entre usar las APIs de consulta o las APIs de lectura afecta al rendimiento de una base de datos que usa regiones de concesión de lectura.

Para ejecutar instrucciones SQL en Spanner, es necesario leer datos de varias filas o intervalos. Cuando se usan APIs de consulta con los arrendamientos de lectura habilitados, las lecturas deben esperar a que se completen las escrituras simultáneas para que sean correctas. Por lo tanto, es posible que observes una latencia mayor, sobre todo cuando haya más carga de escritura. Las APIs de lectura suelen tolerar mejor las escrituras simultáneas que las APIs de consulta. Si utiliza con frecuencia APIs de consulta con cargas de escritura elevadas, considere la posibilidad de reducir la frecuencia de las escrituras o de usar lecturas obsoletas.

Las APIs de lectura están optimizadas para leer filas o intervalos de datos específicos. Solo tienen que esperar a que se escriban los datos exactos que intentan leer. Si usas APIs de lectura, solo las escrituras en los mismos intervalos de datos exactos bloquearán tus lecturas. Por lo tanto, cuando hay escrituras simultáneas y usas regiones de concesión de lectura, las lecturas sólidas de Spanner funcionan mejor y tienen una latencia menor.

Para obtener más información sobre la monitorización de la latencia, consulta Monitor.

Caso práctico de ejemplo

Imagina una aplicación desplegada a nivel mundial que realiza escrituras en EE. UU. y tiene clientes en EE. UU., Europa y Asia. Puedes configurar una instancia de Spanner multirregional, como nam-eur-asia1, con una región principal en us-central1 y réplicas de solo lectura en europe-west1 y asia-east1.

Cuando habilitas el bloqueo de lectura en las regiones de solo lectura europe-west1 y asia-east1, Spanner sirve lecturas sólidas desde Europa y Asia desde esas réplicas locales, lo que reduce la latencia. La contrapartida es un aumento de la latencia de escritura en todas las escrituras. El aumento de la latencia equivale al tiempo de ida y vuelta entre la región del líder us-central1 y las regiones de arrendamiento de lectura más lejanas.

Limitaciones

Los arrendamientos de lectura de Spanner tienen las siguientes limitaciones:

  • No puedes habilitar el bloqueo de lectura en una región testigo.
  • No puedes usar el bloqueo de lectura con particiones geográficas.
  • Los bloqueos de lectura no reducen la latencia de las lecturas que forman parte de una transacción de lectura y escritura. Aunque una transacción de lectura y escritura solo contenga lecturas, estas se seguirán sirviendo desde la región líder.
  • Si mueves tu instancia a otra configuración de instancia, los ajustes de concesión de lectura no se conservarán. Debe volver a habilitar el bloqueo de lectura en la base de datos una vez que se haya completado el traslado.

Usar concesiones de lectura

Para poder usarla, debes habilitar las concesiones de lectura.

Control de acceso con la gestión de identidades y accesos

Para definir regiones de concesión de lectura, un usuario necesita el permiso de IAM spanner.databases.create o spanner.databases.updateDdl. El rol predefinido Administrador de base de datos (roles/spanner.databaseAdmin) incluye estos permisos. Para obtener más información, consulta la información general sobre la gestión de identidades y accesos en Spanner.

Para obtener información sobre cómo conceder permisos, consulta Aplicar permisos de gestión de identidades y accesos.

Antes de empezar para los usuarios de bases de datos PostgreSQL

Si quieres usar el bloqueo de lectura en una base de datos de PostgreSQL, haz uno de los siguientes cambios en la configuración de tu base de datos. De lo contrario, las lecturas seguirán sirviéndose desde la región principal, aunque hayas definido regiones de concesión de lectura.

  • Si solo usas transacciones de solo lectura, configura tu conexión de PostgreSQL para que el estado predeterminado de cada nueva transacción de la base de datos sea de solo lectura. Para ello, asigna el valor true a la opción default_transaction_read_only.

    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'
    

    Haz los cambios siguientes:

    • USER_ID con el identificador único de su usuario.

    • PASSWORD con tu contraseña.

    • DATABASE_ID con el identificador único de tu base de datos.

Habilitar las concesiones de lectura

Para habilitar los bloqueos de lectura al crear una base de datos, define la opción read_lease_regions en la instrucción DDL ALTER DATABASE (GoogleSQL, PostgreSQL) :

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras habilitar el bloqueo de lectura.

  3. En la página Resumen de la instancia que se abre, haz clic en Crear base de datos.

  4. En el nombre de la base de datos, introduce un nombre.

  5. Selecciona un dialecto de base de datos.

  6. Haz clic en Crear.

    La consola Google Cloud muestra la página Información general de la base de datos que has creado.

  7. En el menú de navegación, haz clic en Spanner Studio.

  8. En la página Spanner Studio, haz clic en Nueva pestaña o usa la pestaña del editor vacía.

  9. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

    PostgreSQL

    ALTER DATABASE DATABASE_ID
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

  10. Haz clic en Ejecutar.

gcloud

Para definir la opción de base de datos read_lease_regions al crear la 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');"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION: la región en la que quieras habilitar el alquiler de lectura. Por ejemplo, europe-west1. Puedes habilitar el bloqueo 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';"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION: la región en la que quieras habilitar el alquiler de lectura. Por ejemplo, europe-west1. Puedes habilitar el bloqueo de lectura para varias regiones. Separa cada región con una coma.

Para habilitar el bloqueo de lectura al actualizar una base de datos, define la opción read_lease_regions en la instrucción ALTER DATABASE (GoogleSQL, PostgreSQL) DDL:

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras habilitar el bloqueo de lectura.

  3. Selecciona la base de datos en la que quieras habilitar el bloqueo de lectura.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. En la página Spanner Studio, haga clic en Nueva pestaña o use la pestaña del editor vacía.

  6. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID \
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

    PostgreSQL

    ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

  7. Haz clic en Ejecutar.

gcloud

Para definir 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');"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión 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';"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

Inhabilitar las concesiones de lectura

El bloqueo de lectura está inhabilitado de forma predeterminada.

Para actualizar y inhabilitar la función en una base de datos, define la opción read_lease_regions en la instrucción DDL ALTER DATABASE (GoogleSQL, PostgreSQL) como NULL:

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras inhabilitar el bloqueo de lectura.

  3. Selecciona la base de datos en la que quieras inhabilitar el bloqueo de lectura.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. En la página Spanner Studio, haga clic en Nueva pestaña o use la pestaña del editor vacía.

  6. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
    

    Sustituye DATABASE_ID por el identificador único de tu base de datos.

    PostgreSQL

    ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
    

    Sustituye DATABASE_ID por el identificador único de tu base de datos.

  7. Haz clic en Ejecutar.

gcloud

Para definir 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);"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: 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;"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.

Prácticas recomendadas

Para aprovechar al máximo las ventajas de esta función, usa sesiones multiplexadas, que te permiten crear un gran número de solicitudes simultáneas en una sola sesión.

Monitorizar

Después de habilitar el bloqueo de lectura, es importante monitorizar la latencia para confirmar que la función consigue el efecto deseado. Para ello, identifica la región principal y las regiones en las que se ha habilitado el arrendamiento de lectura 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 una latencia dentro de la región. Al mismo tiempo, la latencia de escritura aumenta entre la región principal y la región más lejana con el arrendamiento de lectura habilitado.

También puede usar la siguiente métrica de latencia de Spanner para monitorizar las latencias de las solicitudes de lectura en sus instancias:

  • spanner.googleapis.com/api/read_request_latencies_by_serving_location

Puede filtrar esta métrica mediante el campo /serving_location. El campo /serving location indica la ubicación del servidor de Spanner desde el que se sirve la solicitud.

Para ver una lista completa de las métricas disponibles, consulta la lista de métricas de Spanner.

Consideraciones sobre el coste

Las lecturas sólidas que se sirven desde regiones con la función de concesión de lectura habilitada usan ligeramente menos recursos de computación. Por otro lado, las escrituras de bases de datos con la función de concesión de lectura habilitada usan ligeramente más recursos de computación. Para obtener más información, consulta los precios de la capacidad de computación de Spanner.

Esta función no afecta a otros componentes de los precios, como el almacenamiento y la red.

Siguientes pasos