Strannik223 wrote:Тенгиз, судя по тому что Борис сказал что тип базы не InnoDB, и по фразе из доки ...<skipped>... это не должен быть дедлок базы. Я так понял что всюду table-lock используется. Просто из любопытства, интересно что будет если перевести в InnoDB, там строчная блокировка, может полегчает?
Процитированная фраза, во-первых, довольно туманна - откуда engine знает, какую таблицу я захочу выбрать в следующем запросе в моей транзакции, чтобы её заблокировать в "правильном" порядке? Или в этих движках вообще нет поддержки для транзакций или других способов обеспечения атомарности, а также подзапросов и union? Во-вторых, дедлоки ведь могут случиться не только на блокировках, а на любых объектах, на которых нужно ждать. Неужели эти движки могут обходиться только блокировками? Это малореально, так как классическая блокировка - оносительно тяжеловесный объект и если можно обойтись спинлоком или латчем, то обычно так и делают. Использование блокировок для доступа к таблицам ещё понятно, но я сильно удивлюсь, если вся синхронизация в egnine сводится к исключительно табличным блокировкам. Как-то сложно прверить, что им им больше ни к чему не нужно синхронизиновать доступ.
Я бегло просмотрел кое-что из документации по MySQL и обнаружил, что там имеется замечательная команда LOCK TABLE. Я не понимаю, как при наличии доступной пользователю такой инструкции можно говорить о deadlock free engine?