После обновления системы с Debian 12 до Debian 13 администраторы Zabbix часто сталкиваются с ошибкой Record has changed since last read in table ‘sessions’, которая появляется в логах nginx и связана с работой веб-интерфейса.
Несмотря на то что Zabbix 7 продолжает функционировать, ошибка указывает на проблему в настройках базы данных и требует корректного решения.
Как проявляется ошибка
В логах nginx или PHP-FPM появляются повторяющиеся сообщения вида:
PHP Warning: Error in query [UPDATE sessions SET lastaccess=...] [Record has changed since last read in table 'sessions']
Ошибка возникает при открытии дашбордов, графиков и других элементов Zabbix Web UI.
Причина возникновения
После обновления до Debian 13 обычно происходит переход на:
- MariaDB 11.x
- PHP 8.3 (8.4)
- обновлённые системные библиотеки
В MariaDB 11 по умолчанию используется уровень изоляции транзакций REPEATABLE-READ.
Zabbix Web UI активно и параллельно обновляет таблицу sessions, в частности поле lastaccess.
При высокой конкурентности MariaDB начинает отклонять такие обновления, что и приводит к ошибке Record has changed since last read.
Важно понимать: это не ошибка nginx и не проблема PHP-FPM, а конфликт транзакций в базе данных.
Пошаговое решение проблемы
Шаг 1. Проверка уровня изоляции транзакций
Подключитесь к MariaDB (MySQL) и выполните команду:
SELECT @@transaction_isolation;
Если значение — REPEATABLE-READ, требуется изменение настройки.
Шаг 2. Установка уровня READ-COMMITTED
Временно, до перезапуска сервера:
SET GLOBAL transaction_isolation = 'READ-COMMITTED';
Для постоянного решения создайте файл конфигурации:
/etc/mysql/mariadb.conf.d/50-zabbix.cnf
С содержимым:
[mysqld] transaction-isolation = READ-COMMITTED
Шаг 3. Перезапуск сервисов
Перезапустите необходимые службы:
systemctl restart mariadb systemctl restart php-fpm systemctl restart nginx systemctl restart zabbix-server
Проверка результата
Откройте веб-интерфейс Zabbix 7 и просмотрите лог nginx:
tail -f /var/log/nginx/error.log
Сообщения Record has changed since last read in table 'sessions' больше не должны появляться.
Почему это решение корректно
READ-COMMITTEDрекомендован для Zabbix уменьшает конфликты транзакций снижает нагрузку на базу данных повышает стабильность Web UI Zabbix не требует строгой сериализуемости транзакций, поэтому переход наREAD-COMMITTEDбезопасен и оправдан.
Вывод
Ошибка Record has changed since last read in table ‘sessions’ в Zabbix 7 после обновления Debian 13 возникает из-за изменений в работе MariaDB 11. Корректная настройка уровня изоляции транзакций полностью устраняет проблему и обеспечивает стабильную работу веб-интерфейса без костылей и отключения логирования.


Следи за своими финансами легко прямо в Telegram — начни вести учёт доходов и расходов уже сейчас!