peredozo
@peredozo

Почему MySQL SELECT возвращает старые данные?

Есть несколько серверов.
1. Сервер MySQL.
2. Демон (WebSocket) с постоянным коннектом к MySQL, в основном пишет в базу.
3. Другой демон с постоянным коннектом к MySQL, в основном читает из базы.

Мне нужно на обоих демонах (2 и 3) получать актуальные данные из базы и редактировать их.

Запрос вида "SELECT SUM(x), SUM(y) FROM table;" на первом (2) демоне отдает актуальный результат. На втором (3) демоне этот же запрос отдает старые данные, которые были в базе на момент запуска демона (коннекта к MySQL), т.е. он всегда (в рамках одного подключения) возвращает одни и те же данные, которые на самом деле уже 1000 раз изменились (другим демоном). Поведение похоже на кеш, добавление SQL_NO_CACHE не помогает.

От чего такое может быть и как это исправить? Переподключение к базе для каждого запроса использовать не хотелось бы т.к. в базу идут тысячи записей в секунду. Демоны работают с базой под разными логинами.
  • Вопрос задан
  • 465 просмотров
Пригласить эксперта
Ответы на вопрос 2
peredozo
@peredozo Автор вопроса
Нашел решение. Кому интересно на питоне mysql.connector нужно делать коммит после каждого селекта (раньше думал это только для изменений, да и в мануале написано что коммит для изменений, но по факту оказалось для селекта тоже).
Ответ написан
DarkRaven
@DarkRaven
разработка программного обеспечения
Проверьте, сработает ли переподключение. Если сработает, то тут нужно понять причины, чем это вызвано ( к примеру https://stackoverflow.com/questions/181894/mysql-f... , что вы возможно видели).

Если нет - проверьте, как работает ваш инструментарий, возможно кэширование происходит на другом уровне.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы