моя первая мысль была то, что Вы говорите, что боты очищают Вашу веб-страницу, которая предположила бы, что они только берут содержимое HTML. Так наличие Вашего экрана порядка проверяет (от http-журналов), что связанная с предложением диаграмма была загружена из бота
DELETE FROM `table`
WHERE (whatever criteria)
ORDER BY `id`
LIMIT 1000
Промыть, полоскать, повторять, пока не будут затронуты нулевые строки. Может быть, в сценарии, который спит на секунду или три между итерациями.
I'd also recommend adding some constraints to your table to make sure that this doesn't happen to you again. A million rows, at 1000 per shot, will take 1000 repetitions of a script to complete. If the script runs once every 3.6 seconds you'll be done in an hour. No worries. Your clients are unlikely to notice.
Я бы использовал mk-archiver из отличного пакета утилит Maatkit (набор скриптов Perl для управления MySQL) Maatkit от Барона Шварца , автор книги О'Рейли «High Performance MySQL».
Цель - минимальное воздействие, работа по извлечению старых данных из таблица без влияния на запросы OLTP много. Вы можете вставить данные в другой стол, который не обязательно должен быть на одном сервер. Вы также можете написать это в файл в формате, подходящем для ЗАГРУЗКИ ИНФАЙЛ ДАННЫХ. Или вы не можете сделать ни то, ни другое, в в этом случае это просто добавочный УДАЛИТЬ.
Он уже создан для архивации ненужных строк небольшими партиями и в качестве бонуса может сохранять удаленные строки в файл на случай, если вы испортите запрос, выбирающий строки для удаления.
Установка не требуется. , просто возьмите http://www.maatkit.org/get/mk-archiver и запустите на нем perldoc (или прочтите веб-сайт) для получения документации.
Do it in batches of lets say 2000 rows at a time. Commit in-between. A million rows isn't that much and this will be fast, unless you have many indexes on the table.