Назад | Перейти на главную страницу

Удаление строк MySQL вызывает ошибку таблицы блокировки

Мне нужно было удалить пару миллионов строк, но их нельзя удалить сразу без этой ошибки

ОШИБКА 1206 (HY000): общее количество блокировок превышает размер таблицы блокировок.

Итак, я написал сценарий для удаления 100 000 строк по 10 000 за раз. Он запускался один раз, но когда я запускаю его второй раз, я получаю ошибку при первой попытке удалить 10,000.

Я пытаюсь удалить 10 000 строк, используя оператор удаления, который относится ко всем 2 миллионам строк, но я использую предложение о ограничении только для 10 000.

Я пробовал добавить "разблокировать таблицы"; в сценарий перед первым удалением, но это не помогает. Я все еще получаю ошибку таблицы блокировок при первом удалении.

Есть идеи, как я могу это сделать?

Есть ли способ сказать ему НЕ блокировать записи? Я могу убедиться, что к таблице больше ничего не обращается.

Это механизм хранения InnoDB?

Эта ошибка означает, что MySQL не имеет достаточно места для хранения всех блокировок строк, необходимых для выполнения вашего запроса. В зависимости от имеющейся у вас оперативной памяти установите innodb_buffer_pool_size до разумного значения (256 МБ, 512 МБ), вы, вероятно, никогда не столкнетесь с этой ошибкой.

Проверьте значение по умолчанию с помощью mysql> show global variables like 'innodb_buffer%';.