我有;
- PHP 7.3 中的 CRUD 重载应用程序,使用 CodeIgniter 框架。
- 只有 2 个用户访问应用程序。
- 数据库是mariadb 10.2,有10个表。通常,存储的INT和引擎默认值是InnoDB,但在表中,我存储了一个"中等文本"列。
- 由 cronjobs 管理的应用程序(每分钟 10 个不同的作业(
- 来自数据库的工作平均收益为 100-200 CRUD。(总共 ~ 1k-2k CRUD 在一分钟内工作,有 10 张桌子(
经过测试;
-
MySQL 中的持久连接 我遇到了一个超过最大连接数的问题,所以我注意到如果您没有在 database.php 中将 pconnect 设置为配置,代码点火器不会关闭连接。因此,简化为,如果您将其设置为 true,它使用允许持久连接。所以,我想解决这个问题,我找到了一个解决方案,我需要将其设置为false,它将自动关闭所有连接。 我更改了配置以禁止持久连接。
-
更新后,永久连接已禁用。我的应用程序开始正常运行,1 小时后,由于下面显示的几个错误,它再次崩溃,我通过在 my.cnf 中为 mariadbmax_allow_package设置为最大值来修复这些错误。
警告 --> 发送查询数据包时出错。PID=2434 查询错误:MySQL 服务器已消失
- 我注意到数据库需要调整。数据库大小为 1GB+。我每分钟都安排了很多 CRUD 作业。因此,我将缓冲区大小更改为 1GB,将 innodb 引擎池大小更改为 %25。我习惯了MySQL调谐器,并用它找出了这些变量。
最后,我仍然收到查询包错误。
数据包顺序不正确。预期 0 收到 1。数据包大小 = 23
我的服务器有 8GB 内存(已使用 %25(,4 核 x 2GHz(已使用 %10( 我无法决定哪种配置是目前的最佳选择。我无法增加 RAM,也增加了 %25 使用的 ram,因为密钥缓冲区大小为 1GB,它可以充分利用 ram 即时作业。
我可以;
- 修复数据库错误,
- 增加平均完成的 CRUD 过程
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
小一个字节,所以在适用的情况下这是一个很小的好处。