2017-09-19 5 views
1

J'ai besoin de supprimer environ 400 lignes de la table MySQL avec des colonnes:Pourquoi la suppression de nombreux BLOB verrouille-t-elle la base de données MySQL avec l'état: imposer la limite de cache dict?

id - INT(11) training_id - INT(11) estimator_blob - LONGBLOB

La taille de estimator_blob est de 32 Mb.

Il semble qu'une requête comme ceci:

DELETE FROM estimator WHERE training_id IN (1, 2, ..., 400);

verrouille la base de données. Après l'exécution de cette requête, toutes les nouvelles requêtes insérant des résultats dans cette table sont exécutées extrêmement lentement.

Dans l'état de base de données (mysql> SHOW ENGINE INNODB STATUS;) Je possède ce message:

Process ID=2600, Main thread ID=139974149678848, state: enforcing dict cache limit

Que signifie exactement "l'application de la limite de cache dict" signifie? Est-ce la raison de ce "verrou"? L'augmentation de innodb_buffer_pool_size n'a pas aidé. J'utilise MySQL 5.7.19-0ubuntu0.16.04.1 sur la machine avec 70 Go de RAM. Je suis en train d'utiliser MySQL 5.7.19-0ubuntu0.16.04.1.

+0

est-ce que training_id est indexé? Vous pouvez également essayer * augmenter le nombre total de handles de fichiers disponibles pour MySQL * augmenter le nombre de handles de fichiers pour InnoDB –

+0

Oui, c'est. En fait, c'est une clé étrangère et je n'utilise pas 'ON DELETE CASCADE'. OK je vais essayer. Merci! –

Répondre

1

enforcing dict cache limit est un état d'arrière-plan pour les processus InnoDB. Dans cet état, InnoDB vérifie l'utilisation de la consommation de mémoire cache du dictionnaire de tables (par exemple les métadonnées de table) et nettoie le cache du dictionnaire si nécessaire.

Selon les indications fournies par les développeurs de MySQL pour bug report 84424:

Vous devez faire plusieurs choses pour résoudre le problème:

  • augmenter le pool de mémoire supplémentaire
  • augmentation totale nombre de descripteurs de fichiers disponibles pour MySQL
  • augmentation du nombre de descripteurs de fichier pour InnoDB
  • améliorer les performances des E/S sur votre système d'exploitation

Vous avez probablement besoin de redémarrer votre serveur pour récupérer complètement de la question.

+0

Pouah. L'autre solution pourrait être de le diviser en suppressions à 1 ligne avec autocommit = ON. –