KBoard 6.8 업데이트 후 protectSearchPosts() SQL 지연 및 BNL JOIN 발생 문의

1. 정확한 제품 또는 플러그인 이름

KBoard 6.8

 

2. 상세 내용

안녕하세요.

최근 KBoard 게시판/댓글 업데이트 이후 WordPress 사이트 속도가 불규칙하게 느려지고 MariaDB CPU 사용률이 크게 상승하는 문제가 발생해 확인한 내용을 공유드립니다.

환경:

  • CentOS 7 + CWP

  • MariaDB 10.6.19

  • PHP-FPM 8.3

  • WordPress

  • KBoard 게시판 6.8 / 댓글 5.7

문제는 아래 파일의 protectSearchPosts()에서 실행되는 SQL로 확인되었습니다.

wp-content/plugins/kboard/class/KBRouter.class.php

기존 JOIN 조건:

LEFT JOIN wp_kboard_board_content c
ON p.post_name = CAST(c.uid AS CHAR)

slow query log에서는 해당 SELECT가 약 1~1.5초씩 소요됐고, 전체 SQL을 ANALYZE FORMAT=JSON으로 확인했을 때 wp_kboard_board_content 쪽에 BNL JOIN이 발생했습니다.

기존 측정:

r_total_time_ms: 약 1509ms
join_type: BNL

테스트로 JOIN을 아래와 같이 변경했습니다.

LEFT JOIN wp_kboard_board_content c
ON c.uid = CAST(p.post_name AS UNSIGNED)
AND p.post_name = CAST(c.uid AS CHAR)

변경 후:

r_total_time_ms: 약 32ms
access_type: eq_ref
key: PRIMARY
BNL JOIN 없음

결과 동등성도 확인했습니다.

lost_original_matches: 0

old_minus_new: 0
new_minus_old: 0

현재 운영 환경에서 KBRouter.class.php의 JOIN 부분만 위와 같이 변경한 뒤 확인한 결과,

  • MariaDB CPU 사용률 감소

  • 게시글 등록 속도 정상화

  • 사이트 전반 응답 속도 개선

  • KBoard 게시글 등록/조회 정상

상태입니다.

같은 KBoard를 사용하는 다른 사이트에서는 게시글 수가 적어 증상이 거의 없었고, 게시글 및 KBoard 복제글이 많이 누적된 사이트에서 문제가 크게 나타났습니다.

권한 강화 기능 자체를 제거하는 방식보다는 해당 JOIN 구조를 한번 검토해주시면 좋을 것 같습니다.

제가 적용한 수정안이 모든 환경에서 안전하다고 단정할 수는 없으므로, 개발팀에서 검토 후 공식 업데이트에 반영 가능한지 확인 부탁드립니다.

감사합니다.

 

3. 확인 가능한 상세 페이지 주소

 

 

4. 수정한 코드 내역 (있다면)

수정 파일:

/wp-content/plugins/kboard/class/KBRouter.class.php

기존 코드:

LEFT JOIN `{$wpdb->prefix}kboard_board_content` c ON p.post_name=CAST(c.uid AS CHAR)

수정 코드:

LEFT JOIN `{$wpdb->prefix}kboard_board_content` c ON c.uid=CAST(p.post_name AS UNSIGNED) AND p.post_name=CAST(c.uid AS CHAR)

기존 문자열 비교 조건은 그대로 유지하면서, c.uid의 PRIMARY KEY를 이용할 수 있도록 숫자 UID 조건을 추가했습니다.

수정 전 전체 SQL을 ANALYZE FORMAT=JSON으로 측정했을 때 약 1509ms가 소요되었으며 BNL JOIN이 발생했습니다.

수정 조건으로 동일 SQL을 측정한 결과 약 32ms로 감소했고, wp_kboard_board_content 접근 방식이 eq_ref / PRIMARY로 변경되면서 BNL JOIN이 사라졌습니다.

또한 기존 SQL과 수정 SQL의 결과 차이를 확인한 결과:

lost_original_matches: 0
old_minus_new: 0
new_minus_old: 0

으로 확인되었습니다.

실제 운영 파일에는 위 JOIN 한 부분만 수정했으며, PHP 8.3 CLI에서 문법 검사를 통과한 뒤 PHP-FPM 8.3을 reload하여 적용했습니다.

적용 후 현재까지 확인한 결과는 다음과 같습니다.

  • MariaDB CPU 사용률 감소

  • 게시글 등록 속도 정상화

  • 사이트 전반 응답 속도 개선

  • KBoard 게시글 등록 및 조회 정상

현재까지 기능상 이상은 확인되지 않았습니다.

 

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요