首页 > 解决方案 > 使用缓冲区大小和持久连接配置优化 mysql (mariadb) 中数据库性能的最佳方法

问题描述

我有;

经测试

  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 即时作业。

我可以吗;

标签: mysqlperformancecodeigniterinnodbmysql-pconnect

解决方案


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它是一个小好处。


推荐阅读