2017-08-09 124 views
0

我知道这个问题是通用的,但希望有人知道引擎盖下的mySQL。mySQL查询队列系统

我在想如何同时运行多个查询-Q1,Q2,Q3-时,我的SQL服务器(版本5.5.7到5.7是我们使用的)分配优先级

  • 平衡处理器时间相等的3个查询之间:1/3
    每个?

    它是否为更大的查询分配更多的计算能力,估计的种类,例如, 2/3 Q1,Q2-Q3的1/6?

我的问题背后的原因是服务器运行多个交付时冻结的原因。看起来,如果第一季度数量巨大,服务器不会将其排入队列,并允许Q2-Q3保持数小时,始终保持最低水平以继续提供。

事实是我们的服务器可以接近冻结,即使对于比较小的查询,也暗示有一个纯粹的FIFO队列(先进先出)?为更简单的查询Q2-Q3分配如此小的功率,直到第一季度完成,这些查询几个小时才能完成。这不可能是这样,但我为了明白它为什么会阻止而努力。

由于提前,

+0

除了磁盘访问,这得到了一些特殊的待遇,查询基本上执行而不考虑其他查询。不过,他们会因为锁定而相互阻塞。如果其中一个查询例如想要更新另一个使用的行(或者如果您正在使用MyISAM:一张表),取决于它可能必须等到锁解除的情况。长时间运行的查询通常是长时间运行的,因为它们使用(也许是锁定)很多资源。尝试优化您的查询(例如,加快速度,增加索引锁定更少,将其拆分成小部分,使用其他交易设置,...) – Solarflare

+0

谢谢我知道一点关于锁定(每行,每个表,取决于在引擎上 - 我们有InnoDB)。我不明白你的意思是“不考虑其他查询”。过度简化:所以如果Q1需要1h,Q2需要1s,mySQL会先处理Q1,Q2的输出将在1h 1s内可用?或者它会同时运行,Q2比单独运行需要更长的时间? – user3310782

+0

是的,每个客户都有自己的线程。如果Q1和Q2不互相锁定,Q1和Q2将并行运行。 – Solarflare

回答

0

有太多的事情可能会在给你一个答案。至少,不是没有更多的信息。

  • 你有多少个CPU核心? 3个查询如果你有很多内核,应该能够同时运行。但是如果它们都是I/O限制的,那么它们就会慢下来。
  • 你在使用InnoDB吗?并发访问比MyISAM好得多。特别是如果涉及UPDATE - MyISAM彼此写入和读取块; InnoDB不会遭受这种冲突。
  • 是否存在某种形式的交易?
  • 是否涉及表扫描?
  • 是否启用查询缓存?什么是query_cache_size?如果它超过五千万,那么你可能会遇到某些效率低下的问题。
  • innodb_buffer_pool_size的值是多少?多少内存?需要触及的数据集才能执行查询有多大?这些可能正在交互导致I/O,或更糟糕的交换。
  • 需要1小时的查询非常糟糕。几分钟是'坏'。让我们看看查询。
  • 有很多更多的细节将决定是否多个InnoDB查询将运行得更慢或更快,具体取决于它们是否并行运行。

如果你想要一个答案,而不是挥手,请提供查询和SHOW CREATE TABLE任何涉及的表格。 Plus表示表格有多大。