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
저의 포럼에서 30,000개와 10,000개의 답변이 있는 토픽에서 해당 문제를 재현할 수 없었습니다. 
4개의 좋아요
Lovgren
(Claes Lövgren)
3
불편하시지 않으시다면, 재현 설명의 2단계에서 북마크를 설정할 때 시간 알림을 설정해 보시고 어떤 변화가 있는지 확인해 주시겠습니까? 저에게는 이것이 마침내 재현 가능하게 해 주었습니다(제 경우에는 구체적으로 “월요일” 알림을 설정한 것이죠).
아래 이미지에서 볼 수 있듯이, 이 문제로 인해 북마크된 게시물 ID와 관련된 제 .json-request가 30초 동안 시도한 후 302를 반환하기 시작했습니다. (프로필 메뉴에서 북마크 링크를 클릭할 때 발생합니다.)
우연히도, 검색 쿼리도 유사한 동작을 보이기 시작했다는 것을 알게 되었습니다. 다만, 북마크된 게시물이 전혀 없는 서브포럼을 포함한 모든 서브포럼에서 아무것든 검색할 때 극도로 느려지는 것 외에는 다른 문제가 없었습니다.:
[Chromium 개발자 도구에서 느린 검색 쿼리를 보여주는 편집된 이미지 (임베드는 1개만 허용되었기 때문에)]
다른 경험에 비추어 보면, 제 생각에는 어떤 종류의 SQL N+1 문제처럼 보입니다. 하지만 저는 Discourse 코드나 Ruby 자체에 충분히 숙련되어 있지 않아서, 순환적인 json 모델이나 유사한 것이 동일한 방식으로 나타날 수 있는지 알 수 없습니다.
3개의 좋아요
martin 씨, 이 문제를 재현해 볼 수 있을까요?
2개의 좋아요
martin
(Martin Brennan)
5
버그를 보고해 주셔서 감사합니다. 이번 주에 재현해 보고 수정하겠습니다.
2개의 좋아요
martin
(Martin Brennan)
8
이 문제는 다음에서 수정되었습니다:
관련 주제 Bookmarking a Post on a Large Topic creates Absurd Loading Times 를 만든 @Macaw 님에게 cc
6개의 좋아요