我有一台运行在 Ubuntu 12.10 上的 MySQL 数据库服务器,配有 64GB RAM、2x3 TB SATA 6 Gb/s HDD 7200 rpm 和软件 RAID 1 以及一台 Intel Core i7-3930K。
数据库服务器通过本地网络使用专用的 1 GBit 以太网卡进行访问。
该数据库大约有 50 GB,是复制设置中的主服务器。
我认为,有两个问题导致 MySQL 查询缓慢:
- 负载是总是即使数据库服务器处于空闲状态,它也相对较高 (>2)(这不是一个大问题,因为处理器有 12 个核心,但似乎不对)
top
显示系统约 95% 处于空闲状态,使用率不到 1%5%正在等待(见以下截图)
iotop --only
显示大部分磁盘 IO 是由 jdb2/md2-8 而不是 mysqld 产生的 - 所以 mysqld 不应该是问题所在 - 但是为什么 jdb2/md2-8 会消耗这么多资源?
cat /proc/mdstat
输出以下内容:
我的问题是:
是什么原因导致 MySQL 性能缓慢?
是 iowait 吗?是什么原因导致 iowait?
是 RAID 1 吗?还是使用的硬盘?
任何帮助是极大的赞赏!
答案1
您正在运行一个日志密集型数据库,而磁盘速度几乎是目前最慢的。您看到 jdb2 的 iowaits 如此之高,是因为它很难跟上将 ext4 日志写入磁盘的速度
要么将磁盘更换为可以跟上速度的磁盘(我想到的是 SSD,尽管带电池缓存的普通 SAS 磁盘也可以)和/或开始调整。充足当谈到 SQL 环境中的文件系统调整时,有很多文档可以参考。
一个很好的起点是这里:http://dev.mysql.com/doc/refman/5.0/en/disk-issues.html
答案2
升级到 MySQL 5.7 后我遇到了这个问题。
设置“sync_binlog=0”可以解决这个问题。MySQL 在 5.7 中将默认值从 0 更改为 1。