Skip to main content
La sauvegarde par snapshot est un mode de sauvegarde léger pour les table engines cloud-native. Au lieu de copier les données, elle écrit dans ClickHouse Keeper des nœuds de verrouillage pour chaque part. Ces verrous empêchent le server de supprimer les parts du stockage objet référencées tant que le snapshot est conservé. La sauvegarde enregistre ensuite les références du stockage objet au lieu de copier physiquement les données, ce qui permet de créer rapidement des snapshots, quelle que soit la taille de la table. Le mode léger s’applique aux tables SharedMergeTree, SharedSet et SharedJoin. Pour tous les autres types d’engine — comme Log ou Memory — la sauvegarde bascule automatiquement vers une sauvegarde standard par copie.

Créer un snapshot

La sauvegarde par snapshot utilise la commande standard BACKUP avec experimental_lightweight_snapshot = true. Le paramètre id est obligatoire — il donne un nom au snapshot et sert à y faire référence dans les commandes déverrouillage et observability :
La commande renvoie id et status, et id peut servir à suivre l’opération dans system.backups. Sauvegardez une seule table vers S3 :
Sauvegarder une base de données complète :
Sauvegardez toutes les tables sauf une :
Les mêmes commandes fonctionnent également avec Azure Blob Storage :

Restaurer sur le même service

Comme un snapshot stocke des références vers des fichiers de stockage objet plutôt que des copies des données, une restauration vers un nouveau service ClickHouse ou vers un autre service ClickHouse nécessite un accès au stockage objet d’origine. C’est pourquoi la restauration entre services n’est pas prise en charge via SQL : elle est uniquement disponible dans l’UI. En SQL, vous pouvez restaurer un snapshot sur le même service à partir d’un bucket de sauvegarde externe à l’aide de snapshot_from_current_service = 1. Cela lit directement les objets via le disk de destination, au lieu de passer par un lecteur de snapshot distant :
La clause AS restaure la table sous un nouveau nom, en laissant la table d’origine intacte. Pour remplacer la table d’origine, supprimez-la d’abord :

Déverrouiller un snapshot

Chaque snapshot conserve des verrous dans ClickHouse Keeper qui empêchent les fichiers de stockage objet référencés d’être supprimés par le ramasse-miettes. Une fois la restauration terminée — ou lorsqu’un snapshot n’est plus nécessaire — déverrouillez-le pour libérer ces verrous. Il existe deux formes : un déverrouillage au niveau système, qui supprime tous les verrous du snapshot d’un seul coup, et un déverrouillage par table, qui supprime le verrou d’une seule table tout en laissant le reste du snapshot intact. Déverrouillage au niveau système — supprime tous les verrous du snapshot :
Déverrouillage par table — retire le verrou d’une seule table :
La clause FROM est facultative lorsque la destination du snapshot a été enregistrée dans Keeper lors de sa création (visible dans la colonne info de system.snapshot_locks) :
Après déverrouillage, la ligne correspondante disparaît de system.snapshot_locks, et les parts qui ne sont plus référencées par d’autres snapshots ne figurent plus dans system.snapshot_parts.

Observability

system.backups

Toutes les opérations de snapshot apparaissent dans system.backups, aux côtés des opérations habituelles de sauvegarde et de restauration. Interrogez cette table à l’aide de l’id que vous avez défini (ou de l’UUID renvoyé par la commande) :

system.snapshot_locks

system.snapshot_locks affiche les snapshots validés actuellement enregistrés dans Keeper. Lorsqu’un snapshot est validé, un nœud Keeper est créé à l’emplacement /clickhouse/snapshot/committed/{snapshot_id}. Avant de supprimer une partie de données, le server vérifie si un snapshot validé verrouille cette part. Si c’est le cas, la suppression n’a pas lieu. Le verrou reste en place jusqu’à ce que vous déverrouilliez explicitement le snapshot.
Chaque ligne représente un snapshot validé. Si vous voyez des verrous pour des snapshots qui n’ont plus de destination de sauvegarde valide, exécutez SYSTEM UNLOCK SNAPSHOT pour les supprimer. Pour vérifier si un verrou de snapshot spécifique est présent :

system.snapshot_parts

system.snapshot_parts affiche les parties de données actuellement retenues par au moins un verrou de snapshot. Pour chaque partie verrouillée, un nœud Keeper existe à l’emplacement /clickhouse/snapshot/{table_uuid}/{part_name} et contient la taille compressée et non compressée de la partie. Cette table lit ces nœuds pour indiquer quelles parties sont actuellement protégées contre la suppression.
Les parts avec snapshots_size > 1 sont référencées par plusieurs snapshots et ne seront pas supprimées du stockage objet tant que tous les snapshots qui les verrouillent n’auront pas été déverrouillés. Pour vérifier le stockage total retenu :
Pour trouver les parts verrouillées par un snapshot mais qui ont déjà été supprimées ou ne sont plus actives sur le serveur — c’est-à-dire les données conservées dans le stockage objet uniquement en raison de verrous de snapshot :
C’est utile pour comprendre le surcoût de stockage qu’entraîne la conservation de snapshots après la modification ou la suppression des données d’origine.

Paramètres du serveur

Les paramètres de configuration du serveur ci-dessous contrôlent le comportement des snapshots. Ils sont définis dans le fichier de configuration du serveur, et non en SQL.
Dernière modification le 3 juillet 2026