댓글 검색 느려짐

Extra Form
PHP PHP 7.3
CMS Rhymix 2.x

라이믹스 2.0.7 업데이트 이후 관리자페이지에서 댓글 모듈을 누르면 엄청 느려졌습니다

 

댓글이 400만개 정도 있다보니 원래도 느렸지만 1~3초면 뜨는 수준이었던게 15초~25초로 확 늘어나버렸습니다

 

서버 설정이나 따로 건든건 없고 단지 업데이트 이후 저렇게 된거면 어디 로그를 봐야할까요

  • profile
    400만개정도면 많이 걸리긴하겠네요..

    2.0.7로 업데이트 이후 문제가 발생되엇다고 말씀하셧는데

    문제발생직전 마지막으로 본 버전이 몇버전에서 바로 넘어가신건지 알 수 있을까요?
  • profile ?
    1.9.9.8에서 2.0.7로 바로 업데이트했습니다
  • ? profile

    2.0 버전에서 여러가지 검색쿼리를 위한 부분이랑 쿼리쪽으로 대폭 변경된 점이 있습니다.

    해당 부분의 영향이 아닐까 싶은데요.. 혹시 업데이트 이후 사용자 대비 cpu점유율이 비정상적이거나 이런 부분 확인해보셨나요?

     

    그 부분과 함께 해당 페이지에서 어떤쿼리가 늦어지는지 확인해보세요. (디버깅 모드를 키신다음 느린쿼리 모드 키시고 느린쿼리 0.25 초 설정하시면 느린쿼리가 출력됩니다.

     

  • profile ?

    음.. 다른 부분의 문제는 찾지 못한 것 같습니다.
    글 작성, 댓글 작성, 글 읽기 등 에서는 업데이트 이전보다 느려짐이나 기타 특이사항은 없는 것 같습니다.
    댓글 검색 부분만 유독 그러네요...

  • ? profile

    댓글 검색이 느린건가요? 아니면 처음 댓글 목록에 접속하기만 해도 느린건가요?

     

    그리고 느린쿼리 부분에 디버깅은 한번 확인해주세요.

  • profile ?

    댓글 처음 불러올때랑 검색 모두 거의 비슷한 시간이 걸리는 것 같습니다.

     

    Slow Queries
    ============
    01. SELECT `comments`.*, `documents`.`module_srl` AS `module_srl`, `documents`.`member_srl` AS `document_member_srl`, `documents`.`user_id` AS `document_user_id`, `documents`.`user_name` AS `document_user_name`, `documents`.`nick_name` AS `document_nick_name`, `documents`.`title` AS `document_title` FROM `xe_comments` AS `comments`, `xe_documents` AS `documents` WHERE `documents`.`document_srl` = `comments`.`document_srl` ORDER BY `comments`.`list_order` ASC LIMIT 30
    - Caller: line 0 ()
    - Connection: master
    - Query ID: comment.getTotalCommentList
    - Query Time: 25.4421 sec
    - Result: success

  • ? profile
    혹시
    Query ID: comment.getTotalCommentList

    아래나 위쪽에

    Query ID: comment.getTotalCommentList (count) 로 찍힌 친구도 있을꺼예요
    그 친구는 쿼리타임이 얼마 안걸려있나요?
  • profile ?

    쿼리 시간 설정을 너무 길게잡아서 같이 안나온거 같습니다. 다시 올려드립니다.

     

    Slow Queries
    ============
    01. SELECT COUNT(*) AS `count` FROM `xe_comments` AS `comments`, `xe_documents` AS `documents` WHERE `documents`.`document_srl` = `comments`.`document_srl`
    - Caller: line 0 ()
    - Connection: master
    - Query ID: comment.getTotalCommentList (count)
    - Query Time: 1.6274 sec
    - Result: success
    02. SELECT `comments`.*, `documents`.`module_srl` AS `module_srl`, `documents`.`member_srl` AS `document_member_srl`, `documents`.`user_id` AS `document_user_id`, `documents`.`user_name` AS `document_user_name`, `documents`.`nick_name` AS `document_nick_name`, `documents`.`title` AS `document_title` FROM `xe_comments` AS `comments`, `xe_documents` AS `documents` WHERE `documents`.`document_srl` = `comments`.`document_srl` ORDER BY `comments`.`list_order` ASC LIMIT 30
    - Caller: line 0 ()
    - Connection: master
    - Query ID: comment.getTotalCommentList
    - Query Time: 25.3952 sec
    - Result: success

  • profile

    DB에서

        ANALYZE TABLE xe_comments;

        ANALYZE TABLE xe_documents;

    한번씩 해보세요.

     

    댓글 3000만개가 넘는 사이트에서도 댓글갯수 카운트나 특정단어 검색이 오래 걸릴 수는 있을지언정

    시간순으로 30개 리스트 가져오는 쿼리는 0.001초밖에 안 걸립니다.

  • profile ?

    남겨주신 명령어는 0.001초만에 뜨는거 같네요..
    xe_comment를 DB에서 접속할 경우 2~3초 정도 걸립니다

  • ? profile
    계속 두리뭉실하게 말씀하셔서 뭐가 느리다는 건지 못 알아듣겠습니다.
    xe_comment를 DB에서 접속한다는 것이 무슨 의미인가요?

    위에서 알려드린 쿼리는 순식간에 끝나는 것이 정상이고,
    그 속도를 측정해보라고 말씀드린 것이 아닙니다.
  • profile ?

    SELECT * FROM `xe_comments` WHERE 1 를 해서 테이블을 열었을 때 시간이 2~3초 걸린다는 얘기였고, ANALYZE TABLE xe_comments; 명령어 쳐보라고해서 그 부분에 대한 피드백을 드린 것인데 너무 공격적이신 것 같습니다.

     

    평소 존경하는 분이고 서버 의뢰도 맡긴 적이 있는데 대화 수준이 맞지않았다면 죄송합니다.

     

    개발자가 아니다보니 초보 입장에서 설명이 미흡했다면 사과드립니다. 그냥 문제점을 찾고 싶은거였는데 알아서 공부하고 혼자 문제해결하고 덮어야하나 커뮤니티 의미에 대해서 생각해보게 되네요. 상대가 어리숙할 순 있어도 서로 존중하는 마음이었으면 합니다. 저로 인해 불편함을 느끼신 것 같아 다시 사과드립니다.

  • ? profile
    ANALYZE TABLE xe_comments;
    ANALYZE TABLE xe_documents;
    해당 명령어를 입력한 뒤 다시 한번 댓글 목록 페이지에 접속햇을 때 어떤지 확인해보셨나요?

    해당 명령어는 분석하는 명령어라 원래 순식간에 끝나는데 해당 명령어 뒤에 속도와함께 같이 뜨는 메세지가 없었는지요?
    음 보통 명령어를 치면 거기에 딸려오는 피드백의 내용을 스샷이나 댓글로 남겨주시면 확실히 답변을 드리기가 편해지는데 그런 정보 없이 또 다른 이야기가 나와서 답변드리기에도 애매한 경향이 많아요.

    저희가 요구한 정보가 부족한 점도 있겠지만 해결하는 과정에서 두리뭉실한 표현보다는 이런 명령어를 쳤을때 이렇게 나오는것과 함께 이렇게 작업이 되었고 그 뒤 다른건 이렇게 되더라. 라는 좀 정확한 표현을 해주시면 더 좋았을 것 같아요!
  • profile ?

    01. SELECT COUNT(*) AS `count` FROM `xe_comments` AS `comments`
        - Caller:      modules/comment/comment.model.php line 915 (commentModel::getTotalCommentList)
        - Connection:  master
        - Query ID:    comment.getTotalCommentList (count)
        - Query Time:  0.9884 sec
        - Result:      success
    0.2. SELECT * FROM `xe_comments` AS `comments` ORDER BY `comments`.`list_order` ASC LIMIT 30
        - Caller:      modules/comment/comment.model.php line 915 (commentModel::getTotalCommentList)
        - Connection:  master
        - Query ID:    comment.getTotalCommentList
        - Query Time:  0.0006 sec
        - Result:      success
     

    기진곰님 알려주신 명령어는 status OK 로만 뜨고,

    에러나 기타 뜨는 메세지가 없어서 혹시나 도움될까 싶어 설명없이 추가 내용만 말씀드린 게 오해의 소지가 되었나봅니다.
    람보님이 남겨주신 디버그 힌트로 저는 문제 해결했습니다!
    코어쪽 쿼리 문제는 맞는 것 같습니다.

     

    어떤 부분 수정했다고 내용 공유하기에는 자칫 제가 놓쳤을 수 있는 잘못된 코드로 라이믹스 개발진분들께 혼동을 드릴 것 같아 결과 피드백만 전달드립니다.

  • ? profile

    개발자인지 초보자인지는 상관없습니다. 커뮤니티에는 다양한 사람들이 존재하니까요.

    그러나 구체적으로 A에서 B라는 명령을 실행했을 때 C라는 결과가 나왔고 D초의 시간이 걸렸다... 라는 정도는 누구나 조금만 신경을 쓰면 조리있게 설명할 수 있을 거라고 생각합니다. 바로 위의 댓글에서도 잘 해주셨고요. 어려운 표현을 사용하실 필요도 없고, 개발자들이 쓸 법한 용어를 따라 쓰려고 노력하실 필요는 더더욱 없습니다. 기술적인 용어를 어설프게 조합하면 오히려 더 난해하게 되어버릴 수 있으니, 그냥 있는 그대로의 증상과 결과를 육하원칙에 맞게 써주시면 개발자든 아니든 누구라도 쉽게 이해할 수 있을 것입니다.^^

    ...라는 내용을 전해드리고 싶었던 건데 댓글을 너무 짧게 써서 뉘앙스가 잘못 전달된 것 같습니다. 죄송합니다.