2012-06-22 5 views
4

Для одного запроса на действие я вижу около 6 отсчетов того, что, по-видимому, относится к обновлениям записей, связанных с AuthLogic, для модели пользователя. Мне интересно, если это нормально, или если кто-то еще столкнулся с этим и что я могу с этим поделать. Я все еще пытаюсь найти причину этого, но я очень подозреваю, что это связано с AuthLogic.AuthLogic, по-видимому, обновляет запись пользователя несколько раз за один запрос

Как вы можете видеть, обновления к записи довольно медленные, и все это происходит в рамках одного запроса, вызывает тревогу!

SQL (0.1ms) BEGIN 
    AREL (0.6ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:43', `perishable_token` = 'rGvsUjfDYw4lrFk6bYJu', `updated_at` = '2012-06-22 22:02:43' WHERE `users`.`id` = 6697 
    SQL (91.8ms) COMMIT 
    User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1 
    SQL (0.2ms) BEGIN 
    AREL (0.5ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:43', `perishable_token` = 'CHSKWhMmNHB5h8HeAWI', `updated_at` = '2012-06-22 22:02:43' WHERE `users`.`id` = 6697 
    SQL (43.2ms) COMMIT 
    User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1 
    SQL (0.2ms) BEGIN 
    AREL (0.5ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'yDEGFCy4JrKrLVOKhwP', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697 
    SQL (43.4ms) COMMIT 

User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1 
    SQL (0.1ms) BEGIN 
    AREL (0.3ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'TSrzZCKL2C0R5BPJAkVA', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697 
    SQL (36.6ms) COMMIT 
    User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1 
    SQL (0.1ms) BEGIN 
    AREL (0.3ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'hfRuoHYvIQZCdd8obtA', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697 
    SQL (38.4ms) COMMIT 
+0

Вы нашли причину? Я вижу ту же проблему. – konung

ответ

2

я порылся и нашел решение:

UserSession.last_request_at_threshold = 10.minutes

Как я понимаю место, чтобы установить это - в UserSession. (Это может быть установлено в initalizer, а также, как authlogic.rb)

Причины Есть несколько обновлений является то, что он обновляет last_request_at КАЖДЫХ раз, когда вы какое-то чеки против CURRENT_USER. Например, если вы используете статус входа для какого-то рабочего потока - то есть для отображения элементов меню или частей страницы только для пользователей, которые вошли в систему.

Как только вы установите last_request_at на более высокий порог - вы избавитесь этих обновлений. Для меня это избавляет от примерно 10 операторов обновления - каждый из них занимает около 0,5 мс - не большой, но учитывая, что у меня есть 100 пользователей (внутреннее приложение) - все время это приложение, и мне не нужно отслеживать их последние запросы (они либо находятся в здании, либо нет), я могу ограничить это или даже прекратить отслеживать его вообще - в течение дня, это 10 тысяч тысяч дополнительных обновлений для db, которые мне не нужно делать - и облегчает чтение журналов.

UPDATE

Даже если вы установите только один второй - это будет еще помочь - потому что теперь он будет обновлять только один раз в каждом запросе (при условии, ваше приложение не имеет запросов, которые занимают больше времени, чем второй - если вы это сделаете, это может означать еще одну проблему) Даже если вы проверите против current_user несколько раз в том же запросе. Я сомневаюсь, что есть люди, которые могут выполнять несколько разных запросов за одну секунду.

Надеется, что это помогает

P.S .: Здесь д, который начал меня на правильном пути: AuthLogic perishable_token resets on every request

 Смежные вопросы

  • Нет связанных вопросов^_^