Мы очень расстраиваемся в создании взаимоблокировок в MySQL. Это происходит не из-за превышения таймаута блокировки, поскольку взаимоблокировки происходят мгновенно, когда они происходят. Вот SQL-код, который выполняется на 2 отдельных нитей (с 2-мя отдельными соединениями из пула соединений), что создает тупиковую ситуацию:Получение взаимоблокировок в MySQL
UPDATE Sequences SET Counter = LAST_INSERT_ID(Counter + 1) WHERE Sequence IS NULL
последовательностях таблица имеет 2 колонки: Последовательность и счетчик
LAST_INSERT_ID позволяет нам до retrieve this updated counter value as per MySQL's recommendation. Это работает идеально для нас, но мы получаем эти тупики! Почему мы получаем их и как мы можем их избежать?
Большое спасибо за любую помощь в этом.
EDIT: все это в транзакции (требуется, поскольку я использую Hibernate), и AUTO_INCREMENT здесь не имеет смысла. Я должен был быть более ясным. Таблица Sequences содержит много последовательностей (в нашем случае около 100 миллионов из них). Мне нужно увеличить счетчик и получить это значение. AUTO_INCREMENT не играет никакой роли во всем этом, это не имеет ничего общего с идентификаторами или PRIMARY KEYs.
Не могли бы вы вывести вывод 'SHOW CREATE TABLE Sequences'? – Quassnoi
CREATE TABLE 'sequences' ( ' Id' BigInt (20) NOT NULL AUTO_INCREMENT, 'Sequence' VARBINARY (1005) По умолчанию NULL, ' Counter' INT (11) По умолчанию '0', PRIMARY KEY ('Id'), UNIQUE KEY 'Sequences_Constraint' (' Sequence' (104)) ) ENGINE = InnoDB AUTO_INCREMENT = 134 DEFAULT CHARSET = utf8 –