我们的数据库 (InnobDb) 的 I/O 有时会达到 99% 的峰值。峰值过后,它会下降到大约 2%,直到再次达到峰值。在这些间隔内,没有运行一些“超级”查询。我们在 digitalocean 上运行 vp,具有 16 GB 内存、8 核处理器和 160GB SSD 磁盘。我们的数据库包含 1BG 的数据。我们怀疑我们的配置有问题 - 我们有 13 GB 内存没有使用。有人知道哪里出了问题吗?我需要提供更多信息吗?
尖峰截图链接: https://i.stack.imgur.com/PJ6kx.jpg
链接至 my.conf: http://paste.bradleygill.com/index.php?paste_id=1346993
链接到 mysql 显示状态: http://paste.bradleygill.com/index.php?paste_id=1346995
答案1
我们遇到了两个问题:
1) 我们有一个使用三个连接的 mysql 查询。结果发现这个函数导致 Mysql 崩溃。我们重写了这个查询,使用 4 个没有连接的 mysql 查询,解决了这个问题。(有点热修复,我们可能会重写这个函数,以便可以缓存它)。
2)当我们只使用 10% 的缓存时,我们经历了大约 99.9% 的 I/O 等待https://dba.stackexchange.com/questions/121324/mysql-only-using-10-of-cache。我们尝试编辑 mysql 配置(在底部引用)。这很有帮助,但并没有解决问题。原来是共享服务器上的另一个用户导致了 99.8% 的 I/O 峰值。联系我们的服务器提供商后,他们将服务器移至另一个分区,问题就解决了。
table_open_cache = 1024
sort_buffer_size = 4M
read_buffer_size = 128k
query_cache_size= 128M
query_cache_type = 1
tmp_table_size = 64M
thread_cache_size = 20
innodb_buffer_pool_size = 512M
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_file_per_table innodb_file_format = Barracuda