В Visual Studio поместите точку останова в код и начните отладку. Когда он сломается, откройте окно «Разборка» («Отладка»> «Windows»> «Разборка» или «Alt + Ctrl + D»).
В сеансе msql> попробуйте
12.5.5.31. SHOW PROCESSLIST Синтаксис
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST показывает, какие потоки выполняются. Вы также можете получить эту информацию из таблицы INFORMATION_SCHEMA PROCESSLIST или команды mysqladmin processlist. Если у вас есть привилегия PROCESS, вы можете видеть все потоки. В противном случае вы можете видеть только свои собственные потоки (то есть потоки, связанные с учетной записью MySQL, которую вы используете). Если вы не используете ключевое слово FULL, в поле «Информация» отображаются только первые 100 символов каждого оператора.
Один из вариантов - включить общий журнал запросов , в который будут записываться все операторы, выполняемые против mysql. Только будьте осторожны, это не займет все ваше дисковое пространство.
Сравните журналы с идентификаторами в выводе статуса innodb, и вы найдете виновника.
If your queries are waiting up to three seconds, that would make them easy to capture in the slow-query-log. Another suggestion that Xaprb writes is to use InnoTop. There is a S.O. post on a similar InnoDB lock issue.
However, you might want to review the code and look for places where you are doing a whole table select. For example, if you have a table work items and you want to select those that are pending, doing a
SELECT * FROM queue WHERE status = 'pending' ORDER BY create_date LIMIT 1`
could be triggering a temp-file-sort condition that will occupy the whole table if it is in a transaction. Adding FOR UPDATE
to the select could help it acquire the lock better. Apparently, clustering primary keys can help.
In my environment, my query connection will report an error on a transaction lock issue, so I see errors like: Deadlock found when trying to get lock; try restarting transaction
. You might have to check for warnings if your query is actually failing. (This might not help if you can't change how the application reports query failures.)