- Совместимость с XenForo
- 2.2
- 2.3
[FX] Session Mod обеспечивает высокопроизводительное автоматическое восстановление, оптимизацию таблиц и управление активностью сессий без простоев для XenForo 2.2+ и 2.3+. Он защищает ваше сообщество от блокировок базы данных, ошибок переполнения памяти и сбоев таблиц без необходимости ручного вмешательства сервера.
В XenForo таблица xf_session_activity регистрирует активных участников, гостей и поисковых роботов, просматривающих ваш форум в режиме реального времени. Эта таблица обновляется и запрашивается практически при каждом HTTP-запросе.
Из-за этой непрерывной высокопроизводительной активности администраторы XenForo часто сталкиваются с катастрофическими проблемами в базе данных, которые приводят к отключению всего форума:
1.
2.
3.
4.
Находится в панели администратора > Инструменты > [FX] Модификация сессий (admin.php?fx-session-mod/):
5.
Перейдите в панель администратора > Настройка > Параметры > [FX] Модификация сессии (admin.php?options/groups/fxSessionMod/):
php cmd.php xf:addon-install FX/SessionMod
Обзор и решенная проблема
В XenForo таблица xf_session_activity регистрирует активных участников, гостей и поисковых роботов, просматривающих ваш форум в режиме реального времени. Эта таблица обновляется и запрашивается практически при каждом HTTP-запросе.Из-за этой непрерывной высокопроизводительной активности администраторы XenForo часто сталкиваются с катастрофическими проблемами в базе данных, которые приводят к отключению всего форума:
- Ошибка MySQL [1114]: Таблица 'xf_session_activity' заполнена:
- При использовании механизма MEMORY (HEAP) размер таблицы строго ограничен параметрами MySQL max_heap_table_size и tmp_table_size (обычно 16 МБ или 32 МБ).
- Во время внезапных всплесков трафика, агрессивного сканирования поисковыми роботами (Google, Bing, Ahrefs, Yandex) или DDoS-атак таблица быстро заполняется.
- Последствия : Посетители и участники видят белый экран с сообщением «Произошла непредвиденная ошибка базы данных» . Всё сообщество перестаёт работать, и администраторы даже не могут получить доступ к панели управления без SSH или phpMyAdmin для ручного выполнения команды TRUNCATE TABLE.
- Повреждение таблицы и ошибки сбоя ([145] Таблица помечена как поврежденная и должна быть восстановлена):
- Отключение электропитания сервера, неожиданные перезапуски MySQL или состояния гонки при высокой параллельной обработке могут привести к повреждению индексных структур таблиц MyISAM или MEMORY.
- Взаимные блокировки и тайм-ауты ожидания блокировки ([1205], [1213]):
- Одновременное обновление и плановые операции удаления данных могут привести к взаимоблокировке строк при высокой одновременной нагрузке на запись.
Основные характеристики
1.
Интеллектуальное автоматизированное восстановление после ошибок
- Обнаружение многокодовых сигнатур:
- Автоматически выявляет исключения базы данных, направленные на xf_session_activity:
- 1114 - ER_RECORD_FILE_FULL ( Таблица заполнена )
- 145, 1194, 1034, 1016, 1030, 126, 127 ( Таблица помечена как поврежденная/сбойная )
- 1205, 1213 ( Тайм-аут ожидания блокировки / Взаимная блокировка )
- 1062 ( Повторяющаяся запись для ключа PRIMARY )
- Автоматически выявляет исключения базы данных, направленные на xf_session_activity:
- Выполнение многоэтапного восстановления:
- Этап 1 : Выполняется команда TRUNCATE TABLE xf_session_activity для мгновенного освобождения оперативной памяти или дискового пространства.
- Этап 2 : Если таблица повреждена или некорректно определена, автоматически предпринимается попытка восстановления таблицы / оптимизации таблицы перед её очисткой.
- Этап 3 : При ограничении прав на удаление данных из DDL выполняется резервный вариант DELETE FROM xf_session_activity.
- Прозрачная автоматическая повторная попытка : автоматически повторяет исходный запрос сразу после восстановления. Посетители никогда не видят страницу с ошибкой.
2.
100% бесперебойная работа, подавление ошибок.
- Записи активности сессии представляют собой временное состояние пользователя ( «Кто просматривает эту ветку обсуждения» ). Они не содержат критически важных транзакционных данных (аутентификация пользователя надежно изолирована в xf_session).
- Если сбой серверного оборудования или диска сохраняется, механизм подавления ошибок предотвращает дальнейшее распространение исключения. Ваш форум остаётся на 100% онлайн, не выдавая посетителям фатальные ошибки 500.
3.
Защита от затопления / Защита дроссельной заслонки
- Встроенная в реестр функция ограничения времени выполнения (минимальный интервал между автоматическими сокращениями — 5 секунд). Предотвращает исчерпание пулов соединений с базой данных из-за «командных штормов», если у сервера базы данных есть проблемы с дисковым пространством или квотами на системном уровне.
4.
Интерактивная панель управления административной панелью.
Находится в панели администратора > Инструменты > [FX] Модификация сессий (admin.php?fx-session-mod/):- Состояние и телеметрия таблиц в режиме реального времени:
- Текущий механизм хранения данных (MEMORY или InnoDB).
- Общее точное количество строк.
- Размер отформатированных данных, размер индекса и общий объем занимаемого пространства.
- Сортировка таблиц и форматирование строк.
- При использовании функции MEMORY: Отображает ограничение max_heap_table_size наряду с процентом использования памяти в реальном времени и визуальными предупреждениями.
- История восстановления после инцидента:
- Общее количество автоматических вмешательств по восстановлению за всю жизнь.
- Отметка времени последнего автоматического восстановления.
- Отформатированная трассировка стека и сообщение о последней зарегистрированной ошибке.
- Кнопка действия «Сбросить статистику».
- Инструменты для обслуживания в один клик:
- Очистить таблицу (TRUNCATE) : ручная очистка активности сессии одним щелчком мыши.
- Проверка и восстановление таблицы (REPAIR) : Выполнение восстановления/оптимизации таблицы MySQL вручную.
- Switch Storage Engine : Беспрепятственно переключайтесь между MEMORY (максимальная производительность в оперативной памяти) и InnoDB (безопасная база данных с дисковой поддержкой и без ограничений по объему памяти в куче) без обращения к консоли SQL.
5.
Проактивная проверка работоспособности Cron (
- Запускается автоматически каждый час для поддержания гигиены столов:
- Функция автоматического удаления записей при превышении заданного вами безопасного предела (fxSessionMod_maxRows) автоматически очищает записи.
- Упреждающая очистка памяти : если таблица использует механизм MEMORY и использование памяти достигает 90% , дополнение упреждающе очищает таблицу до того, как может возникнуть ошибка MySQL 1114.
Руководство по настройке и параметрам
Перейдите в панель администратора > Настройка > Параметры > [FX] Модификация сессии (admin.php?options/groups/fxSessionMod/):| Параметр | По умолчанию | Описание | Рекомендуется |
|---|---|---|---|
| Автоматическое очищение таблицы при ошибке fxSessionMod_autoEmpty | Включено | При возникновении исключения в базе данных переменная xf_session_activity автоматически обрезается. | Включено |
| Таблица автоматического восстановления fxSessionMod_autoRepair | Включено | При обнаружении повреждения таблицы выполняется попытка восстановления таблицы (REPAIR TABLE) перед её усечением. | Включено |
| Предотвращение сбоев форума (ошибок Swallow Errors) fxSessionMod_swallowErrors | Включено | Предотвращает отображение посетителям страниц с ошибкой 500, вызванной неразрешимыми ошибками активности сессии. | Включено |
| Запись в журнал ошибок сервера fxSessionMod_logError | Включено | Создает запись в административном журнале ошибок сервера с подробным описанием ошибки при каждом запуске процесса восстановления. | Включено |
| Ограничение на максимальное количество строк fxSessionMod_maxRows | 0 | При превышении заданного количества строк в cron автоматически запускается усечение данных. Установите значение 0, чтобы отключить эту функцию. | 0 (или 50000 при высокой интенсивности трафика) |
MEMORY против InnoDB: что лучше использовать?
| Коэффициент сравнения | Механизм памяти (куча памяти) | Движок InnoDB |
|---|---|---|
| Место хранения | Системная оперативная память | Дисковый/буферный пул |
| Производительность записи | Чрезвычайно быстро | Высокая скорость (с дисковым вводом-выводом) |
| Ограничение вместимости | Ограничено параметром max_heap_table_size | Практически безгранично |
| Режим отказа | Вызывает ошибку 1114 (Таблица заполнена) | Замедление записи на диск при высокой нагрузке |
| Рекомендация | Идеально подходит для высокой производительности в сочетании с [FX] Session Mod. | Идеально подходит для обеспечения стабильности по принципу «настроил и забыл» без необходимости настройки памяти. |
Системные требования
- XenForo: версия 2.2.0 или выше (совместимо с XenForo 2.3.x).
- PHP: 7.4.0 или выше (PHP 8.0, 8.1, 8.2, 8.3 полностью поддерживаются).
- База данных: MySQL 5.7+ / MariaDB 10.3+.
Инструкция по установке
Способ 1: Установка через панель администратора (рекомендуется)
- Перейдите в панель администратора > Дополнения .
- Нажмите «Установить/обновить из архива» .
- Выберите пакет FX-SessionMod-1.0.0.zip и нажмите «Загрузить» .
- Подтвердите действия, предложенные при установке.
Метод 2: Ручная установка через каталог.
- Загрузите каталог FX/SessionMod на свой веб-сервер по адресу:
<web_root>/src/addons/FX/SessionMod - Перейдите в панель администратора > Дополнения и нажмите «Установить» в разделе [FX] Session Mod .
Метод 3: Интерфейс командной строки (CLI)
Из корневого каталога XenForo выполните команду:php cmd.php xf:addon-install FX/SessionMod
