Bonjour à tous !
Je rencontre un soucis sur ma BD MySQL.
Le problème met en jeu 2 tables.
La première :
La seconde
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE T_TABLE_1 ( TABLE_1_ID INTEGER NOT NULL, + plein d'autres champs pas importants ici... ) TYPE=INNODB;
avec bien sur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE T_TABLE_2 ( TABLE_2_ID INTEGER NOT NULL, TABLE_1_ID INTEGER NOT NULL, + plein d'autres champs pas importants ici... ) TYPE=INNODB;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ALTER TABLE T_TABLE_2 ADD CONSTRAINT cs FOREIGN KEY (TABLE_1_ID) REFERENCES T_TABLE_1(TABLE_1_ID ) ;
Voila pour l'archi.
A un moment donné j'ai besoin de faire une requête de ce style :
Et BADABOUM, lock wait time out .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UPDATE T_TABLE_1 SET CHAMP_1 = 'toto'... WHERE ...
En effet, sur ma table T_TABLE_2 (possédant une foreign key vers T_TABLE_1), je fais à peu prés 20-30 inserts par seconde.
Mon show engine innodb status me donne plus ou moins ça :
Quelques variables :UPDATE ... MA REQUETE
TRX HAS BEEN WAITING 17 SEC FOR THIS LOCK TO BE GRANTED :
RECORD LOCKS space id 0 page no 72812 n bits 272 index 'PRIMARY' of table 'myDB/t_table_1' trx id 0 17573992 lock_mode X waiting
Voila, j'aimerais bien que ma requête d'update passe dans tous les cas...innodb_lock_wait_timeout | 20
innodb_table_locks | ON
autocommit | ON
Je peux pas trop augmenter le innodb_lock_wait_timeout, sinon l'appli va se casser la gu....
Si quelqu'un à une piste pour m'aider...
Partager