인덱스 없이 수행된 조인을 찾는 방법은 무엇입니까?

인덱스 없이 수행된 조인을 찾는 방법은 무엇입니까?

Mariadb 10.6에서 WordPress 웹사이트를 운영하고 있는데 최근 Mysqltuner에서 Joins done with indexes 오류가 발생하는 것을 확인했습니다.

숫자가 그리 크지는 않지만 Mysqltuner에서는 Key_buffer_size를 계속 늘려가는 것을 권장합니다.

하지만 제 VPS에는 여유 메모리가 많지 않아서 다른 문제로 이 오류를 해결하고 있습니다.

현재 활성화된 플러그인이 수십 개 정도 있는데 어떤 멋진 플러그인이 문제를 일으키는지 확인하고 싶습니다.

그래서 우선 다음과 같이 오류 로그를 활성화했습니다.

log-queries-not-using-indexes = 1
log_error = /var/log/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 3

그리고 일정 시간이 지난 후 pt-query-digest를 실행하여 오류 로그를 분석했습니다.

pt-query-digest /var/log/mysql/mysql-slow.log

하지만 다른 문제는 알 수 없습니다.

느린 로그에 있는 수많은 쿼리 중에서 인덱스 없이 컬럼에 조인하려는 쿼리가 무엇인지 어떻게 알 수 있습니까?

데이터베이스를 모르기 때문에 쿼리만 보면 알 수 없습니다.

답변1

인덱스 없이 수행된 조인만 FIND하려면,

MySQL 명령 프롬프트에서 느린 쿼리 로그에 JPWI만 기록하고 1시간 후에 정상으로 돌아갈 수 있도록 현재 값을 결정합니다.

SELECT @@long_query_time;
SELECT @@min_examined_row_limit;
      write down the above values
  
SET GLOBAL long_query_time=3600;  for a ONE MINUTE slow log trigger
SET GLOBAL min_examined_row_limit=1;   if the query reads one row, consider logging
SET GLOBAL log_queries_not_using_indexes=1;  to get the log you are needing

한 시간 안에,

SET GLOBAL long_query_time=discovered above;
SET GLOBAL min_examined_row_limit=discovered above; 
SET GLOBAL log_queries_not_using_indexes=0;   # to turn OFF feature

FLUSH LOGS;

인덱스가 없는 쿼리에 대한 느린 쿼리 로그의 마지막 시간을 검토하세요.

연락처 정보는 프로필을 확인하시고, 추가 조언이 필요하시면 연락주세요.

대부분의 사람들은 스파게티가 분리되는 것을 피하기 위해 느린 쿼리와 인덱스가 없는 쿼리를 기록하지 않습니다. 어떤 형태로든 정신을 유지하기 위해서만 하나 또는 다른 것을 얻으십시오.

(고정 형식, 편집에는 6자가 필요함)

답변2

MyISAM 테이블이 있나요? 그렇지 않은 경우 (및 테이블~해야 한다InnoDB가 됨),낮추다 key_buffer_size30M까지.

"인덱스 없이 조인"이 반드시 문제가 되는 것은 아닙니다. 당신이 가지고 있다면느린쿼리, 그게 더 중요해요. 참조느린 로그. 즉, 개선을 위해 노력한다.가장 느린, "인덱스 없는 조인"인지 여부. 사용 pt-query-digest하거나mysqldumpslow -s t

WordPress 성능을 위해 다음 플러그인을 추가하세요. WP 지수 개선

관련 정보