Bonnes pratiques pour l'importation et l'exportation de données

Cette page présente les bonnes pratiques à suivre pour importer et exporter des données avec Cloud SQL. Pour obtenir des instructions détaillées sur l'importation de données dans Cloud SQL, consultez la page Importer des données. Pour obtenir des instructions détaillées sur l'exportation de vos données, que ce soit dans Cloud SQL ou dans une instance que vous gérez, consultez la page Exporter des données.

Bonnes pratiques pour l'importation et l'exportation

Voici les bonnes pratiques à adopter lors de l'importation et de l'exportation de données :

Ne pas utiliser les buckets "Paiements" du demandeur Cloud Storage

Vous ne pouvez pas utiliser de buckets Cloud Storage pour lesquels les paiements du demandeur sont activés pour réaliser des importations et des exportations depuis Cloud SQL.

Minimiser l'impact sur les performances des exportations

Pour une exportation standard depuis Cloud SQL, l'exportation est exécutée tant que la base de données est en ligne. Lorsque la quantité des données exportées est faible, l'impact est susceptible d'être minime. Toutefois, en cas de bases de données ou d'objets volumineux, tels que des BLOB dans la base de données, il est possible que l'exportation réduise les performances de la base de données. Cela peut avoir un impact sur le temps nécessaire pour exécuter des requêtes et des opérations sur la base de données. Une fois que vous avez lancé une exportation, il n'est pas possible de l'arrêter si votre base de données commence à répondre lentement.

Pour éviter les réponses lentes lors d'une exportation, vous pouvez agir de la façon suivante :

  1. Effectuer l'exportation à partir d'une instance dupliquée avec accès en lecture. Cette option peut être appropriée si vous effectuez des exportations fréquemment (tous les jours ou plus souvent), mais que la quantité de données exportées est faible. Pour effectuer une exportation depuis une instance dupliquée avec accès en lecture, utilisez les fonctions d'exportation de la console Google Cloud, de gcloud ou de l'API REST sur votre instance dupliquée avec accès en lecture. Pour en savoir plus sur la création et la gestion des instances dupliquées avec accès en lecture, consultez la page Créer des instances dupliquées avec accès en lecture.

  2. Utiliser l'exportation sans serveur. Avec l'exportation sans serveur, Cloud SQL crée une instance temporaire distincte pour décharger l'opération d'exportation. Le déchargement de l'opération d'exportation permet aux bases de données de l'instance principale de continuer à diffuser des requêtes et d'effectuer des opérations au débit de performances habituel. Une fois l'exportation des données terminée, l'instance temporaire est automatiquement supprimée. Cette option est judicieuse si vous effectuez une exportation ponctuelle d'une grande base de données. Utilisez les fonctions d'exportation de la console Google Cloud, de gcloud ou de l'API REST avec l'option offload pour effectuer une opération d'exportation sans serveur.

    Lors d'une opération d'exportation sans serveur, vous pouvez effectuer d'autres opérations, telles que la modification, l'importation et le basculement d'instances. Toutefois, si vous sélectionnez delete, l'opération d'exportation s'arrête après la suppression de l'instance et n'exporte aucune donnée.

    Consultez le tableau suivant pour découvrir les opérations pouvant être bloquées lorsqu'une opération d'exportation sans serveur est en cours d'exécution :
    Opération en cours Nouvelle opération Blocage ?
    Toute opération Exportation sans serveur Yes
    Exportation sans serveur Toute opération, à l'exception de l'exportation sans serveur Non
    Toute opération, à l'exception de l'exportation sans serveur Toute opération, à l'exception de l'exportation sans serveur Yes

    Une exportation sans serveur prend plus de temps qu'une exportation standard, car la création de l'instance temporaire prend du temps. La durée minimale est de 5 minutes, mais pour les bases de données plus volumineuses, cela peut prendre plus de temps. Prenez en compte l'impact sur le temps, les performances et les coûts avant de déterminer le type d'exportation à utiliser.

Utiliser les indicateurs appropriés lors de la création d'un fichier de vidage SQL

Si vous n'utilisez pas la bonne procédure lorsque vous exportez des données vers un fichier de vidage SQL, l'importation peut échouer. Pour en savoir plus sur la création d'un fichier de vidage SQL à importer dans Cloud SQL, consultez la page Exporter des données.

Compresser les données afin de réduire les coûts

Cloud SQL permet d'importer et d'exporter des fichiers compressés ou non. Grâce à la compression, vous pouvez économiser un espace de stockage considérable sur Cloud Storage et réduire les coûts de stockage, en particulier lorsque vous exportez des instances volumineuses.

