首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更快的InnoDB写?

问更快的InnoDB写?
EN

Stack Overflow用户
提问于 2012-11-14 10:19:15
回答 2查看 817关注 0票数 3

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

  • 这台旧机器是一台 Athlon 64 X2 5600+ @1 1GHz,带有2 GB RAM,运行Debian4.032位和2x380 GB (大约) RAID1硬盘
  • 新机器是一台Intel i7-3770 @ 3.4GHz,32 GB内存运行Debian6.0 64位和2x3TB RAID1 (6 6Gbps,7200 RAM)

加载SQL时(请参阅下面),新服务器大约需要32分钟!刚安装完毕后,服务器就没有其他事可做了。另一方面,即使旧服务器忙于其他事情,它也会占用32%的时间,时间也会减少。,怎么可能?

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

旧服务器的my.cnf设置和新服务器都使用innodb_file_per_table,而innodb_buffer_pool_size在新服务器上要大得多(16 GBvs0.5GB)。

有关SQL转储的数据:

  • 加载一个全新的数据库(CREATE DATABASE)
  • 16张表
  • 一个慢的大表(大约1,200万行/240 is数据)
  • 带外键的InnoDB
  • 转储使用LOCK TABLES "xxx" WRITE; ALTER TABLE "xxx" DISABLE KEYS; (由mysqldump生成)

有什么办法加快速度吗?

更新

我注意到,旧机器在/var上使用一个专用的50 2TB /var分区,而新机器有一个1TB ext4根分区(包括/var)和一个/home上的2TB ext4。在这两种情况下,MySQL数据都位于/var/lib/mysql/。

更新2

很明显,HDD正在缓慢地处理小块:

代码语言:javascript
复制
# 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.1MB/s。

新服务器可以找到更大的块:

代码语言:javascript
复制
# 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说两个驱动器上都有写缓存。分区表对齐问题?见我的分区表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 16:32:57

好吧,我找到了原因,希望这能帮助到其他人。

ext4在该系统上启用了“屏障”,导致小写入变得非常慢。这样的写入对于数据库文件来说是正常的。

禁用屏障会提高性能,并且相同的SQL转储将在8分钟内加载(这比加载速度快4倍)。

代码语言:javascript
复制
mount -o remount,barrier=0 /

禁用障碍会有fs完整性的缺点,所以首先考虑一下.

票数 2
EN

Stack Overflow用户

发布于 2012-11-14 14:59:47

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

代码语言:javascript
复制
!includedir /etc/mysql/conf.d/

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

基本优化.base:

代码语言:javascript
复制
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13376906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档