Lecture du bail

Cette page décrit et explique comment utiliser les baux de lecture Spanner. Les baux de lecture aident vos bases de données à réduire la latence de lecture dans les régions non leaders pour les transactions qui nécessitent une cohérence forte.

Par défaut, lorsque Spanner reçoit une requête de lecture forte dans une région non principale, l'instance répliquée qui traite la lecture contacte la région de lecture/écriture principale de l'instance. Ce contact confirme que ses données sont à jour avant de répondre à la requête. Ce processus entraîne un aller-retour réseau entre la région qui reçoit la requête et la région leader. Contrairement à la communication au sein d'une même région, la distance géographique entre les régions ajoute une latence supplémentaire à la requête.

L'utilisation de baux de lecture Spanner élimine la nécessité de ce trajet aller-retour. Lorsque vous définissez une ou plusieurs régions de bail de lecture pour votre base de données, Spanner accorde le droit de diffuser des lectures localement à une ou plusieurs régions non principales, de lecture/écriture ou de lecture seule. Cela permet aux régions non principales de diffuser directement des lectures fortes sans communiquer avec la région principale. La diffusion de lectures fortes à partir d'une région non principale plus proche du client réduit la latence entre les régions. Cela permet d'obtenir une latence intrarégionale pour les lectures fortes dans les instances birégionales ou multirégionales.

L'activation ou la désactivation de la fonctionnalité de bail de lecture dans une région ne nécessite aucun temps d'arrêt. Toutefois, les écritures subissent une latence plus élevée lorsque vous utilisez cette fonctionnalité, car l'activation du bail de lecture oblige le leader à contacter les régions de bail de lecture lors de la diffusion des écritures. Par conséquent, les écritures conservent les verrous plus longtemps, ce qui peut avoir un impact sur les charges de travail d'écriture à forte contention. Pour en savoir plus, consultez Quand utiliser les baux de lecture. Le bail de lecture est plus adapté aux applications qui sont prêtes à échanger une latence d'écriture accrue contre des lectures fortes plus rapides. Par exemple, un système de contrôle des accès où la charge de travail comporte des lectures fréquentes, mais des écritures rares.

Pour savoir comment activer les baux de lecture dans une région non leader, consultez Utiliser des baux de lecture.

Quand utiliser les baux de lecture

Activez les baux de lecture si votre application et votre charge de travail répondent aux critères suivants :

  • Une faible latence pour les lectures fortes est plus importante qu'une faible latence pour les écritures.
  • Votre charge de travail peut tolérer des durées de verrouillage en écriture plus longues ou présente une faible contention en écriture.

L'activation des baux de lecture augmente la latence d'écriture, ce qui prolonge la durée des verrous d'écriture. Si votre charge de travail d'écriture présente déjà une forte contention d'écriture, cette fonctionnalité peut aggraver la latence d'écriture et réduire le débit.

En cas d'écritures simultanées, le choix entre l'utilisation des API de requête ou des API de lecture affecte les performances d'une base de données qui utilise des régions de bail de lecture.

L'exécution d'instructions SQL dans Spanner implique la lecture de données provenant de plusieurs lignes ou plages. Lorsque vous utilisez des API de requête avec des baux de lecture activés, les lectures doivent attendre les écritures simultanées pour être correctes. Par conséquent, vous pouvez observer une latence plus élevée, en particulier lorsque la charge d'écriture est plus importante. Les API de lecture sont généralement plus tolérantes aux écritures simultanées que les API de requête. Si vous utilisez fréquemment des API de requête avec des charges d'écriture élevées, envisagez de réduire la fréquence des écritures ou d'utiliser des lectures obsolètes à la place.

Les API de lecture sont optimisées pour lire des lignes ou des plages de données spécifiques. Ils n'ont besoin d'attendre que les écritures qui modifient les données exactes qu'ils essaient de lire. Si vous utilisez des API de lecture, seules les écritures sur les mêmes plages de données bloquent vos lectures. Par conséquent, lorsque des écritures simultanées ont lieu et que vous utilisez des régions de bail de lecture, les lectures fortes Spanner sont plus performantes et ont une latence plus faible.

Pour en savoir plus sur la surveillance de la latence, consultez Surveiller.

Exemple d'utilisation

Prenons l'exemple d'une application déployée à l'échelle mondiale qui effectue des écritures aux États-Unis et qui possède des clients aux États-Unis, en Europe et en Asie. Vous pouvez configurer une instance Spanner multirégionale, telle que nam-eur-asia1, avec une région principale dans us-central1 et des répliques en lecture seule dans europe-west1 et asia-east1.

