在我的cronjobs里面,我每天晚上都会做一个完整的mysqldump。
我的数据库在20个表中总共有1.5GB的数据。
几乎每个表都有索引。
我这样做备份:
mysqldump --user=user --password=pass --default-character-set=utf8 database
--single-transaction| gzip > "mybackupfile"
我做了两个月。这个过程需要将近1.5分钟,持续2个月。
上周我的主机公司更换了我的服务器。就在服务器更改之后,此进程开始长5分钟。我告诉服务器公司,他们把我的CPU从4GHz增加到6GHz,所以mysqldump进程变成了3.5分钟。然后增加到12ghz。但这并没有改变表演。
我用
hdparm
检查了我的共享SSD磁盘性能。每秒70兆字节。所以我再次抱怨。所以他们把我的硬盘换成了另一个。硬盘读取速度变为170 MB/秒。所以mysqldump进程变成了3分钟。但持续时间与之前的值相差甚远。性能下降的原因是什么?如何隔离问题?
(服务器为Centos 6.4,12 GHz CPU,8 GB RAM)
编辑:我的公司再次更换服务器,我仍然有同样的问题。旧服务器的备份时间为3,5分钟,而新服务器的备份时间为5分钟。结果文件压缩时为820 MB,解压缩时为2.9 GB。
我想知道是什么让这个垃圾堆变慢。
转储进程在11:24:32开始,11:29:40停止。你可以从截图的时间戳上查出来。
截图:
General
Consumed memory
Memory and CPU of gzip
Memory and CPU of mysqldump
Disk operations
hdparm
结果:/dev/sda2:
Timing cached reads: 3608 MB in 1.99 seconds = 1809.19 MB/sec
Timing buffered disk reads: 284 MB in 3.00 seconds = 94.53 MB/sec
/dev/sda2:
Timing cached reads: 2120 MB in 2.00 seconds = 1058.70 MB/sec
Timing buffered disk reads: 330 MB in 3.01 seconds = 109.53 MB/sec
最佳答案
很明显,我要看的是,最近几个月的数据量是否有所增加。大多数数据库驱动的应用程序随着时间的推移收集更多的数据,因此数据库会增长。如果您还有夜间备份的副本,我会查看文件大小,看看它们是否一直在稳步增长。
另一种可能是在备份时有其他进程执行读取查询。Mysqldump默认情况下会在数据库上创建一个读锁,以确保数据快照的一致性。但这并不妨碍读取查询。如果仍有查询在运行,这可能会争夺CPU和磁盘资源,并自然减慢速度。
或者在同一台服务器上除了MySQL之外还有其他进程在争夺资源。
最后,正如@andrew在上面评论的那样,在同一个物理服务器上可能有其他虚拟机在竞争物理资源。这超出了您的控制范围,甚至无法在虚拟机中进行测试。虚拟机的平衡分配取决于托管公司。
问题的开始与托管公司将服务器移动到另一台主机的时间相吻合,这就很好地证明了他们将您移动到了一台更繁忙的主机上。也许他们想把更多的虚拟机挤到一个主机上,以节省机架空间或其他东西。这不是StackOverflow可以为您解决的问题——您应该与托管公司联系。
在备份过程中,索引的数量或大小无关紧要,因为mysqldump只是从每个表中执行一个SELECT*操作,这是一个表扫描。这些查询不使用辅助索引。
如果您想要更快的备份解决方案,以下是一些解决方案:
如果所有表都是InnoDB,那么可以使用--single-transaction
选项,该选项使用事务隔离而不是锁定来确保一致的备份。那么3到6分钟之间的差别就不那么重要了,因为其他客户机可以继续读写数据库。(附:无论如何,你都应该使用InnoDB。)
带有--tab
选项的Mysqldump。这会将数据转储到制表符分隔的文件中,每个表一个文件。转储要快一点,但恢复要快得多。
Mydumper,mysqldump的开源替代品。这可以选择以多线程方式运行,并行备份表。参见http://2bits.com/backup/fast-parallel-mysql-backups-and-imports-mydumper.html了解一个好的介绍。
Percona XtraBackup执行物理备份,而不是mysqldump或mydumper之类的逻辑备份。但它通常比逻辑备份快。它还避免了锁定InnoDB表,因此您可以在客户端读写时运行备份。PerconaXtrabackup是免费的开源软件,它可以与普通的MySQL社区版一起使用,也可以与PerconaServer、MariaDB、甚至是Drizzle等所有变体一起使用。Percona XtraBackup是为InnoDB优化的,但它也可以与MyISAM和任何其他存储引擎一起工作(但它必须在备份非InnoDB表时进行锁定)。
关于mysql - Mysqldump性能下降,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24588999/