Lorsque vous exportez un fichier de vidage SQL ou CSV, utilisez l'extension de fichier .gz pour compresser les données. Lorsque vous importez un fichier avec une extension .gz, il est automatiquement décompressé.

Réduire les processus d'importation et d'exportation de longue durée

L'exécution d'opérations d'importation dans Cloud SQL et d'exportations à partir de Cloud SQL peut prendre beaucoup de temps selon la taille des données traitées. Cela peut avoir les conséquences suivantes :

  • Vous ne pouvez pas arrêter une opération d'instance Cloud SQL de longue durée.
  • Vous ne pouvez effectuer qu'une seule opération d'importation ou d'exportation à la fois pour chaque instance, tandis qu'une importation ou une exportation de longue durée bloque d'autres opérations, telles que les sauvegardes automatiques quotidiennes. Les exportations sans serveur vous permettent d'exécuter d'autres opérations, comme la modification d'instances, l'importation, le basculement et le déblocage des sauvegardes quotidiennes.

Vous pouvez réduire le temps nécessaire à l'exécution de chaque opération en utilisant la fonctionnalité d'importation ou d'exportation Cloud SQL avec de plus petits lots de données.

Pour les exportations, vous pouvez effectuer l'exportation à partir d'une instance dupliquée avec accès en lecture ou utiliser l'exportation sans serveur afin de minimiser l'impact sur les performances de la base de données et de permettre que d'autres opérations s'exécutent sur votre instance pendant l'exécution d'une exportation.

Pour obtenir plus de conseils, consultez la section Diagnostiquer les problèmes liés aux instances Cloud SQL.

Vérifier la base de données importée

Une fois l'importation terminée, connectez-vous à votre base de données et exécutez les commandes de base de données appropriées pour vous assurer que le contenu est correct. Par exemple, connectez et répertoriez les bases de données, les tables et les entrées spécifiques.

Limites connues

Pour obtenir la liste des limites connues, consultez la section Problèmes d'importation et d'exportation des données.

Automatiser les opérations d'exportation

Bien que Cloud SQL ne dispose pas d'une méthode intégrée pour automatiser les exportations de base de données, vous pouvez créer votre propre outil d'automatisation à l'aide de plusieurs composants Google Cloud. Pour en savoir plus, consultez ce tutoriel.

Dépannage

Résoudre les problèmes liés aux opérations d'importation

Problème Dépannage
Message d'erreur : permission denied for schema public Pour PostgreSQL 15 et versions ultérieures, si la base de données cible est créée à partir de template0, l'importation des données peut échouer. Pour résoudre ce problème, fournissez les droits de schéma public à l'utilisateur cloudsqlsuperuser en exécutant la commande SQL GRANT ALL ON SCHEMA public TO cloudsqlsuperuser.
HTTP Error 409: Operation failed because another operation was already in progress Une opération est déjà en attente pour votre instance. Il n'est possible d'exécuter qu'une seule opération à la fois. Envoyez votre requête lorsque l'opération en cours est terminée.
L'opération d'importation prend trop de temps. Un trop grand nombre de connexions actives peut interférer avec les opérations d'importation.

Fermez les opérations inutilisées. Vérifiez l'utilisation du processeur et de la mémoire de votre instance Cloud SQL pour vous assurer que de nombreuses ressources sont disponibles. Le meilleur moyen de s'assurer de la présence d'un nombre maximal de ressources pour l'opération d'importation consiste à redémarrer l'instance avant de lancer l'importation.

Un redémarrage :

  • ferme toutes les connexions ;
  • met fin à toutes les tâches susceptibles de consommer des ressources.
Une opération d'importation peut échouer lorsqu'un ou plusieurs utilisateurs référencés dans le fichier de vidage n'existent pas. Avant d'importer un fichier de vidage, tous les utilisateurs de la base de données qui possèdent des objets ou disposent d'autorisations sur les objets qu'elle contient doivent exister dans la base de données cible. Si ce n'est pas le cas, l'opération d'importation ne parvient pas à recréer les objets en rétablissant les propriétaires ou les autorisations d'origine.

Créez les utilisateurs de la base de données avant de l'importer.

Après l'importation des données, votre taille d'espace disque de données utilisée est beaucoup plus élevée.

L'importation des données peut conduire à une utilisation inattendue du disque. Cette utilisation peut par exemple être due à la récupération à un moment précis.

