meriksson
(Martin Eriksson)
1
Discourseフォーラムで長らく再発する問題があり、ついに原因を特定し、再現させることができました。
再現手順は以下の通りです:
-
数千件の返信があるトピックを用意する
-
そのトピック内の投稿をブックマークする
-
トピックを開く
すると、トピックの読み込みに非常に時間がかかるようになります。場合によってはタイムアウトし、代わりにNginxエラー(502 Bad Gateway)が表示されます。
当フォーラムでの概算読み込み時間は以下の通りです:
-
約1,000件の返信があるトピックの場合、ブックマーク作成後に数秒の追加読み込み時間がかかります。目立ちますが、大きな問題ではありません。
-
約4,000件の返信があるトピックの場合、読み込み時間は通常20〜30秒で、ページが正常に読み込まれずにタイムアウトすることがあります。
-
9,000件以上の返信があるトピックの場合、ほとんどの場合タイムアウトします。読み込まれる場合でも、30秒以上かかることがあります。
なお、これらのトピックはブックマークがない場合は問題なく読み込まれます。この問題は、特定のトピックにブックマークを持っているユーザーにのみ発生し、ブックマークを削除するとすぐに通常通り読み込まれるようになります。
「いいね!」 5
Canapin
(Coin-coin le Canapin)
2
私のフォーラムで、返信が30000件と10000件のトピックで、その問題は再現できませんでした。
「いいね!」 4
Lovgren
(Claes Lövgren)
3
ご不便をおかけしない範囲で、再現手順の2段階目でブックマークを設定する際にタイマー付きのリマインダーを設定し、何か変化があるか確認していただけますでしょうか?私の場合、それが再現の決め手となりました(具体的には「月曜日」のリマインダーを設定しました)。
これにより、ブックマークされた投稿IDに関連する.jsonリクエストが、30秒間試行した後、302を返すようになりました(下の画像参照)。これは、プロフィールメニューのブックマークリンクをクリックした際に発生します。
偶然にも、検索クエリも同様の挙動を示すことに気づきました。ただし、完全に遅延するのは、ブックマークされた投稿が一つもないサブフォームを含む、あらゆるサブフォームでの検索を行った場合に限られます。
[Chromiumの開発者ツールからの遅延した検索クエリの画像(埋め込みが1つだけ許可されていたため、一部を編集)]
他の経験から、これは何らかのSQL N+1問題のように思えますが、DiscourseのコードにもRuby自体にも十分に精通していないため、循環するJSONモデルや同様のものが同じように現れるかどうかはわかりません。
「いいね!」 3
martin
(Martin Brennan)
5
ご報告ありがとうございます。今週、再現を試みて修正いたします。
「いいね!」 2
martin
(Martin Brennan)
8
これは以下で修正済みです:
cc @Macaw(関連トピックを作成:https://meta.discourse.org/t/bookmarking-a-post-on-a-large-thread-creates-absurd-loading-times/168041)
「いいね!」 6