Выполнение большого запроса ActiveRecord с большим количеством периферийных объектов.
Добавление «.includes» (предварительная загрузка) значительно ускоряет его, сжимая все N+1.
Затем страница отображается быстро и выдает это в журналы:
Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms)
Однако затем проходит * 90 СЕКУНД *, пока страница не будет фактически отправлена в браузер (или curl; мы тестировали оба варианта).
В течение этого времени процесс ruby имеет процессор, привязанный к 100%.
Если мы удалим «.includes» (предварительную загрузку), он вернется к нормальной дрянной производительности без полутораминутной пропасти между рендерингом страницы и доставкой браузера.
WTF вызывает ли предварительная загрузка такой эффект!?
Один коллега выдвинул гипотезу о проблеме со сборкой мусора; как я могу проверить эту теорию?
Рельсы 3.2.12
Ruby 1.9.3 (проверено p286 и p327)