Adobe Commerce의 max_allowed_packet 관련 데이터베이스 오류

이 문서에서는 많은 수의 제품을 가져오거나 서버에서 기본값인 16MB보다 큰 max_allowed_packet에 설정된 것보다 큰 패킷을 처리하도록 하는 다른 작업을 수행할 때 발생할 수 있는 var/log/exception.log의 데이터베이스 연결 오류에 대한 해결 방법을 제공합니다.

영향을 받는 제품 및 버전

문제

MySQL 클라이언트 또는 mysqld 서버가 max_allowed_packet바이트보다 큰 패킷을 받으면 ER_NET_PACKET_TOO_LARGE 오류(exception.log에 표시됨)가 발생하고 연결이 닫힙니다. 일부 클라이언트의 경우 통신 패킷이 너무 큰 경우 쿼리 중에 MySQL 서버에 대한 연결이 끊김 오류가 발생할 수도 있습니다.

재현 단계

다양한 작업에서 이 문제를 발생시킬 수 있습니다. 여기에는 많은 수의 제품을 Adobe Commerce으로 가져오려고 시도하거나 너무 많은 데이터를 다시 보내는 트랜잭션 쿼리가 포함될 수 있습니다. 그 결과 var/log/exception.log에서 데이터베이스 연결 오류가 발생하고 제품을 제대로 가져오지 못하는 등의 다른 문제가 발생합니다.

원인

MySQL max_allowed_packets 설정의 기본값인 16MB가 필요에 맞게 충분히 크지 않습니다.

솔루션

  1. 개별 행이 현재 max_allowed_packet 제한을 초과하는 쿼리를 식별합니다. 이러한 쿼리는 반환되는 데이터의 양을 줄이기 위해 다시 작성해야 합니다. 이 작업은 SELECT 문에 더 적은 수의 열이 있거나 테이블 디자인의 일부로 다양한 열에 대해 더 작은 데이터 형식을 선택하여 수행할 수 있습니다. New Relic 계정이 있는 경우 New Relic APM 오류 페이지, New Relic APM 데이터베이스 페이지New Relic 로그를 사용하여 관련 쿼리를 검색하십시오.

  2. 빠른 수정을 위해 티켓을 제출할 때 max_allowed_packet 크기를 늘리도록 일시적으로 요청할 수 있지만, 값이 너무 크면 네트워크 정체가 발생하여 복제 오류가 발생할 수 있으므로 이는 고객 엔지니어링 팀의 판단에 따른 것입니다.

  3. 가장 좋은 방법은 일부 대용량 데이터베이스 테이블에 대해 CLI에서 다음 명령을 실행하는 것입니다.

    code language-none
    show table status like [table name to match]
    

    이러한 테이블에서 실행 중인 쿼리를 평가하여 권장 max_allowed_packet 크기인 16MB를 초과하는지 확인하십시오. 1단계에서 동일한 프로세스를 따라 이러한 쿼리에서 반환되는 데이터를 줄입니다.

관련 읽기

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a