我即将用全新的硬件替换旧服务器,但发生了一些奇怪的事情。
- 旧机器是AMD Athlon 64 X2 5600+ @ 1GHz,2 GB RAM运行 Debian 4.0 32 位和 RAID1 中的 2x380 GB(左右)HDD
- 新机器是Intel i7-3770 @ 3.4GHz,32 GB RAM,运行 Debian 6.0 64 位,RAID1 中的 2x3TB HDD(6Gbps SATA,7200rpm)
加载 SQL 转储(见下文)时,新服务器忙了大约32 分钟!新安装的服务器无事可做。另一方面,即使旧服务器忙于其他事情,它也减少了32%的时间。怎么可能?
两台机器都使用 Debian 最小镜像安装,然后根据需要安装软件包。
旧服务器和新服务器的my.cnf 设置都使用innodb_file_per_table
并且在新服务器innodb_buffer_pool_size
上要大得多(16 GB 对 0.5 GB)。
有关 SQL 转储的数据:
- 加载一个全新的数据库 (
CREATE DATABASE
) - 16张桌子
- 单个大表(大约 1,2M 行 / 240MB SQL 数据),速度很慢
- 带有外键的 InnoDB
- 转储用途
LOCK TABLES "xxx" WRITE; ALTER TABLE "xxx" DISABLE KEYS;
(由 生成mysqldump
)
任何想法如何加快那件事?
更新
我注意到旧机器上使用了一个专用的 50GB ext3 分区,/var
而新机器上有一个 1TB ext4 根分区(包括/var
)和一个 2TB ext4 上/home
。MySQL 数据/var/lib/mysql/
在这两种情况下都存在。
更新 2
显然是硬盘缓慢地处理小块:
# dd if=/dev/zero of=test bs=1024 count=100 oflag=direct,sync
102400 bytes (102 kB) copied, 2.49824 s, 41.0 kB/s
旧服务器在相同的测试中达到1.1 MB/s 。
新服务器可以处理更大的块:
# dd if=/dev/zero of=test bs=1024k count=100 oflag=direct,sync
104857600 bytes (105 MB) copied, 7.11175 s, 14.7 MB/s
hdparm
说写缓存在两个驱动器上。分区表对齐问题?查看我的分区表。