我有一个 mysql 数据库实例,里面有 3000 多个数据库。每个数据库包含 200 多个表。目前所有这些数据库中的数据超过 100 GB。我使用的是 Windows Server 2012R2 操作系统,内存为 4GB。服务器系统的 RAM 内存利用率始终显示非常高。所以我尝试重新启动系统,但重新启动不起作用。它显示重新启动很长时间,但没有重新启动。当我检查日志时,我明白存在内存问题。我想重新启动我的 mysql 实例并继续。具有上述架构的 mysql 的最佳配置是什么?我需要做什么才能让它在将来正常工作而不会失败?
[Warning] InnoDB: Difficult to find free blocks in the buffer pool (1486 search iterations)! 1486 failed attempts to flush a page! Consider increasing the buffer pool size. It is also possible that in your Unix version fsync is very slow, or completely frozen inside the OS kernel. Then upgrading to a newer version of your operating system may help. Look at the number of fsyncs in diagnostic info below. Pending flushes (fsync) log: 0; buffer pool: 0. 26099 OS file reads, 1 OS file writes, 1 OS fsyncs. Starting InnoDB Monitor to print further diagnostics to the standard output.
答案1
4GB RAM —— 现在已经很低了。有几个问题:
- 如果要交换,那么请考虑将机器分成两台:一台安装 MySQL,另一台安装应用程序。
- 向下调整
innodb_buffer_pool_size
以避免交换,或者向上调整以提供更高的效率和更少的 I/O。 - 增加 RAM 对 100GB 数据和 600K 表都有好处。
`table_open_cache 不能是 600K,而应该是几千。或者你应该找到一种方法来减少数据库的数量和/或每个数据库的表的数量。
如果这是某些 XaaS 服务,它是否可以将某些用户转移到新机器,从而改变所有相关设置和指标。
我们需要更多信息来进一步提供帮助。这是什么应用程序?它有多活跃?它在交换吗?应用程序是否在同一台机器上?MySQL 是什么版本?