ここ数日、Rails プロジェクトで redis/ohm を使用すると一部の動作が遅すぎるように見える理由を理解しようと頭を悩ませています。
その要点は、ohm/redis への一部のリクエストには約 100 ~ 200 ミリ秒かかるということです。
実行しているコマンドは次のようになります。
Stats::TermStats.find(term_slug: 'term_slug', user_id: 123).to_a
極端に複雑なことやクレイジーなことはしていないように思えます。これまでのところ、この 1 つのコマンドのプロファイリング ( miniprofilerを使用) により、次のことが明らかになりました。
- これらの呼び出しの一部は、約 2 ~ 4 ミリ秒以内に完了します (これは問題ありませんか?)
- ただし、100〜200ミリ秒かかるものもあります(これは間違いなく気分が悪いです)
- redis-client で使用
slowlog get
しても、redis で特に遅いことはありません。ほとんどの redis コマンドは 20マイクロ秒(0.02 ミリ秒)未満で完了します - Rails コンソールを使用し、ループ内でまったく同じ slug/id を使用して簡単なベンチマークを実行すると、同じ動作が観察されます。つまり、これらの (同じ) リクエストのいくつかは、他のほとんどのリクエストよりもかなり時間がかかるようです。
私たちの redis 設定は、基本的に微調整なしで、すぐに使えるものです。テスト中、サーバーは他に多くのことをしていません。
パフォーマンスを改善する方法や、redis と ohm/rails の間で速度が大幅に低下する原因をテストする方法について何か提案はありますか??