Lorsque vous activez le bail de lecture dans les régions europe-west1 et asia-east1 en lecture seule, Spanner diffuse des lectures fortes depuis l'Europe et l'Asie à partir de ces instances dupliquées locales, ce qui réduit la latence. En contrepartie, la latence d'écriture augmente pour toutes les écritures. L'augmentation de la latence équivaut au temps aller-retour entre la région du leader us-central1 et les régions de bail de lecture les plus éloignées.

Limites

Les baux de lecture Spanner sont soumis aux limites suivantes :

  • Vous ne pouvez pas activer le bail de lecture dans une région témoin.
  • Vous ne pouvez pas utiliser le bail de lecture avec le partitionnement géographique.
  • Les baux de lecture ne réduisent pas la latence pour les lectures qui font partie d'une transaction en lecture-écriture. Même si une transaction en lecture-écriture ne contient que des lectures, celles-ci sont toujours diffusées à partir de la région principale.
  • Si vous déplacez votre instance vers une autre configuration d'instance, les paramètres de bail de lecture ne sont pas conservés. Vous devez réactiver le bail de lecture sur la base de données une fois le déplacement terminé.

Utiliser des baux de lecture

Vous devez activer les baux de lecture avant de pouvoir les utiliser.

Contrôle des accès avec IAM

Pour définir des régions de bail de lecture, un utilisateur a besoin de l'autorisation IAM spanner.databases.create ou spanner.databases.updateDdl. Le rôle Administrateur de base de données (roles/spanner.databaseAdmin) prédéfini inclut ces autorisations. Pour en savoir plus, consultez la présentation d'IAM pour Spanner.

Pour savoir comment accorder des autorisations, consultez Appliquer des autorisations IAM.

Avant de commencer pour les utilisateurs de bases de données PostgreSQL

Si vous souhaitez utiliser un bail de lecture dans une base de données PostgreSQL, apportez l'une des modifications de configuration suivantes à votre base de données. Sinon, vos lectures sont toujours traitées par la région principale, même si vous avez défini des régions de bail de lecture.

  • Si vous n'utilisez que des transactions en lecture seule, configurez votre connexion PostgreSQL de sorte que l'état par défaut de chaque nouvelle transaction dans la base de données soit défini sur "lecture seule". Pour ce faire, définissez l'option default_transaction_read_only sur 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'
    

    Remplacez les éléments suivants :

    • USER_ID avec l'identifiant unique de votre utilisateur.

    • PASSWORD avec votre mot de passe.

    • DATABASE_ID avec l'identifiant unique de votre base de données.

Activer les baux de lecture

Pour activer les baux de lecture lorsque vous créez une base de données, définissez l'option read_lease_regions dans l'instruction LDD ALTER DATABASE (GoogleSQL, PostgreSQL) :

Console

  1. Accédez à la page Instances dans la console Google Cloud .

    Instances

  2. Sélectionnez l'instance dans laquelle vous souhaitez activer le bail de lecture.

  3. Sur la page Présentation de l'instance qui s'ouvre, cliquez sur Créer une base de données.

  4. Saisissez un nom pour la base de données.

  5. Sélectionnez un dialecte de base de données.

  6. Cliquez sur Créer.

    La console Google Cloud affiche la page Présentation de la base de données que vous avez créée.

  7. Dans le menu de navigation, cliquez sur Spanner Studio.

  8. Sur la page Spanner Studio, cliquez sur Nouvel onglet ou utilisez l'onglet d'éditeur vide.

  9. Saisissez l'instruction LDD ALTER DATABASE suivante.

    GoogleSQL

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

    Remplacez les éléments suivants :

    • DATABASE_ID par l'identifiant unique de votre base de données.

    • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

    PostgreSQL

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

    Remplacez les éléments suivants :

    • DATABASE_ID par l'identifiant unique de votre base de données.

    • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

  10. Cliquez sur Exécuter.

gcloud

Pour définir l'option de base de données read_lease_regions lors de la création de votre base de données, utilisez 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');"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.
  • READ_LEASE_REGION : région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

PostgreSQL

gcloud spanner databases create DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.
  • READ_LEASE_REGION : région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

Pour activer le bail de lecture lorsque vous mettez à jour une base de données existante, définissez l'option read_lease_regions dans l'instruction LDD ALTER DATABASE (GoogleSQL, PostgreSQL) :

