1

我的 MySQL 恢复速度似乎很慢,并且正在寻找一些调整建议(我是 PostgreSQL 和 SQL Server 的人)。

开发服务器有 48GB 的​​ RAM,8 个内核,运行 Centos 6.2 64 位和 MySQL 5.1.61(与生产 MySQL 相同),以及软件管理的 RAID-10 / XFS 中的 4 x 7200 RPM SAS 驱动器。唯一的 MySQL 客户端进程是还原。转储是使用生产服务器上所有数据库的普通 mysqldump 进行的。

我已经应用了http://derwiki.tumblr.com/post/24490758395/loading-half-a-billion-rows-into-mysql中的一些选项,包括将 FOREIGN_KEY_CHECKS 和 UNIQUE_CHECKS 设置为零。我在下面包含了 my.cnf。

使用 mytop 和 pv (pv backup.sql | mysql -u root -p) 监控恢复,INSERT INTO 语句似乎开始逐渐变慢。mytop 显示的 qps 从 3 开始,通过转储文件在 60% 时下降到 0。不确定在这种情况下 mytop 有多准确,因为 3 次插入(带值)似乎仍然很慢。htop 显示 MySQL 使用的 CPU 的 CPU 利用率 < 10%,并且使用了不到 8GB 的​​ 48GB RAM。

不同的数据库,但相似的恢复技术,在使用 PostgreSQL 的同一台服务器上运行速度大约快 5-10 倍。

想法?

[mysqld]
# my.cnf
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
slow-query-log
long_query_time = 60
log-slow-admin-statements
slow_query_log_file = /var/log/mysql_slow.log
innodb_buffer_pool_size = 2G
max_allowed_packet = 1G
key_buffer_size = 1G
concurrent_insert = 1
innodb_flush_log_at_trx_commit = 2
bulk_insert_buffer_size = 1G
innodb_flush_method = O_DIRECT
4

1 回答 1

1

听起来您的 innodb 索引正在减慢您的速度。如果可以更改转储数据库的方式,则可以删除所有非主键索引加载数据然后重新添加它们。最好还是按主键排序要加载的数据。这可能问得太多了。

听起来您已经知道这些提示: http ://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

刷新到磁盘操作 ( innodb_flush_log_at_trx_commit = 2) 可能每秒发生多次。检查您的innodb_log_file_size*innodb_log_files_in_group是否足以避免过于频繁地写入磁盘。

(我假设您从设置中使用 Innodb)

于 2012-06-06T03:44:44.033 回答