我的 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