У меня есть таблица InnoDB, которую нужно обновлять каждые десять минут в пределах от 60 до 200 тыс. Записей.Наш подход к этому моменту заключался в следующем:
- Отключить автокоммит
- Усечь таблицу
- Выполнить отдельные запросы и дополнительные вычисления (с использованием PHP)
- Вставить новые записи
- Зафиксировать
После выполнения операции усечения данные немедленно удаляются и больше не доступны из интерфейса пользователя.Для наших пользователей это довольно смущает, хотя в течение примерно 30 секунд сценарий обнаруживает операцию фиксации и таблица заполняется заново.
Я подумал, что, возможно, смогу завершить всю операцию, включая Truncate
, в транзакции, и что это может сократить промежуток времени, в течение которого таблица кажется пустой для пользователей.Поэтому я изменил SET AUTOCOMMIT=0
на START TRANSCATION
.
Yikes! Это имело противоположное желаемому эффекту!Теперь операция TRUNCATE
по-прежнему происходит в начале скрипта, но для выполнения операций INSERT
внутри транзакции требуется намного дольше , так что к моменту выполнения операции COMMIT
и данные в таблице снова доступны, прошло около десять минут!
Что может вызвать это?По правде говоря, я не ожидал каких-либо изменений, потому что у меня сложилось впечатление, что инициирование транзакции в основном просто отключает Autocommit
в любом случае ??