2014-02-25 27 views
0

我知道慢速查询会惹恼客户端,或者花费很长时间才能完成。 除了让他们更快,你应该优化一个查询是否有一个原因? 换句话说,长时间在服务器上运行的查询是否会对服务器造成任何损害或引起问题?是慢速查询损坏?

+1

不是由它自己,但它取决于实际查询,如果它写得严重或恶意,然后可能。 – ggdx

+0

我想如果你运行一个查询来连接服务器的CPU几个小时,你可能会稍微加快正常的磨损过程。 – Blorgbeard

回答

0

慢速查询,即使读取也会产生很多问题。正如symcbean所提到的那样,服务器上的资源(I/O,内存等)使用率会很高。 我主要处理InnoDB表。上周,由于某些配置问题,所有报告查询都开始击中主数据库而不是从属数据库。一些我们所面临的问题是

  1. 的I/O非常高
  2. 在服务器上的连接数高达700+(其通常保持在低于200,很幸运我们仍然能够连接到MySQL!)
  3. 即使INSERT INTO .. VALUES()速度很慢,最频繁的表有100多个INSERT查询在等待,其中很多很快就会超时。 (这从来不会发生在正常的日子里)
  4. 其他查询简单SELECT上的ID也很慢。

另外需要注意的是,如果您正在进行WRITE操作,将会发出MyISAM(表级)/ InnoDB(行级)锁。那会让你的生活更糟。

是的,这是最坏的情况,但缓慢的查询可能会拖累整个系统。

1

如果您对具有大量写入活动的系统有很长时间的查询,那么维护MVCC完整性可能会逐渐变得更加昂贵。由于对InnoDB的查询发生在数据的一致快照上,所以后续写入以查询关闭的方式排队。

如果您经常这样做,通常最好创建一个用于报告目的的副本数据库。 MySQL的主/从系统使这非常简单。

1

使用MyISAM表(在某些情况下与其他引擎)它会阻止其他查询启动 - 因此它们需要很长时间才能完成。在其他地方(例如,网络服务器和用户的耐心)可能会导致连接终止 - 在没有事务的情况下,这会导致数据完整性问题。

即使在没有阻塞的情况下,长查询也会消耗资源,这意味着服务器上同时发生的其他事情会减慢。

在配置错误的服务器上,它可能会消耗太多的内存 - 首先进入交换并大量减速,并可能触发OOM杀手。