Как я решаю проблему блокировки в MySQL?

В Visual Studio поместите точку останова в код и начните отладку. Когда он сломается, откройте окно «Разборка» («Отладка»> «Windows»> «Разборка» или «Alt + Ctrl + D»).

8
задан Monkey Boson 6 November 2009 в 19:39
поделиться

3 ответа

В сеансе msql> попробуйте

12.5.5.31. SHOW PROCESSLIST Синтаксис

SHOW [FULL] PROCESSLIST

SHOW PROCESSLIST показывает, какие потоки выполняются. Вы также можете получить эту информацию из таблицы INFORMATION_SCHEMA PROCESSLIST или команды mysqladmin processlist. Если у вас есть привилегия PROCESS, вы можете видеть все потоки. В противном случае вы можете видеть только свои собственные потоки (то есть потоки, связанные с учетной записью MySQL, которую вы используете). Если вы не используете ключевое слово FULL, в поле «Информация» отображаются только первые 100 символов каждого оператора.

0
ответ дан 6 December 2019 в 00:07
поделиться

Один из вариантов - включить общий журнал запросов , в который будут записываться все операторы, выполняемые против mysql. Только будьте осторожны, это не займет все ваше дисковое пространство.

Сравните журналы с идентификаторами в выводе статуса innodb, и вы найдете виновника.

0
ответ дан 6 December 2019 в 00:07
поделиться

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.)

4
ответ дан 6 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: