小编wat*_*ery的帖子

查询挂起在准备状态并阻止其他查询等待表刷新

在我正在开发的一个网络应用程序中,有一个UPDATE正在减慢/阻止其他几个查询:

UPDATE products
SET visible = 1
WHERE merchant_id = in_merchant_id
    AND source_code IN (
        SELECT source_code
        FROM feeds_processing_data
        WHERE processing_id = in_processing_id
        )
Run Code Online (Sandbox Code Playgroud)

它基本上更新了桌子上的特定“窗口” products,根据其他一些信息打开或关闭可见性。该表是 Web 应用程序的核心,来自前端的搜索在其中运行(通过全文或通过代码查找),后台进程会不时更新其内容。
我通常通过检查查询计划并验证是否存在正确的索引来解决这些问题。

然而,令我困惑的是,列出的会话information_schema.PROCESSLIST显示上述查询位于该preparing状态,而其他被阻止的查询是Waiting for table flush,我对此知之甚少或一无所知。

这是被阻止的查询之一:

SELECT id,
    [...]
FROM (
    SELECT (MATCH(NAME, description, manufacturer_name) AGAINST('+crema +mani' IN BOOLEAN MODE)) AS rank,
        p.*
    FROM products p
    WHERE visible = 1
        AND MATCH(NAME, description, manufacturer_name) AGAINST('+crema +mani' IN BOOLEAN MODE) LIMIT 400
    ) ranked …
Run Code Online (Sandbox Code Playgroud)

mysql blocking

2
推荐指数
1
解决办法
3827
查看次数

标签 统计

blocking ×1

mysql ×1