2013-12-18 53 views
6

我的網站在結帳時遇到問題。我使用的是Magento Enterprise 1.8,我的結帳模塊是Idev的Onestepcheckout。Magento 1.8:客戶退房時鎖定等待超時問題

我們看到的問題是eav_entity_store表正在花費很長的時間(長達51秒)將訂單號返回到Mage_Eav_Model_Entity_Type。

我所知道的是,查詢運行得到這是一個事務作爲'FOR UPDATE'運行,所以被訪問的行被鎖定,直到事務完成。我已經查看了代碼的其他部分以及整個事務中的PHP代碼,這些代碼行被鎖定(我們使用InnoDB,因此一旦事務被提交,鎖應該被釋放),而我只是沒有看到任何在那裏(或在慢速查詢日誌中)應該引起鎖定等待51秒的任何地方。

我已經考慮過請求可能會堆積起來,並且在等待的時候緩慢爬升,但是我看到查詢時間從6ms到20k ms到50k ms 1,2,3。這不是100-200個請求疊加的問題,因爲每天只有幾十個這樣的請求。

我知道MySql使用父鎖定,但是沒有任何FK與此表相關。有兩個BTREE指數在某一時刻是FK的指數,但自此以後一直在變化(發生在多年前)。對於那些非Magento savy,eav_entity_store表格少於50行,只有5列寬(4 smallint和varchar)。我嚴重懷疑表格或不適當的索引是罪魁禍首。然而,本着TLDR的精神,我會說兩個BTREE指數是我們從這張表中選擇的兩列。

一種可能性是我可能需要用複合索引來替換這兩個索引,因爲只讀取此表的數據來自一個查詢(FROM [具有索引A的列]和[具有索引B的列] )。我只是不知道是否行級鎖定會阻止此查詢訪問表中當前索引的表中的另一行。

在這一點上,我已經確信潛在的問題嚴格與數據庫相關,但任何Magento或MySql對此的建議將不勝感激。任何人仍然可以閱讀這篇文章,希望能夠理解我已經用盡了很多選擇,並且在這裏嚴重受難。任何你認爲可能有用的信息都是值得歡迎的。謝謝。

編輯我們看到確切的錯誤是: 錯誤消息:SQLSTATE [HY000]:常規錯誤:1205鎖定等待超時超標;嘗試重新啓動交易

+0

手動運行慢速查詢時可以重現嗎?在這種情況下,你可以分析它。 –

+0

不幸的是,我一直無法重現。數據庫託管是遠程完成的。我一直在等待DBA在那裏回來,看看他們可以提供什麼樣的信息。一旦他們這樣做,我會在這裏更新。 –

+0

在Magento 1.8上的相同問題...也許這是UPS方面的問題,而不是magento? – WonderLand

回答

0

問題已解決。是不是與MySql的問題。出於某種原因,發票號碼的生成花費了大量的時間。公司不使用Magento的發票。把它們關掉。問題解決了。關於具體發票生成問題,沒有完全RCA完成。

+0

我使用的是Magento Community 1.8.0,我的結帳模塊是Idev的Onestepcheckout。面對同樣的問題,您是否可以引導我確切地查看或關閉發票表單? –

+1

這可能不是解決問題的最佳方法,但我們是這樣做的,因爲我們正在傾銷我們當前安裝的新版magento。在你走這條路線之前,我會照顧你。在Mage_Eav_Model_Entity_Type :: fetchNewIncrementId中,在$ line = $ this-> getEntityTypeCode()之後的第150行(我的行有點不同,因爲文件被修改了)。添加類似if($ type ==='invoice')返回'INV0'的東西不是解決任何問題的方法,但它使checkout再次移動。 –

+0

謝謝Danny,爲您提供幫助 –

相關問題