Оптимизация БД таблицы типа MEMORY


sanek1991
1031

Можно ли как-то оптимизировать на шаред хостинге таблицу с типом данных MEMORY, кроме как ручного метода копирования в новую, и последующим ее переименованием ?

На сайте размещен форум, и нужно оптимизировать таблицу session

Записей в ней не много, а размер быстро разрастается из-за фрагментации

Хочу прикрутить в крон нечто типа скрипта, но не нашел скрипт и не понятна сама возможность


olegon

Что-то вы непонятное хотите, если честно. Для начала бы неплохо СУБД с версией и проблемный софт обозначить. И с чего Вы взяли, что таблица разрастается и именно из-за фрагментации. MEMORY по факту ничего не хранит, перезапуск базы все вычистит.


danforth

MEMORY хранит, это BLACKHOLE не хранит. Проблема там не во фрагментации, а в том что хип MySQL не отдает сразу. Так как вы на шареде, вариантов у вас не много. По хорошему, сессии не стоит хранить в базе. Поищите в настройках движка чтобы переключить сессии в файлы.


sanek1991
olegon:
Для начала бы неплохо СУБД с версией и проблемный софт обозначить. И с чего Вы взяли, что таблица разрастается и именно из-за фрагментации.

Если детально, то движок — xenforo v2.1

Таблица — xf_session_activity

То, что она занимает много места из-за фрагментов, выяснил через бэкап.

Если сделать бэкап таблицы и после восстановление с этого бэкапа, то размер ужимается раз примерно в сорок раз. Грубо с 80 MB до 2MB. Все записи при этом соответствуют исходной. Через месяц размер таблицы опять разрастается. И тд. Визуально, скорость при большой таблице, ниже. После восстановления с бэкапа, скорость возрастает.

Но все это я делал через phpmyadmin, вручную

Хочется автоматизировать процесс


LEOnidUKG

Да тупо очищайте эту таблицу и всё, по крону раз в три месяца. Или же установите какой-нибудь редис и храните сессии там.


sanek1991
LEOnidUKG:
Да тупо очищайте эту таблицу и всё, по крону раз в три месяца.

Думал уже эти варианты

В таблице хранятся записи — просмотренных тем участников и еще что-то.

Сами сессии хранятся в другой таблице — xf_session, она уже типа MyISAM, и оптимизируется без проблем

Не стал вообщем.

LEOnidUKG:
Или же установите какой-нибудь редис и храните сессии там.

На шареде это не реально.


LEOnidUKG

Так в чём суть проблемы то? Места не хватает на хостинге?


Aisamiery
sanek1991:
На шареде это не реально.

Есть шареды с редисом, например beget или netangels

А попробуйте запустить на таблице запрос:

alter table xf_session_activity engine=memory;

Ну так чисто для чистоты эксперимента


SeVlad
sanek1991:
На шареде это не реально.

Смотря какой шаред. Как минимум 2шт есть с редисом.

Но задавать вопросы по хостингу нужно в спец. разделе с соблюдением его правил.


sanek1991
LEOnidUKG:
Так в чём суть проблемы то? Места не хватает на хостинге?

Я же писал, в основном из-за снижения скорости. Место, это уже второстепенно.

———- Добавлено 23.01.2020 в 14:26 ———-

Aisamiery:
Есть шареды с редисом, например beget или netangels

А попробуйте запустить на таблице запрос:

Ну так чисто для чистоты эксперимента

Была такая идея, но не силен в этих запросах.

В бэкапе, есть еще команды создания ключей:

ALTER TABLE `xf_session_activity1`

ADD PRIMARY KEY (`user_id`,`unique_key`) USING BTREE,

ADD KEY `view_date` (`view_date`) USING BTREE;

COMMIT;

Их надо делать после — alter table xf_session_activity engine=memory; ?

или они автоматически создадутся как в исходнике ?


Aisamiery
sanek1991:

Была такая идея, но не силен в этих запросах.
В бэкапе, есть еще команды создания ключей:

Их надо делать после — alter table xf_session_activity engine=memory; ?
или они автоматически создадутся как в исходнике ?

Вообще нет, вы же ключи не удаляете, а в бэкапе они есть, потому что это же бэкап и надо воссоздать таблицу полностью.

Просто сделайте тот запрос что я написал. Это помогает по крайней мере освободить место из под таблиц InnoDB движка, может и с MEMORY сработает.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *