我们中的许多人正在从事其家庭或宠物项目,并且使用数据库来存储结构化数据时,在尝试转储/还原数据时可能会遇到性能问题。只是坐下来等待数十分钟甚至数小时的另一个转储还原操作可能会很烦人。
我有非常典型的机器规格-4核心i5 7300、8 Gb RAM,相当快的M2驱动器和Windows 10 / MySQL 5.7。
问题是尝试还原〜4.5Gb文件花费的时间超过4小时。这太荒谬了,我想知道mysqld
进程是否没有使用一半的系统资源-CPU /内存/磁盘I / O
一般而言,该帖子是有关问题的某种摘要,包括我在下面发表的许多其他帖子的鸣谢
答案 0 :(得分:1)
我使用MySQL参数进行了许多实验,以实现更好的转储还原操作
+--------------------------------+---------+---------+-----------------------+---------------------+
| Parameter | Default | Changed | Performance (minutes) | Perfomance gain (%) |
+--------------------------------+---------+---------+-----------------------+---------------------+
| All default | - | - | 259 min | - |
| innodb_buffer_pool_size | 8M | 4G | 32 min | +709% |
| innodb_buffer_pool_size | 4G | 6G | 32 min | ~0% |
| innodb_log_file_size | 48M | 1G | 11 min | +190% |
| innodb_log_file_size | 1G | 2G | 10 min | +10% |
| max_allowed_packet | 4M | 128M | 10 min | ~0% |
| innodb_flush_log_at_trx_commit | 1 | 0 | 9 min 25 sec | +5% |
| innodb_thread_concurrency | 9 | 0 | 9 min 27 sec | ~0% |
| innodb_double_write | - | off | 8 min 5 sec | +18% |
+--------------------------------+---------+---------+-----------------------+---------------------+
摘要(以获得最佳的转储还原性能):
innodb_buffer_pool_size
设置为RAM的一半innodb_log_file_size
设置为1G innodb_flush_log_at_trx_commit
设置为0 innodb_double_write
,应在生产时将其启用。我还发现,更改另一个相关参数innodb_flush_method
不会改变性能。但这可能是Windows平台的问题。innodb_thread_concurrency
设置为0(并且还将innodb_read_io_threads
设置为最大值64)来提高CPU利用率,但是结果没有改变-看来{{1 }}对于多核环境而言,该过程已经非常有效。我还更改了许多其他参数,但到目前为止,这些参数与转储还原操作最相关。
看似显而易见,但新手问题可能是-在哪里可以找到并设置这些设置?
在Windows中,mysqld
文件位于my.ini
。您不会在其中找到某些设置(例如ProgramData/MySQL/MySQL Server <version>/my.ini
)-没关系,只需添加到文件末尾即可。
更改设置的最佳方法是使用MySQL Workbench(innodb_double_write
)。
我将功劳归功于以下帖子(以及很多类似的帖子),我认为它们非常有用:
https://www.percona.com/blog/2018/02/22/restore-mysql-logical-backup-maximum-speed/ https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/ https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html https://dba.stackexchange.com/questions/86636/when-is-it-safe-to-disable-innodb-doublewrite-buffering https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html