'ERROR 1205: Lock wait timeout exceeded; try restarting transaction' betekent dat een query te lang wachtte op een rij die een andere transactie vergrendeld hield. Zo vind je de blokkeerder.
InnoDB vergrendelt rijen die in een transactie worden gewijzigd. Wil een tweede transactie dezelfde rij aanpassen, dan wacht die. Duurt dat langer dan innodb_lock_wait_timeout (standaard 50 seconden), dan geeft de server fout 1205 en wordt de wachtende opdracht afgebroken.
De echte oorzaak is de transactie die het slot vasthoudt: een lange update zonder index, een script dat een transactie start en niet afsluit (geen COMMIT), of een beheerder die in een databaseprogramma een transactie open liet staan.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
InnoDB toont lopende transacties en hoe lang ze al open zijn.
SELECT trx_id, trx_started, trx_state, trx_mysql_thread_id, trx_query
FROM information_schema.innodb_trx
ORDER BY trx_started;SHOW ENGINE INNODB STATUS laat in de sectie TRANSACTIONS zien wie op wie wacht.
SHOW ENGINE INNODB STATUS\GIs een transactie duidelijk vergeten (lang open, niets meer aan het doen), beëindig dan die verbinding. Zijn wijzigingen worden teruggedraaid.
KILL 12345; -- trx_mysql_thread_id uit de eerste queryDoe in een transactie alleen wat bij elkaar hoort, en sluit hem direct af. Geen externe API-aanroepen of wachten op de gebruiker binnen een transactie.
Zonder index vergrendelt een UPDATE of DELETE veel meer rijen dan nodig, omdat InnoDB moet zoeken. Een index op de kolom in de WHERE beperkt de locks.
ALTER TABLE bestellingen ADD INDEX idx_status (status);Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Zelden. Langer wachten laat gebruikers alleen langer wachten. Los de transactie op die het slot vasthoudt.
Bij een lock wait wacht de ene transactie op de andere. Bij een deadlock wachten ze op elkaar; MySQL ziet dat direct en breekt er één af. Zie deadlock found.
Dat is wat de melding voorstelt: 'try restarting transaction'. Bouw een beperkte herhaling in, maar los ook de oorzaak op.
Hulp nodig van een mens? Website-onderhoud · WordPress-support · Hosting en onderhoud · Alle oplossingen