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 forte dans les régions en lecture/écriture ou en lecture seule, au prix d'une latence d'écriture plus élevée.
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 demande. 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 à ces régions le droit de diffuser des lectures cohérentes localement. Cela permet aux régions non leaders de diffuser directement des lectures fortes sans communiquer avec la région leader. 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. Lorsque les baux de lecture sont activés, les lectures fortes dans les transactions en lecture seule sont traitées localement sans contacter le leader. Pour les transactions en lecture-écriture, les lectures sont toujours dirigées vers la région principale, sauf si vous utilisez l'isolation de lecture reproductible avec le routage optimisé vers la région responsable désactivé.
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, consultez Utiliser les 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 d'écriture plus longues ou présente une faible contention d'écriture.
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.
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 opérations d'écriture 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 us-central1
principale 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 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. Si vous souhaitez obtenir une latence intrarégionale pour les lectures dans les transactions en lecture-écriture, vous devez utiliser le niveau d'isolation "Lecture reproductible" et désactiver le routage optimisé vers la région responsable pour utiliser les baux de lecture. Même en cas d'isolation de lecture répétable, les lectures dans les transactions en lecture-écriture peuvent toujours être dirigées vers la région principale, en particulier après une écriture dans la transaction, pour garantir la cohérence de lecture après écriture.
- 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
surtrue
.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.
Si vous souhaitez obtenir une latence de lecture intrarégionale dans les transactions en lecture-écriture ou si vous ne pouvez pas toujours changer d'option de connexion, utilisez le niveau d'isolation "Lecture reproductible" et désactivez le routage optimisé vers la région responsable. Ces paramètres sont obligatoires même si votre transaction en lecture-écriture ne comporte que des lectures. Sinon, les lectures dans les transactions de lecture et écriture sont toujours dirigées vers la région principale. Dans une telle transaction, le bail de lecture est désactivé après l'apparition de la première instruction LMD d'écriture. En effet, les écritures sont toujours dirigées vers la région principale. Par conséquent, pour lire votre écriture, les lectures suivantes doivent également être effectuées dans la région principale.
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'
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
Accédez à la page Instances dans la console Google Cloud .
Sélectionnez l'instance dans laquelle vous souhaitez activer le bail de lecture.
Sur la page Présentation de l'instance qui s'ouvre, cliquez sur Créer une base de données.
Saisissez un nom pour la base de données.
Sélectionnez un dialecte de base de données.
Cliquez sur Créer.
La console Google Cloud affiche la page Présentation de la base de données que vous avez créée.
Dans le menu de navigation, cliquez sur Spanner Studio.
Sur la page Spanner Studio, cliquez sur
Nouvel onglet ou utilisez l'onglet d'éditeur vide.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.
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
Accédez à la page Instances dans la console Google Cloud .
Sélectionnez l'instance dans laquelle vous souhaitez activer le bail de lecture.
Sélectionnez la base de données dans laquelle vous souhaitez activer le bail de lecture.
Dans le menu de navigation, cliquez sur Spanner Studio.
Sur la page Spanner Studio, cliquez sur
Nouvel onglet ou utilisez l'onglet d'éditeur vide.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.
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
Accédez à la page Instances dans la console Google Cloud .
Sélectionnez l'instance dans laquelle vous souhaitez désactiver le bail de lecture.
Sélectionnez la base de données dans laquelle vous souhaitez désactiver le bail de lecture.
Dans le menu de navigation, cliquez sur Spanner Studio.
Sur la page Spanner Studio, cliquez sur
Nouvel onglet ou utilisez l'onglet d'éditeur vide.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.
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 où 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 avec un temps aller-retour entre la région principale et la région la plus éloignée où 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
- En savoir plus sur la réplication Spanner
- En savoir plus sur les lectures en dehors des transactions