Ruby on Rails: почему запрос первой активной записи занимает больше времени? - PullRequest
1 голос
/ 27 июля 2011

Если после некоторого промежутка времени я выполняю запрос активной записи, это занимает больше времени.

Скажем, Item.all занимает 0,11 сек при первом запросе и 0,003 позже.что может быть причиной такого поведения?

отредактировано: область действия кэша запроса активной записи - это действие контроллера.В моем случае запрос активной записи в последующем http-запросе также выполняется быстрее.

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Возможные объяснения:

  1. Кэширование ActiveRecord
  2. Пул соединений (не требуется перезапускать соединение)
  3. Загрузка на веб-сервере или сервере БД.
1 голос
/ 27 июля 2011

ActiveRecord кэширует результаты запросов. Первый запрос фактически попадает в базу данных - затем ActiveRecord ожидает завершения операции и анализирует результаты в ее объектах. В следующий раз, когда будет сделан идентичный запрос, результаты будут кэшированы, поэтому они будут возвращены вам немедленно, а не возвращаться обратно в базу данных.

Проверьте API для QueryCache : похоже, вы можете очистить кеш запросов (connection.clear_query_cache), если хотите стереть кэшированные запросы.

Этот вопрос SO также предлагает self.class.uncached do ... end обойти кеш, но я не уверен, применимо ли это в Rails 3.

0 голосов
/ 27 июля 2011

Это определенно кеширование ActiveRecord, на которое вы смотрите. См. Документ .

Все методы построены на простом принципе кэширования, который будет сохранять результат последнего запроса, если не указано иное.Кеш даже распределяется между методами, что делает использование методов с добавлением макросов еще более дешевым, не беспокоясь о производительности с первого взгляда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...