Bonjour,
Je viens vers vous en raison d'un étonnant problème de lenteur.
J'ai une base de données composées de deux tables reliées selon les règles de l'art par une clé étrangère qui pointe sur une clé primaire (un identifiant unique)
La première table contient les caractéristiques d'une caméra.
La seconde contient des informations sur les photos prises par les caméras.
Pour les photos, il y a 21 millions de lignes, mais je ne stocke absolument pas les photos. Je ne stocke que des données du type contraste, exposition.
Pour les photos prises par 4 caméras avant une certaine date, je dois rajouter un booléen à vrai, pour les prochaines photos et pour les autres caméras ce booléen sera à faux.
J'ai donc ajouté mon booléen avec une valeur non nulle : 5 heures de traitement ! étonnant pour seulement 21 millions de lignes dans la table photo...
Maintenant je souhaite faire ma mise à jour avec cette requête :
UPDATE data.te_photo set indicateur = (camera_id in (13,14,15,16))
Après 3 jours de calcul, ça tourne toujours... Aucun verrou et seulement 21.000.000 de lignes, je suis le seul utilisateur connecté sur ce serveur, il reste 90% d'espace libre, ça ne swappe pas, je consomme au maximum 8% de processeur dont 6% par postgresql. Il n'y a pas d'index sur cet indicateur, il y a un index sur camera_id puisque c'est une clé étrangère.
Pour 500.000 lignes sur mon malheureux ordinateur portable, la création de la colonne a duré moins d'une minute, la mise à jour de la table quelques secondes (2 ou 3, je ne sais plus).
Je pense lancer un insert ... select dans une nouvelle table et la renommer après avoir droppé la base d'origine pour résoudre ce souci, mais je reste très inquiet par ces latences car je vais devoir lancer un paquet de requête de ce type.
Je pensais rajouter un index sur indicateur par la suite, car je vais devoir programmer certains scripts du type
UPDATE data.te_photo set indicateur = true WHERE indicateur is null
et certains jours, ce sera
UPDATE data.te_photo set indicateur = false WHERE indicateur is null
J'ai peur que cela mette des plombes du coup.
Auriez-vous une idée de ce qui pourrait provoquer de tels délais ? Une façon de les diminuer...
Merci de votre attention,
Partager