Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую. Столкнулся с проблемой больших размеров таблиц использующих поля json.
К примеру таблица размером 50 МБ при многократном обращении к ней с INSERT, UPDATE приводит к размеру 1.8 ГБ.
При проведении оптимизации таблицы размер данных схлопывается до 65 МБ. Не могу понять с чем связано.
Пробовал изменить max_allowed_packet с 64 МБ на 16 МБ, но разницы не почувствовал.
MySQL 8.0.28
Неактивен
Здравствуйте. MySQL обычно переиспользует место — тогда, когда может это сделать. А вот может он это сделать тогда, когда на старые страницы никто не ссылается.
Чаще всего это какая-то транзакция, которая потрогала старые страницы, но не отпустила. Проверить можно, например, через
Неактивен
paulus написал:
Здравствуйте. MySQL обычно переиспользует место — тогда, когда может это сделать. А вот может он это сделать тогда, когда на старые страницы никто не ссылается.
Чаще всего это какая-то транзакция, которая потрогала старые страницы, но не отпустила. Проверить можно, например, черезSHOW ENGINE INNODB STATUS— там показываются транзакции и их время работы.
SHOW ENGINE INNODB STATUS - пусто
SHOW FULL PROCESSLIST - event_scheduler и два спящих процесса по information_schema
Я пробовал перезапускать службу MYSQL, таблицы не уменьшаются.
Складывается впечатление что при INSERT/UPDATE MySQL резервирует место...
Неактивен
А пусто — это вообще ничего нет, или нет транзакций? У вас InnoDB или MyISAM?
Вообще, выглядит очень странно. В инетике еще нашел интересный кейс — если есть большие транзакции, которые сгенерят большие временные таблицы, они тоже могут расширить неконтролируемо файлы. Условный join, который свалился на диск.
--
Оставлю эту багу тут для себя, если вдруг будем глубоко рыть, там могут быть какие-то полезные куски для диагностики. Сама бага на похожую тему, но пофикшена.
https://bugs.mysql.com/bug.php?id=96466
Неактивен
paulus написал:
А пусто — это вообще ничего нет, или нет транзакций?
На тот момент когда я смотрел подключений к серверу не было и SHOW ENGINE INNODB STATUS выдал пустую таблицу.
paulus написал:
У вас InnoDB или MyISAM?
Система хранения InnoDB
Пробывал
Неактивен
SHOW ENGINE INNODB STATUS выдает не таблицу, он выдает человекочитаемый текст про состояние InnoDB. Там прямо много строчек, даже если сервер ничего не делает. Когда Вы пишете про пустую таблицу, я пугаюсь и думаю, что что-то не понимаю
285 мегабайт пустоты — это нормально. Таблицы InnoDB растут достаточно большими кусками, потому что прирост файла — потенциально дорогая операция, и лучше ее делать редко. Но дальше внутри файла место должно нормально переиспользоваться и очищаться.
Неактивен
SHOW ENGINE INNODB STATUS в dbForge выводит таблицу(файл прикрепил)
285 мегабайт пустоты — это плохо, когда разрастется до гигабайтов поиск по таблице начнет "тормозить".
Отредактированно mikado3333 (27.04.2023 18:00:11)
Неактивен
Какая красота. Никогда с таким не встречался, но в интернетике люди, которые такое наблюдали (и тоже до этого никогда не встречались) рекомендуют перезагрузить базу и почистить место.
Вот, например:
https://ronaldbradford.com/blog/that-mi … 007-03-20/
https://forums.percona.com/t/show-engin … empty/2774
Само отсутствие вывода тут меня бы очень насторожило, выглядит так, что с базой самой по себе что-то не в порядке. Боюсь, что тут нужна какая-то детальная диагностика. У вас какая-то особая сборка? Или официальная? Можно попробовать обновиться до последней официальной и посмотреть, остаются ли эти странные сайдэффекты.
Неактивен
Перезапуск не помогает.
MySQL Community Server скачан с mysql.com.
После праздников попробую обновить.
Неактивен
Проблема оказалась в многократном изменении json-а (цикл) в пределах одной транзакции.
Неактивен