Мой вопрос похож на: Ignoring locked row in a MySQL query за исключением того, что я уже реализовал логику, близкую к тому, что предложено в принятом ответе. Мой вопрос - как установить идентификатор процесса изначально. Все сервера выполнить запрос, как (код в рубине на рельсах, но в результате MySQL запрос):Пропустить заблокированные строки в обновлении mysql, чтобы избежать таймаута блокировки
UPDATE (some_table) SET process_id=(some process_id) WHERE (some condition on row_1) AND process_id is null ORDER BY (row_1) LIMIT 100
Теперь то, что происходит, все процессы пытаются обновить одни и те же строки, что они заперты, и они тайм-аут в ожидании замок. Я хотел бы, чтобы серверы игнорировали строки, которые заблокированы (потому что после освобождения блокировки process_id не будет больше нуля, так что здесь нет смысла блокировать). Я мог бы попытаться рандомизировать пакет записей для обновления, но проблема в том, что я хочу расставить приоритеты для обновления на основе row_1, как в приведенном выше вопросе. Итак, мой вопрос: есть ли способ в mysql проверить, заблокирована ли запись, и игнорировать ее, если она есть?
Мне интересно, если состояние изменилось между этими вызовами. Это будет происходить довольно часто в реальном мире. – gelmanet