我有一个 Web 应用程序,它使用托管在虚拟服务器上的 MySQL 数据库。当我启动应用程序时,我一直在使用这个服务器,当时数据库非常小。现在它已经增长,服务器无法处理数据库,导致数据库频繁出错。我打算买一台服务器,我需要一些建议。
就像我说的,数据库现在是 9 GB,而且增长得相当快。有许多表有数百万行,经常更新和查询。数据库显示的最常见错误是Lock wait timeout exceeded
。以前也曾经出现过“锁的总数超过锁表大小”错误,但我可以通过增加 Innodb 缓冲池大小来避免它。
请建议我应该在购买的服务器中寻找哪些配置。我读到过数据库的理想缓冲池大小应该大于其数据的大小,所以在我的情况下,我想我需要内存 gt 9 GB。我还应该在服务器中寻找什么?
只要告诉我我是否应该给你更多关于
答案1
您可以使用名为MySQLTuner了解需要调整的变量,以及必要时需要升级的硬件。
但是,在修改设置之前,您应该了解这些设置,否则可能会加剧问题。
脚本本身包含一个非常有见地的提示:
*警告
完全理解对 MySQL 数据库服务器所做的每项更改对您来说非常重要。如果您不理解脚本输出的某些部分,或者不理解建议,则应咨询知识渊博的 DBA 或您信任的系统管理员。始终在暂存环境中测试您的更改,并始终记住,一个领域的改进可能会对 MySQL 的其他领域产生负面影响。
*警告
您可以在 Percona 的MySQL 性能博客, A书籍清单处理该主题,甚至在他们的percona.tv网站。
答案2
您检查过锁等待吗?
您可以通过激活 InnoDB 锁监视器来实现这一点:
创建表innodb_lock_monitor(a int)ENGINE = INNODB;
然后跟踪你的 MySQL 错误日志。
要禁用监视器,请删除该表。
高血压