Pour résoudre ce problème, une fois les données importées, désactivez la récupération à un moment précis si vous souhaitez supprimer les journaux et récupérer de l'espace de stockage. N'oubliez pas que la réduction du stockage utilisé ne réduit pas la taille du stockage provisionné pour l'instance.

Message d'erreur : GRANT stderr: ERROR: must be member of role ROLE_NAME

Ce message d'erreur s'affiche si vous essayez d'importer un fichier de vidage SQL importé dans Cloud Storage dans une base de données Cloud SQL, et que la tâche d'importation s'est exécutée pendant environ quatre jours.

ROLE_NAME est un rôle de base de données personnalisé défini dans la base de données PostgreSQL source. L'utilisateur cloudsqlsuperuser par défaut importe le fichier de vidage SQL. Toutefois, cet utilisateur peut ne pas appartenir au rôle ROLE_NAME.

Pour résoudre ce problème, procédez comme suit :

  1. Créez le rôle ROLE_NAME dans la base de données de destination dans laquelle vous importez le fichier de vidage SQL.
  2. N'utilisez pas l'utilisateur cloudsqlsuperuser pour importer le fichier. Dans la base de données de destination, spécifiez plutôt un utilisateur membre du rôle ROLE_NAME. Pour spécifier l'utilisateur, exécutez la commande suivante:

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG …]

Résoudre les problèmes liés aux opérations d'exportation

Problème Dépannage
HTTP Error 409: Operation failed because another operation was already in progress. Une opération est déjà en attente pour votre instance. Il n'est possible d'exécuter qu'une seule opération à la fois. Envoyez votre requête lorsque l'opération en cours est terminée.
HTTP Error 403: The service account does not have the required permissions for the bucket. Assurez-vous que le bucket existe et que le compte de service de l'instance Cloud SQL (qui effectue l'exportation) dispose du rôle Storage Object Creator (roles/storage.objectCreator) pour autoriser l'exportation vers le bucket. Consultez la page Rôles IAM pour Cloud Storage.
L'exportation au format CSV a fonctionné, mais pas l'exportation au format SQL. Les formats CSV et SQL sont exportés de manière différente. Comme le format SQL exporte l'intégralité de la base de données, l'exportation prend probablement plus de temps. Le format CSV vous permet de définir les éléments de la base de données à exporter.

Exportez uniquement les données dont vous avez besoin à l'aide du format CSV.

L'exportation prend trop de temps. Cloud SQL n'est pas compatible avec les opérations synchrones simultanées.

Utilisez le déchargement des exportations. En règle générale, lors du déchargement des exportations, au lieu d'exécuter une exportation sur l'instance source, Cloud SQL lance une instance de déchargement pour effectuer l'exportation. Le déchargement des exportations présente plusieurs avantages, y compris une amélioration des performances sur l'instance source et le déblocage des opérations d'administration pendant l'exportation. Avec le déchargement des exportations, la latence totale peut augmenter en fonction du temps nécessaire à l'affichage de l'instance de déchargement. En règle générale, la latence n'est pas significative pour les exportations de taille raisonnable. Toutefois, si votre exportation est suffisamment petite, vous pouvez constater une augmentation de la latence.

Erreur de création de l'extension Le fichier de vidage contient des références à une extension non compatible.

Modifiez le fichier de vidage pour supprimer les références.

Erreur lors de l'utilisation de pg_dumpall. L'utilisation de l'utilitaire pg_dumpall avec l'option --global nécessite le rôle de super-utilisateur, mais ce rôle n'est pas disponible dans Cloud SQL pour PostgreSQL. Pour éviter les erreurs lors de l'exécution d'opérations d'exportation incluant des noms d'utilisateur, utilisez également l'option --no-role-passwords.
L'opération d'exportation expire avant d'exporter des données et le message d'erreur Could not receive data from client: Connection reset by peer. s'affiche. Si Cloud Storage ne reçoit aucune donnée dans les délais impartis (généralement environ sept minutes), la connexion est réinitialisée. Il est possible que l'exécution de la requête d'exportation initiale soit trop longue.

Effectuez une exportation manuelle à l'aide de l'outil pg_dump.

Vous souhaitez automatiser les exportations. Cloud SQL ne permet pas d'automatiser les exportations.

Vous pouvez créer votre propre système d'exportation automatisé à l'aide de produits Google Cloud tels que Cloud Scheduler, Pub/Sub et Cloud Functions, de manière semblable à cet article sur l'automatisation des sauvegardes.

Étape suivante