Sql magento锁等待超时超出了销售\u平面\u订单\u网格
我有一个几乎没有扩展的magento站点。主扩展是giftcard扩展,用于唯一代码。我们现在正在运行800K代码的促销,因此它正在创造巨大的流量。现在的问题是,它正在创建鬼订单,因为在接受付款后-在订单必须从保留订单注册到确认订单的最后一刻-它显示了表锁定错误 确切的错误是: SQLSTATE[HY000]:一般错误:超过1205锁等待超时;尝试重新启动事务,查询为:插入Sql magento锁等待超时超出了销售\u平面\u订单\u网格,sql,magento,timeout,locking,Sql,Magento,Timeout,Locking,我有一个几乎没有扩展的magento站点。主扩展是giftcard扩展,用于唯一代码。我们现在正在运行800K代码的促销,因此它正在创造巨大的流量。现在的问题是,它正在创建鬼订单,因为在接受付款后-在订单必须从保留订单注册到确认订单的最后一刻-它显示了表锁定错误 确切的错误是: SQLSTATE[HY000]:一般错误:超过1205锁等待超时;尝试重新启动事务,查询为:插入sales\u flat\u order\u grid(实体id,状态,门店id,客户id,基本总金额,基本总金额,总金额,
sales\u flat\u order\u grid
(实体id
,状态
,门店id
,客户id
,基本总金额
,基本总金额
,总金额
,增量id
,基本货币代码
,订单货币代码
,门店
,创建的名称
),在
更新,账单名称
,发货名称
)选择main\u table
,entity\u id
,main\u table
,main\u table
,store\u id
,main\u table
,main\u table
基本总计,基本总计
,基本总计
,基本总计
代码>,主表
,支付总额
,主表
,增量id
,主表
,基本货币代码
,主表
订单货币代码,主表
,主表
主表 更新了、CONCAT(IFNULL(table_billing_name.firstname)、“”、IFNULL(table_billing_name.middlename)、“”、IFNULL(table_billing_name.lastname)、“”、IFNULL(table_shipping_name.middlename)、“”、IFNULL(table_shipping_name.middlename、“”、IFNULL)(table_shipping_name.lastname、“”、IFNULL)(table_shipping_name.lastname、“”)作为sales\u-flat\u-order
ASmain\u-table
LEFT JOINsales\u-flat\u-order\u-address
AStable\u-billing\u-name
main\u-table账单地址id=账单名称
实体idLEFT JOIN账单地址ble_shipping_name
ONmain_table
shipping_address_id
table_shipping_name
其中(main_table.entity_id IN('140650'))在重复键更新实体id
=值(实体id
),状态
=值(状态
),存储单元id
=值(store\u id
)、customer\u id
=价值(customer\u id
)、base\u grand\u total
=价值(base\u grand\u total
)、base\u total
=价值(grand\u total
)、total
)、已支付的总价值(,increment\u-id
=值(increment\u-id
),base\u-currency\u-code>=值(base\u-currency\u-code
),order\u-currency\u-code>=值(store\u-name
),created\u-at
=值(created\u-at
),updated_at
=值(updated_at
),billing_name
=值(billing_name
),shipping_name
=值(shipping_name
)
除了:140650用于销售\平面\订单\网格的实体id之外,似乎没有其他参考
如果有人有任何想法,请告诉我可能的解决方案。好的,我回答我自己的问题-以防其他人发现有帮助
解决方案:从sales\u flat\u order
运行缺少entity\u id的插入查询,通过将140650
替换为main\u table.entity\u id不在(从sales\u flat\u order中选择sales\u flat\u order.entity\u id)来运行上述查询
这将解决问题。这是因为两个表共享相同的实体id
值
我还了解到,请设置慢速查询日志,因为您可以看到哪个查询需要很长的时间(它们是在数据库服务器资源被占用时造成死锁的查询)-一旦我发现并解决了第三方扩展缓慢的查询问题-没有表锁错误。此问题可能与早期版本的Magento中的错误有关。过去的问题是,插入sales\u flat\u order\u grid发生在事务中。由于Magento使用查询填充它,因此query planner could无法确定要锁定的行锁定了整个sales\u flat\u order\u网格表。因为这发生在事务中,所以锁定会保留到提交
如果这是导致您出现问题的原因,您需要解决将订单网格计算移动到提交之后的问题。如何将代码移动到提交之后?我找不到订单在网格中保存订单数据的代码。