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