首页 > 解决方案 > 服务器上的 I/O 进程限制正在过载

问题描述

最近我的服务器遇到问题。

请求被延迟或退回,可能或主要原因是(由服务器支持团队共享)是I/O 限制超出。(每分钟 40K 到 50K I/O 操作)

解决此问题的可能方法

  1. 优化应用程序。
  2. 增加服务器资源。

我正在尝试这两种方法,增加了服务器资源,并致力于优化应用程序。

同时有很多问题,并试图在互联网/书籍等上搜索答案,但不知何故没有找到任何可靠的答案。

有几个查询。

  1. 如何计算 I/O 进程?

If i am calling 5 queries from application backend one by one does that count to total of 5 I/O operation?

If i am calling 2 queries but now i have combined 3 different queries into one query so how many I/O operation will be counted? but what i have noticed is due to this total response time was increased when compared to earlier one.

  1. 这种情况应该如何解决,因为流量会不断增加,甚至在应用程序优化之后,I/O 操作迟早会赶上时间。

  2. 寻找从事某种社交媒体架构/平台 ON 后端 MySQL、服务器资源管理的指导。

其中一些问题对您来说可能看起来太天真或愚蠢,但由于我在这方面经验不足,我正在努力学习并尝试通过任何方式解决。

编辑 以下是服务器支持团队共享的 I/O 日志我已经检查了您的服务器,目前您的容器的 I/O 详细信息是:

[code2020-07-15 11:09 | CPU: 78.42 | IOPs-Read: 57899 | IOPs-Write: 3835
2020-07-15 11:08 | CPU: 64.63 | IOPs-Read: 57880 | IOPs-Write: 3855
2020-07-15 11:07 | CPU: 76.40 | IOPs-Read: 33240 | IOPs-Write: 4575
2020-07-15 11:06 | CPU: 93.91 | IOPs-Read: 61386 | IOPs-Write: 4463
2020-07-15 11:05 | CPU: 105.35 | IOPs-Read: 50142 | IOPs-Write: 5056
2020-07-15 11:04 | CPU: 93.25 | IOPs-Read: 55701 | IOPs-Write: 4580
2020-07-15 11:03 | CPU: 98.06 | IOPs-Read: 68514 | IOPs-Write: 4789
2020-07-15 11:02 | CPU: 123.39 | IOPs-Read: 52368 | IOPs-Write: 6383
2020-07-15 11:01 | CPU: 93.82 | IOPs-Read: 46519 | IOPs-Write: 6119
2020-07-15 11:00 | CPU: 97.86 | IOPs-Read: 69654 | IOPs-Write: 6058
2020-07-15 10:59 | CPU: 106.11 | IOPs-Read: 72819 | IOPs-Write: 6142
2020-07-15 10:58 | CPU: 68.74 | IOPs-Read: 35668 | IOPs-Write: 4630
2020-07-15 10:57 | CPU: 81.57 | IOPs-Read: 41877 | IOPs-Write: 4924
2020-07-15 10:56 | CPU: 85.56 | IOPs-Read: 59275 | IOPs-Write: 4879
2020-07-15 10:55 | CPU: 78.71 | IOPs-Read: 38883 | IOPs-Write: 4176
2020-07-15 10:54 | CPU: 53.99 | IOPs-Read: 41164 | IOPs-Write: 3068
2020-07-15 10:53 | CPU: 81.39 | IOPs-Read: 51939 | IOPs-Write: 5301[/code] 

标签: mysqloptimizationserverquery-optimization

解决方案


(期待评论)

如果我从应用程序后端一个一个地调用 5 个查询,这算作总共 5 个 I/O 操作吗?

如果我正在调用 2 个查询,但现在我已将 3 个不同的查询合并为一个查询,那么将计算多少 I/O 操作?但我注意到的是,与早期相比,总响应时间增加了。

对于查询如何使用 I/O,您有错误的模型。

如果您选择单行,并且您拥有该行的唯一标识符,则它可能需要 1 个 I/O,或者可能需要 0 个。

0 IOPs——数据已经“缓存”在内存中。因此,在获取所需数据方面付出了一些努力,但它不涉及任何 I/O。

1 IOPS——假设你有一个巨大的桌子,你还没有接触到桌子的特定区域(不管这意味着什么),那么它可能必须进入磁盘才能找到所需的“行”。之后,它和附近的行将被“缓存”,从而可能使一些未来的查询在没有任何进一步 I/O 的情况下运行。

大量 I/O —— 假设您有一个巨大的表,并且您有一个查询需要查看表的所有行。并且该表没有被缓存(或者可能只有部分表被缓存)。现在您将有大量的 I/O 操作。

这些是“读取”IOPS 的示例。还有“写入”需要考虑。但首先,找到慢查询,这样我们就可以专注于它们。

慢日志是识别最慢查询的好方法。更多:mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog


推荐阅读