2013-12-18 38 views
6

Trang web của tôi đang gặp sự cố khi thanh toán. Tôi đang sử dụng Magento Enterprise 1.8 và mô-đun thanh toán của tôi là Onestepcheckout của Idev.Magento 1.8: Khóa các sự cố chờ thời gian chờ khi khách hàng đang kiểm tra

Vấn đề chúng tôi đang thấy là bảng eav_entity_store mất nhiều thời gian (dài tới 51 giây) để trả lại số đơn đặt hàng cho Mage_Eav_Model_Entity_Type.

Điều tôi biết là truy vấn chạy để có được điều này là một giao dịch chạy dưới dạng 'FOR UPDATE' để hàng bị truy cập bị khóa cho đến khi giao dịch kết thúc. Tôi đã xem xét các phần khác của mã cũng như mã PHP trong suốt giao dịch mà hàng bị khóa (chúng tôi đang sử dụng InnoDB để khóa phải được giải phóng sau khi giao dịch được thực hiện) và tôi không thấy bất cứ điều gì có (hoặc trong các bản ghi truy vấn chậm) sẽ gây ra sự chờ đợi khóa bất cứ nơi nào gần 51 giây.

Tôi đã xem xét rằng các yêu cầu có thể được xếp chồng lên nhau và từ từ leo lên đúng lúc khi chúng đợi, nhưng tôi thấy thời gian truy vấn chuyển từ 6ms đến 20k ms thành 50k ms 1,2,3. Nó không phải là một vấn đề của 100-200 yêu cầu xếp chồng lên nhau, vì chỉ có một vài chục trong số này một ngày.

Tôi biết rằng MySql sử dụng khóa cha, nhưng không có FK nào liên quan đến bảng này. Có hai chỉ số BTREE tại một thời điểm là FK nhưng đã bị thay đổi (đã xảy ra nhiều năm trước). Đối với những người không có Magento savy, bảng eav_entity_store có ít hơn 50 hàng và chỉ có 5 cột rộng (4 smallint và một varchar). Tôi nghiêm túc nghi ngờ việc lập chỉ mục hoặc lập chỉ mục không đúng là thủ phạm. Tuy nhiên, theo tinh thần của TLDR, tôi sẽ nói rằng hai chỉ số BTREE là hai cột mà chúng ta chọn từ bảng này. Một trong những khả năng là tôi có thể cần phải thay thế hai chỉ mục bằng một chỉ số hợp chất, như chỉ đọc cho bảng này đến từ một truy vấn đọc (TỪ [Cột với chỉ mục A] VÀ [Cột có chỉ số B]). Tôi chỉ đơn giản là không biết nếu khóa cấp hàng sẽ ngăn chặn truy vấn này truy cập vào một hàng khác trong bảng với các chỉ mục hiện tại trên bảng.

Tại thời điểm này, tôi đã bị thuyết phục rằng vấn đề cơ bản là liên quan chặt chẽ đến DB, nhưng bất kỳ lời khuyên nào về Magento hoặc MySql về vấn đề này sẽ được đánh giá cao. Bất cứ ai vẫn thực sự đọc điều này hy vọng có thể đánh giá cao rằng tôi đã kiệt sức một số tùy chọn đã và đang nghiêm túc stumped ở đây. Bất kỳ thông tin nào mà bạn nghĩ có thể giúp được chào đón. Cảm ơn.

Sửa Các lỗi chính xác chúng ta đang thấy là: Thông điệp Lỗi: SQLSTATE [HY000]: Lỗi chung: 1205 Khóa thời gian chờ đợi vượt quá; hãy thử khởi động lại giao dịch

+0

Bạn có thể sao chép khi bạn chạy truy vấn chậm theo cách thủ công không? Trong trường hợp đó, bạn có thể cấu hình nó. –

+0

Thật không may là tôi đã không thể tái tạo. DB lưu trữ được thực hiện từ xa. Tôi đã chờ đợi để nghe lại từ DBA ở đó để xem họ có thể cung cấp loại thông tin gì. Tôi sẽ cập nhật ở đây một khi họ làm. –

+0

cùng một vấn đề trên Magento 1.8 ... có lẽ nó là một vấn đề về phía UPS và không Magento? – WonderLand

Trả lời

0

Vấn đề được giải quyết. Không phải là một vấn đề với MySql. Vì lý do nào đó, thế hệ số hóa đơn đã mất một khoảng thời gian khiêu dâm. Công ty không sử dụng Hóa đơn từ Magento. Tắt chúng đi. Đã giải quyết được sự cố. Không có RCA đầy đủ nào được thực hiện về vấn đề cụ thể với việc tạo hóa đơn.

+0

Tôi đang sử dụng Magento Community 1.8.0 và mô-đun thanh toán của tôi là Onestepcheckout của Idev. Đối mặt với cùng một vấn đề, bạn có thể hướng dẫn tôi chính xác nơi tôi phải kiểm tra hoặc tắt biểu mẫu hóa đơn không? –

+1

Nó có lẽ không phải là cách tốt nhất để sửa chữa, nhưng chúng tôi đã làm nó theo cách này bởi vì chúng tôi đã bán phá giá cài đặt hiện tại của chúng tôi cho một bản sao mới của Magento. Tôi sẽ chăm sóc trước khi bạn đi tuyến đường này.Trong Mage_Eav_Model_Entity_Type :: fetchNewIncrementId, xung quanh dòng 150 (dòng của tôi là một chút khác nhau bởi vì các tập tin đã được sửa đổi) sau khi dòng $ type = $ this-> getEntityTypeCode(); thêm một cái gì đó như nếu ($ type === 'hóa đơn') trả lại 'INV0' Không phải là cách nào để sửa chữa bất cứ điều gì, nhưng nó có thanh toán di chuyển một lần nữa. –

+0

Cảm ơn Danny, vì sự giúp đỡ của bạn –

Các vấn đề liên quan