Ошибка Record has changed since last read in table ‘sessions’ в Zabbix 7

Ошибка Record has changed since last read in table 'sessions' в Zabbix 7

После обновления системы с 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. Корректная настройка уровня изоляции транзакций полностью устраняет проблему и обеспечивает стабильную работу веб-интерфейса без костылей и отключения логирования.


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

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


Unlix.ru © Все права защищены 2015 - 2025

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!