На производственных серверах мне нужно когда-нибудь удалить несколько сотен тысяч строк. Запрос оптимизирован, но удаление сразу приведет к зависанию серверов, поэтому я делаю это вручную кусками, удаляя, например, 5000 строк каждый раз. Чтобы позволить серверу очищать ожидающие запросы и сделать блокировки таблиц менее очевидными для конечных пользователей. Я использую движок MyISAM.
Разве нет инструмента / команды / метода, который выполняет такие длинные запросы с низким приоритетом или по частям, или таким образом, чтобы сервер не зависал в тех случаях, когда все в порядке, если на выполнение потребуется много времени?
какие лучшие практики?
Вы можете попробовать добавить LOW_PRIORITY
ключевое слово к вашему DELETE
запросите и посмотрите, как это работает. Например DELETE LOW_PRIORITY FROM tablenamegoeshere ...
Проверять, выписываться https://dev.mysql.com/doc/refman/5.5/en/delete.html Больше подробностей.