是慢速查询损坏?

时间:2014-02-25 18:42:42

标签: mysql performance

我知道慢查询会让客户烦恼或者需要很长时间才能完成。 是否有理由除了使它们更快以至于您应该优化查询? 换句话说,长时间在服务器上运行的查询是否会造成任何损害或以其他方式导致服务器出现问题?

3 个答案:

答案 0 :(得分:1)

如果您对具有大量写入活动的系统进行了长时间运行的查询,那么保持MVCC完整性可能会逐渐变得更加昂贵。由于对InnoDB的查询是在数据的一致快照上进行的,因此后续写入会以一种方式排队,直到查询结束。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

  1. I / O非常高
  2. 服务器上的连接数高达700+(通常保持在200以下,幸运的是我们仍能连接到MySQL !!)
  3. 即使INSERT INTO .. VALUES()速度很慢,最常见的表有100多个INSERT查询等待,其中很多都很快就会超时。 (这在正常日子里不会发生)
  4. 其他查询简单的SELECT on id也很慢。
  5. 另外需要注意的是,如果您正在进行WRITE操作,那么将发出MyISAM(表级)/ InnoDB(行级)锁。这可能会让你的生活变得更糟。

    是的,这是最糟糕的情况,但是查询速度慢会导致整个系统崩溃。