Dan*_*cea 6 mysql innodb magento
我的网站在结账时遇到问题.我正在使用Magento Enterprise 1.8,我的结账模块是Idev的Onestepcheckout.
我们看到的问题是eav_entity_store表花费了非常长的时间(最多51秒)来将订单号返回到Mage_Eav_Model_Entity_Type.
我所知道的是查询运行以获取这是一个以"FOR UPDATE"运行的事务,因此被访问的行将被锁定,直到事务完成.我已经查看了代码的其他部分以及整个事务中的代码,其中行被锁定(我们正在使用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超过锁定等待超时; 尝试重新启动事务
问题解决了。MySql 没有问题。由于某种原因,发票号码的生成花费了相当长的时间。公司不使用 Magento 的发票。把它们关掉了。问题解决了。没有针对发票生成的具体问题进行完整的 RCA。
归档时间: |
|
查看次数: |
1996 次 |
最近记录: |