거대한 sales_flat_quote 테이블을 처리하는 방법-버려진 카트 거부 제거


13

상태

magento 데이터베이스에는 3 개의 테이블이 너무 커지고 있습니다.

  1. sales_flat_quote_shipping_rate : 3045MB
  2. sales_flat_quote_address : 1688MB
  3. sales_flat_quote : 1897MB

6GB가 넘는 데이터입니다.

이 테이블을 자르는 방법대한 이 기사를 찾았습니다 . 이 기사는 세 번째 표에 대해서만 언급합니다.

잘림이 확실하지 않으며 60 일보다 오래된 모든 데이터를 삭제하는 것을 선호합니다. 이 기사에는 1,700 만 개의 레코드가 있습니다. 20 개가 있습니다! 올바른 경우, 이러한 레코드를 삭제해도 테이블이 잠기지 않으며 현재 테스트 설치에서 테스트하고 있습니다. 그것은 작동하는 것처럼 보이며 사이트와 너무 많이 충돌하지 않습니다.

질문

  • 다른 두 테이블에 대해 동일한 쿼리를 사용할 수 있는지 알고 싶습니다.
  • 이 테이블이 무엇인지 궁금합니다.

답변:


22
DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)

sales_flat_quote 관련 테이블은 외래 키 관계를 사용하여 캐스케이드를 삭제하므로 기본 테이블을 삭제하면 다른 테이블의 모든 관련 항목이 자동으로 삭제됩니다.

일단 크기가 줄어든 경우, 폐기 된 장바구니 복구 및 로그 보존을 위해 사용자 정의 된 보유와 함께 첫 번째 링크에서 수행 된대로 모든 따옴표를 포함하도록 만료 된 따옴표를 정리해야하는 옵저버 (여기서는 모듈 작성)를 쉽게 수정할 수 있습니다. 장바구니가 예기치 않게 비워 질 때 고객이 화 내지 않도록 합리적인 기간 동안 고객 견적을 작성하십시오. 변환되지 않은 견적 레코드가 Magento에서 제거 되었습니까?

Fabrizio Branca의 AOE 견적 클리너를 사용하십시오

sales_flat_quote * 테이블에는 장바구니 내용이 포함되어 있습니다. 이를 견적이라고하며 고객이 주문을 완료하기로 결정할 때까지 보류됩니다. 판매 주문으로 변환 된 완료된 견적의 경우 Magento는 자동으로 크론 작업을 통해 견적을 지 웁니다. 논리는 큰 따옴표를 포함하도록 확장되지 않았습니다.


다른 테이블의 크기가 줄어들어 계단식으로 작동한다는 것을 알았습니다. AOE 모듈을 테스트하겠습니다. 좋은 팁입니다!
SPRBRN

1
limit 100000060 일보다 오래된 모든 레코드가 사라질 때까지이 스크립트를 여러 번 실행했습니다 . 그런 다음 AOE Quote Cleaner 모듈을 설치했습니다. 웹 사이트가 적어도 테스트 시스템에서 작동을 멈 췄기 때문에 20m 삭제에 AOE 모듈을 사용하지 않았습니다. 스크립트에는 아무런 문제가 없었습니다.
SPRBRN

1
천만에요! Fabrizio의 모듈이 사용 가능해지기 전에 문제를 해결해야 했으므로 정리와 비슷한 일을 한 후에 관찰자 경로를 따라갔습니다. 총구를 청소하는 데 약 20 패스가 필요했습니다. 이제 정리가 완료되었으므로 걱정할 필요가 없습니다!
Fiasco Labs

고객이 존재하지 않는 일부 레코드를 삭제하고 싶습니다.
Lovely Setia

1

Magento2에서는 'sales_flat_quote'가 'quote'로 바뀌 었으므로 다음 SQL 명령으로 Magento2에 대한이 문제를 해결할 수 있습니다.

update quote set items_count = NULL

1
DELETE FROM quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
@fiasco

0

Fiasco Labs의 솔루션은 작동하지만 시작부터 바로 확장으로 시작하여 Mage_Sales_Model_Quote_Resource_Collection이전의 따옴표를 필터링하고 제거 하는 데 사용 합니다. 적절한 방법을 사용하면 데이터베이스 제약 조건이나 원시 쿼리에 의존하지 않고 모든 Magento 설치에서 작업이 작동하도록 할 수 있습니다.

(예상치 않은) 것과 같은 것…

$collection = Mage::getModel('sales/quote')->getCollection() 
    -->addFieldToSelect('entity_id') // this is important
    -->addFieldToFilter('created_at', array('lt' => 'some_date'));

foreach ($collection as $quote) {
    $quote->delete(); // safely delete selected quote
}

이를 확장 Mage_Log하거나 자체 독립형 확장을 만들 수 있습니다. 꽤 간단합니다.


AOE에 작동 가능한 모듈을 다운로드 할 준비가되었을 때 왜 내 모듈을 만들고 싶습니까?
SPRBRN

1
AOE 확장 기능은 훌륭하므로 전혀 신뢰할 수 없습니다. 그러나 이유를 제시하려면 1.확장 프로그램에서 수동 쿼리를 사용하지 마십시오. 2.가능하면 확장 프로그램을 독립적으로 만드십시오. DELETE이와 같은 쿼리는 데이터베이스 제약 조건에 따라 달라지며 나중에 변경 될 수 있습니다. 3.마 젠토 팩토리 방법을 적절히 사용하십시오.
musicliftsme

@musicliftsme. 이전에 만들어진 것 같습니다. 일반적으로 그들은 꽤 좋습니다
Erfan

0
DELETE FROM sales_flat_quote WHERE entity_id NOT IN (SELECT quote_id FROM sales_flat_order);

이 쿼리는 주문으로 변환되지 않은 모든 견적을 삭제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.