Nous avons une table avec 500 millions de lignes. Malheureusement, l'une des colonnes était int(11), qui est un int signé, et il s'agissait d'une valeur incrémentale qui venait de dépasser le nombre magique de 2,1 milliards. Cela a immédiatement provoqué une interruption de service pour environ 10 000 utilisateurs. Nous avons discuté de nombreuses solutions, et avons décidé que nous pouvions simplement réduire cette valeur en toute sécurité, par exemple d'un milliard. Mais nous devions le faire pour chaque ligne.
Voici ce que nous avons fait :
mettre à jour Table1 Set MessageId = case when MessageId < 1073741824 then 0 else MessageId - 1073741824 end ;
Je l'ai testé sur un tableau de 10 millions de lignes et cela a pris 11 minutes. J'ai donc supposé que la plus grande table prendrait 550 minutes, soit 9 heures. Cela allait être notre plus grand temps d'arrêt en 3 ans. (Nous sommes une startup). Cela fait maintenant 18 heures.
Que devons-nous faire ?
S'il vous plaît, ne dites pas ce que nous aurions dû faire. Je pense que nous aurions dû mettre à jour quelques millions de lignes à la fois.
Y a-t-il un moyen de voir les progrès réalisés ? Mysql aurait-il pu se bloquer ? J'utilise mysql 5.0.22.
Merci !