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.
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 –
Oui, c'est. En fait, c'est une clé étrangère et je n'utilise pas 'ON DELETE CASCADE'. OK je vais essayer. Merci! –