У меня достаточно загруженная система с PostgreSql 9.1
а также PHP 5.3
,
Я должен хранить время последнего входа в систему и IP-пользователя каждый раз после входа пользователя. Когда пользователь входит в систему, система сохраняет его в Redis
и у меня есть скрипт в crontab, который выполняется каждую минуту и получает данные из Redis
и обновляет строки пользователя с последним временем входа в систему и IP в БД одним большим запросом.
Если в этот момент некоторые скрипты начнут выполнять запрос на обновление пользовательской таблицы, я могу найти ошибки общих блокировок в PostgreSql
журнал. Огромная проблема, что PHP-скрипты падают, когда эта ошибка происходит в PostgreSql
без каких-либо исключений из PDO.
Я знаю, чтобы избежать общих блокировок, мне нужно выполнять запрос на обновление один за другим, а не одновременно. Но реализовать это не так просто в моей системе.
Каков наилучший подход, чтобы избежать общих блокировок?
Задача ещё не решена.
Других решений пока нет …