Архивация старых данных в коробке Битрикс24 


Зачастую на порталах Битрикс24, проработавших значительное время наблюдаются проблемы с чрезмерно разросшейся базой данных. БД разрастается до сотен гигабайт, увеличивается время резервного копирования и восстановления с него. В целом система начинает заметно «тормозить». 

Если посмотреть внимательно — что же это за данные и нужны ли они, мы увидим, что больший объем занимают логи БП, чаты и сообщения мессенджером, емейлы, поисковые индексы и т. п.

Все это — необходимая информация,  но так ли Вам нужны диалоги с клиентом, прошедшие 5 лет назад? 

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

Рис 1. Размеры таблиц БД для портала, работающего более 5 лет. 

Становится понятно что для решения проблемы нужно к каждой таблице подходить индивидуально. В некоторых случаях строки можно удалить целиком. Но если на таблицу ссылаются другие таблицы — это приведет к проблемам. В таком случае необходимо оставить строку в таблице, но уменьшить место занимаемое ей.

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

Давайте попробуем сделать это на практике. Для примера возьмем таблицу b_im_messages представленную на рисунке выше. Она занимает 16,6 ГБ. 

Рис 2. Строки таблицы b_im_messages

В ней есть поле с идентификатором записи (ID), большие текстовые поля (MESSAGE, MESSAGE_OUT), поле по которому мы можем судить о «возрасте» записи (DATE_CREATE).

Давайте попробуем очистить текстовые поля для записей «старее» 2021 года. Просто переносим значения полей с указанием таблицы и идентификатора строки (ID), а в таблицах Битрикса заменяем значения в текстовых полях MESSAGE и MESSAGE_OUT на пустые для строк старше 2021 года, ориентируясь по полю DATE_CREATE

После этого мы увидим что объем занимаемого места таблицей не изменился. Это происходит потому, что место выделяемое под текстовые значения в MySQL не было «перевыделено».

Для этого достаточно запустить запрос

OPTIMIZE TABLE b_im_message

После выполнения данного запроса размер таблицы снизился до 3.6 Гб. Т.е. почти втрое. 

Рис.3 Размер таблицы уменьшился

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

Рис. 4 Интерфейс модуля — архиватора

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

,

Добавить комментарий

Ваш адрес email не будет опубликован.