ОБНОВЛЕНИЕ запроса в MySQL на большой таблице - PullRequest
5 голосов
/ 02 февраля 2011

У меня есть база данных MySQL с 21M записями, и я пытаюсь обновить около 1M записей, но запрос не выполняется с ERROR 1206 (HY000): The total number of locks exceeds the lock table size.

Можно ли обновить таблицу без получения блокировок?

У меня нет доступа для изменения параметров конфигурации MySQL, таких как innodb_buffer_pool_size. Есть ли другой способ добиться того же?

Спасибо

EDIT

  1. Я пробовал его партиями по 5000, он работает несколько раз, но я получаю ту же ошибку
  2. Я пытался использовать LOCK TABLES, чтобы заблокировать всю таблицу, и все же он не работает.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Я думаю, вы можете использовать предложение limit для обновления в пакетном режиме.

1 голос
/ 02 февраля 2011

Попробуйте заблокировать на уровне таблицы, а не на уровне строки. Используйте LOCK TABLES MyTable WRITE. Это может решить проблему. Хотя никаких гарантий! Не забудьте также разблокировать столы!

...