magento锁定等待超时超过sales_flat_order_grid

时间:2016-09-23 17:45:45

标签: sql magento timeout locking

我有一个很少扩展的magento网站。主要扩展名是唯一代码的礼品卡扩展。我们现在正在使用800K代码进行促销,因此它正在创造巨大的流量。问题是现在它是在付款后创建鬼订单 - 在订单必须从保留订单注册到确认的最后时刻 - 它显示表锁定错误。

确切错误是:

  

SQLSTATE [HY000]:一般错误:1205超过锁定等待超时;尝试重新启动事务,查询为:INSERT INTO sales_flat_order_gridentity_idstatusstore_idcustomer_idbase_grand_totalbase_total_paidgrand_totaltotal_paidincrement_idbase_currency_codeorder_currency_codestore_namecreated_atupdated_at,{ {1}},billing_name)SELECT shipping_namemain_tableentity_idmain_tablestatusmain_table,{{ 1}}。store_idmain_tablecustomer_idmain_tablebase_grand_totalmain_tablebase_total_paid,{{1} }。main_tablegrand_totalmain_tabletotal_paidmain_tableincrement_idmain_tablebase_currency_codemain_tableorder_currency_codemain_tablestore_namemain_table,CONCAT(IFNULL(table_billing_name.firstname,''),&# 39;',IFNULL(table_billing_name.middlename,''),'',IFNULL(table_billing_name.lastname,''))AS { {1}},CONCAT(IFNULL(table_shipping_name.firstname,''),'',IFNULL(table_shipping_name.middlename,''),&# 39;',IFNULL(table_shipping_name.lastname,''))AS created_at FROM main_table AS updated_at LEFT JOIN billing_name AS { {1}} shipping_namesales_flat_order = main_tablesales_flat_order_address LEFT JOIN table_billing_name AS main_table ON billing_address_id。{{ 1}} = table_billing_nameentity_id WHERE(main_table.entity_id IN(' 140650'))ON DUPLICATE KEY UPDATE sales_flat_order_address = VALUES(table_shipping_name) ,main_table = VALUES(shipping_address_id),table_shipping_name = V. ALUES(entity_id),entity_id = VALUES(entity_id),status = VALUES(status),store_id = VALUES({{1 }}),store_id = VALUES(customer_id),customer_id = VALUES(base_grand_total),base_grand_total = VALUES(base_total_paid),{ {1}} = VALUES(base_total_paid),grand_total = VALUES(grand_total),total_paid = VALUES(total_paid),increment_id = VALUES(increment_id),base_currency_code = VALUES(base_currency_code),order_currency_code = VALUES(order_currency_code),store_name = VALUES({{1 }})

似乎没有引用,除了:140650 for sales_flat_order_grid的实体ID。

如果有任何人有任何想法,请告诉我可能的解决方案。

2 个答案:

答案 0 :(得分:2)

此问题可能与早期版本的Magento中的错误有关。过去,在事务中发生了对sales_flat_order_grid的INSERT。并且由于Magento用来填充它的查询,查询计划程序无法确定要锁定它的行锁定了整个sales_flat_order_grid表。因为在事务中发生了这种情况,锁定一直保留到COMMIT。

如果这是导致问题的原因,则需要解决将订单网格计算移至commit_after的问题。

答案 1 :(得分:0)

好的,我正在回答我自己的问题 - 万一其他人觉得有帮助。

解决方案:从import ClassImade var1 = ClassImade() Var2 = ClassImade() 运行对遗失entity_id的插入查询,通过将sales_flat_order替换为140650来运行以上查询,这将解决此问题。这是因为两个表共享相同的main_table.entity_id NOT IN (select sales_flat_order.entity_id from sales_flat_order)值。

我也知道请设置慢查询日志,因为你可以看到哪个查询花了很长时间(它们是创建死锁的那个,因为db服务器资源被占用) - 很快我发现这样并解决了第三方扩展慢查询问题 - 没有表锁错误。