1

我有;

  • PHP 7.3 中使用 CodeIgniter 框架的 CRUD 重负载应用程序。
  • 只有 2 个用户访问应用程序。
  • 数据库是 mariadb 10.2,有 10 个表。通常,存储的 INT 和引擎默认是 InnoDB,但在表中,我存储了一个“mediumtext”列。
  • 由 cronjobs 管理的应用程序(每分钟 10 个不同的作业)
  • 一个工作的平均收益是来自 DB 的 100-200 CRUD。(总共 ~ 1k-2k CRUD 在一分钟内使用 10 个表)

经测试

  1. MySQL 中的持久连接我遇到了最大连接超出的问题,所以我注意到如果你没有在 database.php 中将 pconnect 设置为 true,Code Igniter 不会关闭连接。因此,简化一下,如果您将其设置为 true,它会使用允许持久连接。所以,我想解决这个问题,我找到了一个需要将其设置为false的解决方案,它会自动关闭所有连接。我更改了配置以禁止持久连接。

  2. 在我更新持久连接后禁用。我的应用程序开始正常运行,1 小时后,由于下面显示的几个错误,它再次崩溃,我通过在 mariadb 的 my.cnf 中将max_allow_package设置为最大值来修复这些错误。

    警告 --> 发送 QUERY 数据包时出错。PID=2434 查询错误:MySQL 服务器已消失

  3. 我注意到数据库需要调整。数据库大小为 1GB+。我每分钟都有很多 CRUD 作业。因此,我将缓冲区大小更改为 1GB,将 innodb 引擎池大小更改为 %25。我习惯了MySQL Tuner,并用它来计算这些变量。

最后,我仍然收到查询包错误。

数据包乱序。预期 0 收到 1. 数据包大小=23

我的服务器有 8GB 内存(使用了 %25),4 核 x 2ghz(使用了 %10)我现在无法确定哪种配置是最佳选择。我无法增加 RAM,也 %25 使用了 ram,因为密钥缓冲区大小为 1GB,它可以充分利用 ram 即时作业。

我可以吗;

  • 修复数据库错误,
  • 增加平均完成的 CRUD 过程
4

1 回答 1

0

8GB 内存 --> innodb_buffer_pool_size = 5G。

200 qpm --> 没问题。(200qps可能是一个挑战)。

10张桌子;2 个用户 --> 不是问题。

持久连接 --> 褶边;不需要。

key_buffer_size = 1G? --> 为什么?你不应该使用 MyISAM。更改为 30M。

max_allow_package--> 那是什么?也许是一个错字max_allow_packet?不要将其设置为超过 RAM 的 1%。

Packets out of order--> 听起来像是网络故障,而不是数据库错误。

MEDIUMINT--> 比小于一个字节,因此在适用时INT它是一个小好处。

于 2020-05-12T02:58:38.300 回答