web-dev-qa-db-fra.com

Mass Supprimer les utilisateurs

J'ai besoin de masser la masse d'environ 600k utilisateurs d'un drupal installer, j'ai les UID et construit un script de drush pour le faire, mais le problème est que ceci est un site en direct, il semble donc que user_delete_multiple acquiert une serrure pendant toute la durée (même divisée en morceaux de 100 qu'il faut trop longtemps). Donc, itérant sur le tableau un par un (libérant ainsi la serrure entre et permettant un fonctionnement normal) et la suppression à une vitesse de 1,5 utilisateurs par seconde. 600K -> aller prendre environ une semaine.

De plus, je ne peux pas parlementer cela à cause de la serrure sur la table (essayé, cela le rend plus lent). Quelles autres options à mes options? (J'ai examiné directement la base de données directement, mais il y a beaucoup de modules qui implémentent user_delete et entity_delete afin que je puisse oublier quelque chose ...

Je cherche peut-être à l'aide du même script mais je supprime la serrure sur la table ... Faites maintenant savoir comment à cela, mais pourrait être une option.

[Modifier] Il suffit de modifier le script A mais, de la taille de la taille 5, et utilisez User_Delete_Multiple. Cela me permet d'économiser 4 appels à Module_invoke_All, qui m'a gagné un peu de vitesse. Je supprime actuellement 5 utilisateurs dans 4, 4,5 s). Cela me permet également de maintenir la serrure pour moins de temps et de permettre également le fonctionnement du site. Waitug pour voir si le site est toujours utilisable avec ce correctif ..

3
cromestant

Je ferais quelques choses.

Les suppressions lentes pourraient constituer une indication d'une instance MySQL mal ajustée (ou d'un autre serveur de base de données). Je voudrais courir mysqltuner (ou quel que soit l'équivalent de votre cas) sur votre serveur et assurez-vous d'avoir une configuration décente.

Deuxièmement, je le ferais en mode maintenance. Votre lenteur peut résulter du trafic supplémentaire sur le site et de la difficulté à acquérir les serrures.

Si j'étais à votre place, j'écrirais un script shell qui fait quelque chose comme

drush @thesite variable-set -y --always-set maintenance_mode 1
drush @thesite -u 1 scr /path/to/a/drush/script.php
drush @thesite variable-delete -y --exact maintenance_mode

puis placez cela dans un crontab nocturne. Inside /Path/TO/a/DRUNCH/Script.php, vous écrivez votre code pour supprimer un lot d'utilisateurs (disons 100 ou plus).

Cela supprimera ensuite vos utilisateurs en petits lots pendant le mode de maintenance. Cela minimisera les temps d'arrêt sur votre site.

Surveillez les progrès et supprimez la saisie du crontab lorsque vous avez terminé.

4
mpdonadio