更快的InnoDB写道?

时间:2012-11-14 10:19:16

标签: mysql performance mysqldump

我准备用全新的硬件替换旧服务器,但发生了一些奇怪的事情。

  • 旧机器 AMD Athlon 64 X2 5600+ @ 1GHz 2 GB RAM 运行Debian 4.0 32位和2x380 GB(左右)HDD
  • 新机器 Intel i7-3770 @ 3.4GHz 32 GB RAM 运行Debian 6.0 64位在RAID1中使用2x3TB硬盘(6Gbps SATA,7200rpm)

加载SQL转储(见下文)时,新服务器正忙于 32分钟!新安装,服务器没有别的事情可做。另一方面,服务器即使忙于其他事情也需要 32% 时间怎么可能?

使用Debian最小映像安装了这两台机器,然后根据需要安装了软件包。

新服务器上的my.cnf settings of the old servernew server使用innodb_file_per_tableinnodb_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生成)

任何想法如何加快这件事?

更新

我注意到旧机器在/var上使用专用的50GB ext3分区,而新机器在/var上有1TB ext4根分区(包括/home)和2TB ext4。在这两种情况下,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表示两个驱动器上都有写缓存。分区表对齐问题?请参阅my partition table

2 个答案:

答案 0 :(得分:2)

好的,我找到了这个的原因,希望这会对其他人有所帮助。

ext4 有"障碍"在该系统上启用,导致小写入变得非常慢。这种写入对于数据库文件来说是正常的。

禁用障碍可提高性能,并在约8分钟内加载相同的SQL转储(速度提高4倍)。

mount -o remount,barrier=0 /

禁用障碍伴随着fs完整性缺点,所以首先考虑一下......

答案 1 :(得分:0)

在新配置文件的末尾有这一行:

!includedir /etc/mysql/conf.d/

假设其中的文件与以下文件相同:https://github.com/biapy/howto.biapy.com/tree/master/mysql,这意味着它正在添加您可能想要查看的这些设置(

基optimisations.cnf:

log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1