Таблица MySql исчезает случайным образом после нескольких запросов TRUNCATE

У меня есть дюжина таблиц, которые очищаются с помощью таблицы TRUNCATE каждые 10-20 секунд или около того, когда мой php-скрипт запускается в оболочке с локальной машины XAMPP.

По неизвестной причине каждые пару часов случайная таблица исчезает, и в результате мой скрипт останавливается. В скрипте нет запросов, которые бы удаляли / удаляли таблицу

Что интересно, таблица удаляется в главном окне, но я все еще вижу ее на боковой панели слева.

Когда я пытаюсь воссоздать удаленную таблицу, я получаю ошибку mysql «нет такой таблицы». Мне удалось воссоздать его, скопировав файл таблицы .frm из идентичной таблицы, и это позволило бы мне удалить старый файл через sql и заново создать его.

Кто-нибудь сталкивался с таким поведением или знает объяснение? Это сводило меня с ума в течение последних нескольких дней …

-1

Решение

Может быть, вы должны рассмотреть вопрос об использовании truncate для такого рода операций. Цитировать из справочник:

Логически, TRUNCATE TABLE похож на DELETE оператор, который удаляет все строки или последовательность DROP TABLE а также CREATE TABLE заявления. Для достижения высокой производительности он обходит DML-метод удаления данных. […] Хотя TRUNCATE TABLE похож на DELETE, это классифицируется как Заявление DDL а не заявление DML. Он отличается от DELETE в MySQL 5.5 следующим образом:

  • Усеченные операции бросить и воссоздать таблица, которая намного быстрее, чем удаление строк одна за другой, особенно для больших таблиц.

Это может быть хорошо для не частых операций. Но вы усекаете таблицы каждые 10-20 секунд! Я не знаю, работает ли ваш скрипт непрерывно, но если это так, всегда есть вероятность, что часть вашей программы пытается вставить строку в только что усеченную таблицу (которая, возможно, не была полностью перестроена). В моей голове (и в моей интуиции) есть много вещей, которые говорят мне, что не стоит так часто урезать таблицы.

С другой стороны … С какой стати вам нужно обрезать таблицы каждые 20 секунд !? Я могу только рекомендовать вам избегать этого … создавать разделы, индексировать таблицы, обрезать таблицы, когда вы уверены, что никакой другой процесс не пытается их использовать … Использовать DELETE вместо TRUNCATETRUNCATE предназначен для задач технического обслуживания, а не для повседневной эксплуатации (это мое мнение).

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]