Зачастую на порталах Битрикс24, проработавших значительное время наблюдаются проблемы с чрезмерно разросшейся базой данных. БД разрастается до сотен гигабайт, увеличивается время резервного копирования и восстановления с него. В целом система начинает заметно «тормозить».
Если посмотреть внимательно — что же это за данные и нужны ли они, мы увидим, что больший объем занимают логи БП, чаты и сообщения мессенджером, емейлы, поисковые индексы и т. п.
Все это — необходимая информация, но так ли Вам нужны диалоги с клиентом, прошедшие 5 лет назад?
Решением проблемы могла бы стать очистка БД от такой информации. Но просто взять ее и удалить без следа — жалко, да и опасно. Данные могут оказаться связанными, нарушится их целостность и это может привести к не прогнозируемым ошибкам.

Становится понятно что для решения проблемы нужно к каждой таблице подходить индивидуально. В некоторых случаях строки можно удалить целиком. Но если на таблицу ссылаются другие таблицы — это приведет к проблемам. В таком случае необходимо оставить строку в таблице, но уменьшить место занимаемое ей.
Если посмотреть на структуру занимаемого таблицей места, то можно увидеть что часто большинство объема информации хранится в текстовых полях таблицы. Для Битрикса это будут поля с типом TEXT. Получается что для уменьшения обьема таблицы можно перенести эти тексты во внешнюю БД, а на их месте оставить пустые строки. При замене текстов на пустые для записей старше нескольких лет — мы высвободим значительную часть места.
Давайте попробуем сделать это на практике. Для примера возьмем таблицу b_im_messages представленную на рисунке выше. Она занимает 16,6 ГБ.

В ней есть поле с идентификатором записи (ID), большие текстовые поля (MESSAGE, MESSAGE_OUT), поле по которому мы можем судить о «возрасте» записи (DATE_CREATE).
Давайте попробуем очистить текстовые поля для записей «старее» 2021 года. Просто переносим значения полей с указанием таблицы и идентификатора строки (ID), а в таблицах Битрикса заменяем значения в текстовых полях MESSAGE и MESSAGE_OUT на пустые для строк старше 2021 года, ориентируясь по полю DATE_CREATE.
После этого мы увидим что объем занимаемого места таблицей не изменился. Это происходит потому, что место выделяемое под текстовые значения в MySQL не было «перевыделено».
Для этого достаточно запустить запрос
OPTIMIZE TABLE b_im_message
После выполнения данного запроса размер таблицы снизился до 3.6 Гб. Т.е. почти втрое.

В случае чего не составит больших проблем вернуть данные назад в Битрикс, так как все привязки остались на месте и данные текстовых полей остались во внешней БД. Под эти задачи мы написали небольшое приложение, в котором можно задать настройки того как данные переносятся:

Обращайтесь в нашу Студию, если вам необходимо заархивировать старые данные в вашем Битрикс24.