限制分配给慢速MySQL查询的资源

时间:2017-10-14 14:40:56

标签: mysql database-performance query-performance database-concurrency

我有一个需要每隔X分钟运行一次以更新某些信息的流程。查询是否需要10秒,20秒甚至1分钟都无关紧要。但重要的是,信息至少每10分钟更新一次。

由于查询速度很慢,并且因为服务器正用于其他查询,因此会影响其他用户。这就是我想要解决的问题。

我会cpulimit无论哪个进程运行查询,但占用所有资源的进程都是MySQL服务器本身,所以看起来我需要一些特定于MySQL的设置。

这是一个导致服务器冻结的MySQL查询。我想限制分配给该特定查询的资源。

1 个答案:

答案 0 :(得分:0)

MySQL无法告诉mysqld服务器为某些查询使用较低优先级或较少资源。你需要关注这些事情:

  1. 使违规查询花费更少的时间。这可以通过以下一种或两种方式完成。

    一个。将其分解为较小的查询

    湾创建适当的索引以加快速度

  2. 减少对其他查询的干扰。

  3. 您没有向我们展示查询,因此本答复的其余部分基于猜测。

    1a:以几百或几千条记录的块进行更新。重复这些(较短的)更新,直到您的任务完成。一旦每个细分市场运行,它就会完全消失并让其他查询完成。

    1b:阅读有关使用EXPLAIN并使用索引更快地进行查询的信息。让您的大查询更快。索引可以大大加快您的WHERE条款。

    2:您可以为系统上的查询设置isolation level,这样他们就不会对彼此产生过多的依赖。这可能会让他们更优雅地共享服务器。在发出更新作业阻止的查询之前,请发出query to set the isolation level to READ UNCOMMITTED。这将让他们完成,并使用更新作业完成之前存在的数据,而不是等待工作。

     SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    

    在发出其他查询之前。

    如果您控制整个服务器,则可能更容易将READ UNCOMMITTED设置为默认隔离级别。