l'insertion d'un million de lignes en même temps entraîne une utilisation excessive du processeur pendant une période prolongée par la suite, avec ~ 50% de RAM:
testez le code ici: https://raw.githubusercontent.com/supabase/benchmarks/feat/firestore-benchmarks/db/migrations/20201124141199_read_data.sql
a exclu que COPY soit le problème, car l'extrait suivant entraîne également le même comportement:
do $$
begin
for r in 1..1000000 loop
insert into public.read(id, slug) values(r, r);
end loop;
end;
$$;
Le redémarrage du service (processus) ne résout pas le problème
🤔 Passer à la rouille?
Laissez-moi réfléchir à la façon dont nous pouvons résoudre ce problème - le plan était d'ajouter des flux de travail à ce serveur, ce qui ne fera que le ralentir. Pour le moment, nous analysons chaque événement, puis nous parcourons chaque colonne, donc il y a beaucoup à traverser. De manière réaliste, un utilisateur n'a pas besoin de toutes ces notifications et devrait ajouter des filtres d'événements pour analyser uniquement ce dont il a vraiment besoin
Je suppose que la solution judicieuse pour le moment est de désactiver temporairement la publication supabase_realtime
temporairement pour les gros vidages comme celui-ci
Je vois 2 problèmes:
INSERT
de 1 million de lignes prend plus d'une heure juste à décoder. En revanche, pour un abonnement avec une seconde base de données, le décodage et l'application prennent 5 secondes .SubscribersNotification
plante sur handle_call/3
. Peut-être à cause de la taille énorme des arguments, puisque les messages sont envoyés par transaction, c'est-à-dire tous les 1 million de messages décodés à la fois.J'ai l'impression qu'un NIF Rust qui envoie des messages un par un pourrait avoir du sens ici ...
PS la résolution de ce problème devrait également résoudre les problèmes d'explosion de WAL, car un décodage lent signifie ne pas pouvoir acknowledge_lsn
assez rapidement.
Le décodage prend beaucoup de temps.
Intéressant. Y a-t-il des fruits à portée de main? S'agit-il du décodage proprement dit ou de l'analyse en différents canaux?
Sinon, si vous pouvez faire un POC rapide du NIF, il peut être bon de comparer
Juste en décodant, il s'est trompé lorsque notify
ing SubscribersNotification.
si vous pouvez faire un POC rapide du NIF
👍
: tada: Ce problème a été résolu dans la version 0.10.2: tada:
La version est disponible sur la version GitHub
Votre bot sémantique : package :: rocket:
Commentaire le plus utile
Je suppose que la solution judicieuse pour le moment est de désactiver temporairement la publication
supabase_realtime
temporairement pour les gros vidages comme celui-ci