SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.04.2023 15:41:51

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Большой объем таблиц JSON

Приветствую. Столкнулся с проблемой больших размеров таблиц использующих поля json.
К примеру таблица размером 50 МБ при многократном обращении к ней с INSERT, UPDATE приводит к размеру 1.8 ГБ.
При проведении оптимизации таблицы размер данных схлопывается до 65 МБ. Не могу понять с чем связано.

Пробовал изменить max_allowed_packet с 64 МБ на 16 МБ, но разницы не почувствовал.
MySQL 8.0.28

Неактивен

 

#2 26.04.2023 16:56:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Большой объем таблиц JSON

Здравствуйте. MySQL обычно переиспользует место — тогда, когда может это сделать. А вот может он это сделать тогда, когда на старые страницы никто не ссылается.

Чаще всего это какая-то транзакция, которая потрогала старые страницы, но не отпустила. Проверить можно, например, через

SHOW ENGINE INNODB STATUS
— там показываются транзакции и их время работы.

Неактивен

 

#3 26.04.2023 17:27:24

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Re: Большой объем таблиц JSON

paulus написал:

Здравствуйте. MySQL обычно переиспользует место — тогда, когда может это сделать. А вот может он это сделать тогда, когда на старые страницы никто не ссылается.

Чаще всего это какая-то транзакция, которая потрогала старые страницы, но не отпустила. Проверить можно, например, через

SHOW ENGINE INNODB STATUS
— там показываются транзакции и их время работы.

SHOW ENGINE INNODB STATUS - пусто
SHOW FULL PROCESSLIST -  event_scheduler и два спящих процесса по information_schema 

Я пробовал перезапускать службу MYSQL, таблицы не уменьшаются. 
Складывается впечатление что при INSERT/UPDATE MySQL резервирует место...

Неактивен

 

#4 26.04.2023 20:09:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Большой объем таблиц JSON

А пусто — это вообще ничего нет, или нет транзакций? У вас InnoDB или MyISAM?

Вообще, выглядит очень странно. В инетике еще нашел интересный кейс — если есть большие транзакции, которые сгенерят большие временные таблицы, они тоже могут расширить неконтролируемо файлы. Условный join, который свалился на диск.

--
Оставлю эту багу тут для себя, если вдруг будем глубоко рыть, там могут быть какие-то полезные куски для диагностики. Сама бага на похожую тему, но пофикшена.
https://bugs.mysql.com/bug.php?id=96466

Неактивен

 

#5 26.04.2023 21:37:41

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Re: Большой объем таблиц JSON

paulus написал:

А пусто — это вообще ничего нет, или нет транзакций?

На тот момент когда я смотрел подключений к серверу не было  и SHOW ENGINE INNODB STATUS выдал пустую таблицу.

paulus написал:

У вас InnoDB или MyISAM?

Система хранения InnoDB

Пробывал


SELECT SUM(JSON_STORAGE_SIZE(data)) AS size,
       SUM(JSON_STORAGE_FREE(data)) AS free
  FROM bd.data d
 

вывод: size 31745097 (30 mb)
           free 92604

сам файл data.ibd = 315 mb.

Получается 285mb  пустоты.

Неактивен

 

#6 27.04.2023 10:58:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Большой объем таблиц JSON

SHOW ENGINE INNODB STATUS выдает не таблицу, он выдает человекочитаемый текст про состояние InnoDB. Там прямо много строчек, даже если сервер ничего не делает. Когда Вы пишете про пустую таблицу, я пугаюсь и думаю, что что-то не понимаю smile

285 мегабайт пустоты — это нормально. Таблицы InnoDB растут достаточно большими кусками, потому что прирост файла — потенциально дорогая операция, и лучше ее делать редко. Но дальше внутри файла место должно нормально переиспользоваться и очищаться.

Неактивен

 

#7 27.04.2023 17:59:22

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Re: Большой объем таблиц JSON

SHOW ENGINE INNODB STATUS в dbForge выводит таблицу(файл прикрепил)

285 мегабайт пустоты — это плохо, когда разрастется до гигабайтов поиск по таблице начнет "тормозить".

Отредактированно mikado3333 (27.04.2023 18:00:11)


Прикрепленные файлы:
Attachment Icon 1.jpg, Размер: 34,641 байт, Скачано: 110

Неактивен

 

#8 28.04.2023 08:55:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Большой объем таблиц JSON

Какая красота. Никогда с таким не встречался, но в интернетике люди, которые такое наблюдали (и тоже до этого никогда не встречались) рекомендуют перезагрузить базу и почистить место.

Вот, например:
https://ronaldbradford.com/blog/that-mi … 007-03-20/
https://forums.percona.com/t/show-engin … empty/2774

Само отсутствие вывода тут меня бы очень насторожило, выглядит так, что с базой самой по себе что-то не в порядке. Боюсь, что тут нужна какая-то детальная диагностика. У вас какая-то особая сборка? Или официальная? Можно попробовать обновиться до последней официальной и посмотреть, остаются ли эти странные сайдэффекты.

Неактивен

 

#9 28.04.2023 23:04:21

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Re: Большой объем таблиц JSON

Перезапуск не помогает.
MySQL Community Server скачан с  mysql.com.
После праздников попробую обновить.

Неактивен

 

#10 06.05.2024 00:24:07

mikado3333
Участник
Зарегистрирован: 26.04.2023
Сообщений: 6

Re: Большой объем таблиц JSON

Проблема оказалась в многократном  изменении json-а (цикл) в пределах одной транзакции.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson