데이터베이스의 변경 사항은 상점 앞에 반영되지 않습니다
이 문서에서는 엔티티 업데이트가 적용되지 않도록 지연 또는 중단을 방지하는 솔루션을 제공합니다. 여기에는 변경 로그 테이블의 크기가 너무 커지지 않도록 하는 방법과 MySQL 테이블 트리거를 설정하는 방법이 포함됩니다.
영향을 받는 제품 및 버전:
- 클라우드 인프라의 Adobe Commerce 2.2.x, 2.3.x
- Adobe Commerce 온-프레미스 2.2.x, 2.3.x
문제
데이터베이스에서 변경한 사항이 상점 앞에 반영되지 않거나 엔티티 업데이트 적용이 크게 지연됩니다. 영향을 받을 수 있는 개체에는 제품, 범주, 가격, 재고, 카탈로그 규칙, 판매 규칙 및 대상 규칙이 포함됩니다.
원인
인덱서가 일정별로 업데이트되도록 구성되어 있는 경우 변경 로그가 너무 크거나 MySQL 트리거가 설정되지 않은 하나 이상의 테이블로 인해 문제가 발생할 수 있습니다.
크기가 큰 변경 로그 테이블
indexer_update_all_views
cron 작업이 여러 번 완료되지 않으면 변경 로그 테이블이 커집니다.
변경 로그 테이블은 엔티티에 대한 변경 사항이 추적되는 데이터베이스 테이블입니다. 변경 내용이 적용되지 않는 한 변경 로그 테이블에 레코드가 저장됩니다. indexer_update_all_views
cron 작업에서 이 작업을 수행합니다. Adobe Commerce 데이터베이스에 변경 로그 테이블이 여러 개 있습니다. 이 테이블은 다음 패턴에 따라 이름이 지정됩니다. INDEXER_TABLE_NAME + '_cl'(예: catalog_category_product_cl
, catalog_product_category_cl
). 데이터베이스에서 변경 내용을 추적하는 방법에 대한 자세한 내용은 개발자 설명서의 색인화 개요 > Mview 문서에서 확인할 수 있습니다.
MySQL 데이터베이스 트리거가 설정되지 않았습니다.
엔티티(제품, 카테고리, 대상 규칙 등)를 추가하거나 변경한 후 해당 변경 로그 테이블에 레코드가 추가되지 않는 경우 데이터베이스 트리거가 설정되지 않은 것으로 의심됩니다.
솔루션
변경 로그 테이블의 크기가 너무 커지지 않도록 합니다.
indexer_update_all_views
cron 작업이 항상 성공적으로 완료되었는지 확인하십시오.
다음 SQL 쿼리를 사용하여 indexer_update_all_views
cron 작업의 실패한 모든 인스턴스를 가져올 수 있습니다.
select * from cron_schedule where job_code = "indexer_update_all_views" and status
<> "success" and status <> "pending";
또는 indexer_update_all_views
항목을 검색하여 로그에서 해당 상태를 확인할 수 있습니다.
<install_directory>/var/log/cron.log
- 버전 2.3.1+ 및 2.2.8+의 경우<install_directory>/var/log/system.log
- 이전 버전용
MySQL 테이블 트리거 다시 설정
누락된 MySQL 테이블 트리거를 설정하려면 인덱서 모드를 다시 설정해야 합니다.
- '저장 시'로 전환합니다.
- '일정에 따라'로 다시 전환합니다.
다음 명령을 사용하여 이 작업을 수행합니다.
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
관련 읽기
- 지원 기술 자료에서 MySQL 테이블이 너무 큽니다.
- 개발자 설명서에서 인덱싱: Mview
- Commerce 구현 플레이북의 데이터베이스 테이블 수정 우수 사례