Heroku で時折リクエストのタイムアウトが発生することがあります。残念ながら、一貫して再現できないため、デバッグが非常に困難です。リクエストごとの膨大な数のデータベース クエリを削減したり、キャッシングを追加したりするなど、パフォーマンスを改善する機会はたくさんありますが、プロファイリングを行わない場合、それは暗闇の中でのショットです。
New Relic の分析によると、多くのリクエストはサーバー上で 1 ~ 5 秒かかります。遅すぎることはわかっていますが、タイムアウトに必要な 30 秒にはほど遠いものです。
New Relic のエラー タブには、タイムアウトが発生したいくつかの異なるデータベース クエリが表示されますが、これらは特に遅いクエリではなく、クラッシュごとに異なるクエリである可能性があります。また、同じ URL に対して、データベース クエリが表示される場合と表示されない場合があります。
これらの特定のケースで何が起こっているかを知るにはどうすればよいですか? たとえば、エラーが発生していないときにデータベースで費やした時間とは対照的に、タイムアウトが発生したときにデータベースで費やしていた時間をどのように確認できますか?
私が持っている 1 つの仮説は、データベースがロックされる場合があるというものです。おそらく読み書きの組み合わせ。