【问题标题】:Limiting mysql use per process限制每个进程的mysql使用
【发布时间】:2019-02-14 01:47:03
【问题描述】:

我的 Debian VPS 配置了标准 LAMP。 在这台服务器上,只有一个站点(商店)有一些 cron 作业——主要是 PHP 脚本。其中之一是由 Lynx 浏览器执行的更新脚本,它发送大量查询。 当此脚本运行时(需要 3-4 分钟完成),它会消耗所有 MySQL 资源,并且站点几乎无法运行(页面生成时间为 30-60 秒,而不是 1-2 秒)。

如何限制此脚本(即延长其执行时间以限制可用资源)以允许其他服务正常运行?我相信这个问题有一个简单的解决方案,但找不到。看来我的谷歌超级大国最近两天是有限的。

【问题讨论】:

  • 您使用的是什么数据库引擎?innodb 或 myisam
  • @coder 我使用 InnoDb
  • 我会在您最常用的列上创建索引并查看您的联接。
  • 很遗憾,这不是我的脚本(而且它被遮盖了)所以无法优化它。

标签: php mysql cron limit query-performance


【解决方案1】:

您无权修改有问题的脚本,因此修复此问题需要数据库管理员的工作,而不是编程工作。您的任务称为调整 MySQL 数据库。

(我猜你已经向你的供应商寻求帮助,他们拒绝了。)

脚本运行时,Ron top 或 htop。 CPU 是否固定在 100%? RAM 是否耗尽?

1) 忍受它,并在您的网站没有很多访问者的一天中运行更新脚本。相当简单,但不是真正的解决方案。

2) 作为实验,将 RAM 添加到您的 VPS 实例。它可以让 MySQL 做所有在 RAM 中的事情,它目前放在硬盘上的临时表中。如果有帮助,这可能是一种解决您的问题的方法,只需少量工作和较高的服务器租用费。

3) 添加一些索引以加快脚本中的查询速度,从而更快地完成每个查询。问题是,哪些索引会有所帮助? (只是随机添加索引通常没有多大帮助。)

首先,找出哪些查询速度较慢。在脚本运行时重复执行命令 SHOW FULL PROCESSLIST。该结果中的 Info 列显示所有正在运行的查询。将它们复制到文本文件中以保留它们。 (或者你可以使用MySQL的慢查询日志,关于这个你可以在线阅读。)

其次,分析最严重的违规查询,看看是否有明显的索引要添加。告诉您如何做到这一点通常超出了 Stack Overflow 答案的范围。您可能会询问有关特定查询的另一个问题。在你做之前,请 reead this note about asking good SQL questions,关注查询性能部分。

3) 您的脚本可能正在从表中选择许多行,或者使用 SELECT 来汇总许多行,这些表在用户访问您的网站时也需要更新。在这种情况下,您的访问者可能正在等待这些 SELECT 完成。如果您可以更改脚本,则可以将此语句放在长时间运行的 SELECTS 之前。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

这允许它之后的 SELECT 语句执行“脏读”,其中它可能会获得更新行的早期版本。 See here

或者,如果您知道如何将一条语句插入到您的隐藏脚本中,请在打开数据库会话之后立即添加这条语句。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

但是,如果无法访问源代码,您只有一种方法可以查看这是否是问题所在。也就是说,在脚本运行之前,从特权帐户访问 MySQL 服务器,并给出这些 SQL 命令。

 SHOW VARIABLES LIKE 'tx_isolation';
 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITED;

然后看看性能问题是否有所改善。在脚本完成后将其设置回来,可能像这样(取决于上面检索到的 tx_isolation 值)

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITED;

警告如果依赖于事务一致性,对隔离级别的永久性全局更改可能会破坏您的应用程序。这只是一个实验。

4) 骚扰脚本作者以解决此问题。

【讨论】:

  • 感谢您的详尽回答。真的很有帮助。
  • 您好,感谢您的关注。由于这是一个相当古老的话题,它已经解决了,或者我应该说它已传递给在系统管理方面具有更大经验的人(我是一名程序员)。据我所知,他们仍然遇到此脚本的问题,但不知道详细信息并且目前无法访问服务器。
【解决方案2】:

查询缓慢?高CPU?高输入/输出?然后您必须查看查询。你不能“调整你的方式来解决性能问题”。调整可能会给您带来几个百分点的改进;修复索引和查询可能会给您带来更多改进。

请参阅this 以查找“最差”查询;然后返回SELECTsEXPLAINsSHOW CREATE TABLEs 寻求帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2011-10-16
    • 1970-01-01
    • 2016-03-09
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多