Lectura del alquiler

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 en regiones que no son líderes para las transacciones que requieren una coherencia sólida.

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 entregar 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 otorga el derecho de entregar lecturas de forma local a una o más regiones que no son líderes, de lectura y escritura, o de solo lectura. Esto permite que las regiones que no son líderes publiquen directamente lecturas sólidas sin comunicarse con la región líder. La entrega 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.

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 en una región que no es líder, 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 de bloqueo de escritura más largas o tiene una baja contención de escritura.

Habilitar los arrendamientos de lectura aumenta la latencia de escritura, lo que hace 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 la capacidad de procesamiento.

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.

La ejecución de instrucciones SQL en Spanner implica la lectura de datos de varios rangos o filas. Cuando se usan APIs de consulta con concesiones de lectura habilitadas, las lecturas deben esperar a las escrituras simultáneas para garantizar la corrección. Por lo tanto, es posible que observes una latencia más alta, en especial cuando hay más carga de escritura. En general, las APIs de lectura son más tolerantes a las escrituras simultáneas que las APIs de consulta. Si usas con frecuencia APIs de consultas con cargas de escritura altas, considera reducir la frecuencia de las escrituras o usar lecturas obsoletas en su lugar.

Las APIs de lectura están optimizadas para leer filas o rangos de datos específicos. Solo deben esperar las escrituras que modifican los datos exactos que intentan leer. Si usas APIs de lectura, solo las escrituras en los mismos rangos de datos exactos bloquean tus lecturas. Como resultado, cuando hay escrituras simultáneas y usas regiones de concesión de lectura, las lecturas sólidas de Spanner tienen un mejor rendimiento y una menor latencia.

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 habilitar el arrendamiento de lectura en una región testigo.
  • 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. Incluso si una transacción de lectura y escritura solo contiene lecturas, estas se entregan desde la región líder.
  • 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 en true.

    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.

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

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

    Instancias

  2. Selecciona la instancia en la que deseas habilitar el arrendamiento de lectura.

  3. En la página Descripción general de la instancia que se abre, haz clic en Crear base de datos.

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

  5. Selecciona un dialecto de la base de datos.

  6. Haz clic en Crear.

    La consola de Google Cloud muestra la página Descripción general de la base de datos que creaste.

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

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

  9. 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.

  10. 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

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

    Instancias

  2. Selecciona la instancia en la que deseas habilitar el arrendamiento de lectura.

  3. Selecciona la base de datos en la que deseas habilitar el arrendamiento de lectura.

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

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

  6. 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.

  7. 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

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

    Instancias

  2. Selecciona la instancia en la que deseas inhabilitar el arrendamiento de lectura.

  3. Selecciona la base de datos en la que deseas inhabilitar el alquiler de lectura.

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

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

  6. 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.

  7. 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. Simultáneamente, la latencia de escritura aumenta 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?