Console

  1. Accédez à la page Instances dans la console Google Cloud .

    Instances

  2. Sélectionnez l'instance dans laquelle vous souhaitez activer le bail de lecture.

  3. Sélectionnez la base de données dans laquelle vous souhaitez activer le bail de lecture.

  4. Dans le menu de navigation, cliquez sur Spanner Studio.

  5. Sur la page Spanner Studio, cliquez sur Nouvel onglet ou utilisez l'onglet d'éditeur vide.

  6. Saisissez l'instruction LDD ALTER DATABASE suivante.

    GoogleSQL

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

    Remplacez les éléments suivants :

    • DATABASE_ID par l'identifiant unique de votre base de données.

    • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

    PostgreSQL

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

    Remplacez les éléments suivants :

    • DATABASE_ID par l'identifiant unique de votre base de données.

    • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

  7. Cliquez sur Exécuter.

gcloud

Pour définir l'option de base de données read_lease_regions, utilisez 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');"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.
  • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.
  • READ_LEASE_REGION par la région dans laquelle vous souhaitez activer le bail de lecture. Exemple :europe-west1 Vous pouvez activer le bail de lecture pour plusieurs régions. Séparez chaque région par une virgule.

Désactiver les baux de lecture

La location de lecture est désactivée par défaut.

Pour mettre à jour et désactiver la fonctionnalité sur une base de données existante, définissez l'option read_lease_regions dans l'instruction LDD ALTER DATABASE (GoogleSQL, PostgreSQL) sur NULL :

Console

  1. Accédez à la page Instances dans la console Google Cloud .

    Instances

  2. Sélectionnez l'instance dans laquelle vous souhaitez désactiver le bail de lecture.

  3. Sélectionnez la base de données dans laquelle vous souhaitez désactiver le bail de lecture.

  4. Dans le menu de navigation, cliquez sur Spanner Studio.

  5. Sur la page Spanner Studio, cliquez sur Nouvel onglet ou utilisez l'onglet d'éditeur vide.

  6. Saisissez l'instruction LDD ALTER DATABASE suivante.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
    

    Remplacez DATABASE_ID par l'identifiant unique de votre base de données.

    PostgreSQL

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

    Remplacez DATABASE_ID par l'identifiant unique de votre base de données.

  7. Cliquez sur Exécuter.

gcloud

Pour définir l'option de base de données read_lease_regions, utilisez 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);"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"

Remplacez les éléments suivants :

  • DATABASE_ID : identifiant permanent de votre base de données Spanner.
  • INSTANCE_ID : identifiant permanent de votre instance Spanner.

Bonnes pratiques

Pour profiter pleinement de cette fonctionnalité, utilisez des sessions multiplexées, qui vous permettent de créer un grand nombre de requêtes simultanées sur une même session.

Surveiller

Après avoir activé le bail de lecture, il est important de surveiller la latence pour confirmer que la fonctionnalité produit l'effet escompté. Pour ce faire, identifiez la région principale et les régions pour lesquelles le bail de lecture est activé en interrogeant la table de schéma d'informations data_options (GoogleSQL, PostgreSQL) ou votre base de données. Les régions pour lesquelles le bail de lecture est activé s'attendent à ce que les lectures fortes aient une latence intrarégionale. Simultanément, la latence d'écriture augmente entre la région principale et la région la plus éloignée pour laquelle le bail de lecture est activé.

Vous pouvez également utiliser la métrique de latence Spanner suivante pour vous aider à surveiller la latence des requêtes de lecture dans vos instances :

  • spanner.googleapis.com/api/read_request_latencies_by_serving_location

Vous pouvez filtrer cette métrique à l'aide du champ /serving_location. Le champ /serving location indique l'emplacement du serveur Spanner à partir duquel la requête est traitée.

Pour obtenir la liste complète des métriques disponibles, consultez la liste des métriques Spanner.

Considérations liées au coût

Les lectures fortes diffusées à partir de régions où la fonctionnalité de bail de lecture est activée utilisent légèrement moins de ressources de calcul. En revanche, les écritures pour les bases de données dont la fonctionnalité de bail de lecture est activée utilisent légèrement plus de ressources de calcul. Pour en savoir plus, consultez la section Tarifs de la capacité de calcul Spanner.

Cette fonctionnalité n'a pas d'incidence sur les autres composants de tarification, tels que le stockage et le réseau.

Étapes suivantes