Macaw
10월 23, 2020, 5:01오전
1
특히 이 스레드는 오랫동안 제게 신경 쓰이는 부분이었습니다. 왜 로딩에 1~3분이나 걸리는지, 심지어 로딩이 되기는 하는지 궁금했습니다.
이 게시물에서 누군가가 이 문제를 재확인하는 것을 보고 나서, 직접 조사해 보기로 했습니다: 4,500개 게시글이 있는 스레드에서 모든 북마크를 제거했습니다.
그 결과, 다른 게시물처럼 즉시 로딩되었습니다.
그렇다면 이 문제를 테스트할 다른 방법은 없을까 스스로에게 질문해 보았습니다.
첫 번째 게시글이든 최신 게시글이든 북마크를 했는지 여부와 관계없이, 여전히 로딩에 시간이 걸렸습니다. 분 단위는 아니었지만 약 10초 정도 걸렸습니다.
게시글 수가 많은 스레드에서 이 현상은 더욱 심해졌습니다. 약 4,000개 게시글이라는 특정 임계점이 존재하여 로딩 시간이 이렇게 느려지는 것 같습니다.
4,000개 이상의 게시글이 있는 다른 스레드에서도 테스트해 보았습니다.
주제(Topic)에 있는 북마크가 많을수록 로딩에 걸리는 시간이 길어집니다.
제가 추측하기로는, 게시글이 많은 주제에서 북마크가 많을수록 로딩에 걸리는 시간이 길어지는 것 같습니다.
재현 방법: 게시글이 아주 많은 주제를 열고 하나를 북마크하세요. 언급된 스레드에서 게시글을 북마크하려면 로그인해야 한다는 점이 안타깝습니다. 또한 이 웹사이트에서 답변이 가장 많은 스레드도 925개에 불과합니다.
추가로 제공해야 할 정보가 있다면 말씀해 주십시오.
4개의 좋아요
@martin 다른 토픽에서 전에 이 문제를 보고한 적이 거의 확실합니다.
2개의 좋아요
martin
(Martin Brennan)
10월 25, 2020, 11:17오후
3
2개의 좋아요
이것은 안정판에 존재한다면 백포트해야 할 정도로 심각한 문제입니다.
3개의 좋아요
martin
(Martin Brennan)
10월 26, 2020, 1:22오전
5
Roblox 포럼에 계정을 만들어 What are you working on currently? (2020) - #5043 by FLYSLENDY04 - Creations Feedback - Developer Forum | Roblox 를 확인했고, 해당 위치에서 문제를 재현할 수 있습니다. 북마크가 없을 때 주제는 약 1.3초에 로드되지만, 북마크가 있을 때는 약 8초가 걸립니다. 심지어 502 bad gateway 오류까지 발생했습니다:
하지만 로컬에서 5,000개의 게시글이 있는 주제를 만들고 북마크를 추가해 본 결과, 주제에 북마크가 있든 없든 로드 시간은 동일했습니다 . 계속 찾아봐야 할 것 같습니다… 사용자의 주제 내 북마크를 로드하는 코드는 여기에 있습니다:
각 게시글의 북마크를 찾는 코드는 여기에 있습니다:
제 생각에는 이 코드가 비정상적이거나 성능에 큰 부담을 주는 것처럼 보이지 않습니다. user_post_bookmarks는 메모이제이션(memoized)되어 있어 데이터베이스를 단 한 번만 쿼리하므로, 여기서 N1 문제가 발생하지 않습니다. 또한 주제 레벨에서 북마크가 있는지 확인하는 주제 뷰(topic view) 코드도 여기에 있습니다:
여기서도 의심스러운 점은 아무것도 없습니다…
2개의 좋아요
martin
(Martin Brennan)
10월 26, 2020, 1:37오전
7
그렇지 않다고 생각 합니다. Roblox 포럼은 Version bump to v2.6.0.beta3 · discourse/discourse@2a268bd · GitHub 버전입니다. 그 이후로 제가 만든 두 개의 북마크 관련 커밋만 있었고, 그 둘 다 토픽 북마크 로딩이나 직렬화와는 아무 관련이 없습니다.
committed 06:23AM - 22 Oct 20 UTC
This PR introduces a feature that will detect a date inside the post that a user… is bookmarking, and offer that date as an option in the bookmark modal.
The logic is that we get the first date/time detected in the post. If it does not have a time, just a date, then we default to 8:00am for the time.
committed 11:38PM - 13 Oct 20 UTC
When posts or topics are deleted we don't want to immediately delete associated … bookmarks, so we have a grace period to recover them and their reminders if the post or topic is un-deleted. This PR adds a task to the Weekly scheduled job to go and delete bookmarks attached to posts or topics deleted > 3 days ago.
아마 다른 어떤 우연한 일이 겹친 게 아닐까요?
1개의 좋아요
sam
(Sam Saffron)
10월 26, 2020, 2:25오전
8
BBS에서 이 문제를 재현할 수 있습니다.
플래너를 혼란스럽게 만드는 쿼리에 뭔가 문제가 있는 것 같습니다. 실행 계획을 확인하고 조금 조정해 보세요.
제 추측으로는 아주 아주 작은 변경만으로도 실행 시간이 거의 4초에서 1밀리초로 줄어들 것입니다.
여러 독자들에게 드리는 말씀으로, 미니 프로파일러(Mini Profiler)를 활성화하는 것이 여기서 핵심입니다. 문제 있는 쿼리를 찾는 데 도움이 될 수 있습니다.
5개의 좋아요
martin
(Martin Brennan)
10월 26, 2020, 2:52오전
9
@sam님의 조언 덕분에 이 문제가 이 줄에서 실행되는 부실한 쿼리 플랜 때문이라는 것을 알게 되었습니다:
topic.posts.with_deleted.where(post_number: 1).first
생성된 SQL에는 LIMIT 1이 포함되어 있어 index_posts_on_topic_id_and_post_number 인덱스가 전혀 사용되지 않으며, 이로 인해 상당한 지연이 발생합니다. 로컬 데이터베이스에 게시글이 거의 없어 로컬에서는 이를 재현할 수 없습니다. 기본적으로 Discourse 포럼 전체의 게시글 수가 많을수록 이 문제는 더 악화됩니다. 곧 수정 사항을 제공하겠습니다.
3개의 좋아요
sam
(Sam Saffron)
10월 26, 2020, 3:39오전
10
다음 이슈와 중복으로 이 이슈를 닫습니다:
We have had a recurring problem on our Discourse forum for a while and we finally managed to narrow it down and reliably recreate it.
Here are the steps to recreate:
Have a topic with thousands of replies
Bookmark a post in that topic
Open the topic
The topic now takes a long time to load. In some cases it times out and we get an Ngnix error instead (502 Bad Gateway).
Here are some approximate loading times from our forum:
For a topic with about 1,000 replies, the extra loading …
@martin 문제 해결 후 원본 주제에 게시해 주세요.
4개의 좋아요