首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高MySQL转储恢复的性能

如何提高MySQL转储恢复的性能
EN

Stack Overflow用户
提问于 2019-12-18 12:01:11
回答 1查看 5.7K关注 0票数 6

我们中许多从事家庭或宠物项目并使用数据库存储结构化数据的人在尝试转储/恢复数据时可能会遇到性能问题。坐着等待另一次转储恢复操作几十分钟甚至几个小时都会让人讨厌。

我有相当典型的机器规格-4核心i5 7300,8GB内存,相当快的M2驱动器和Windows10/MySQL5.7。

问题是,要恢复~4.5Gb文件,需要花费更多的,而不是4小时的。这太荒谬了,我想知道mysqld进程是否甚至没有使用一半的系统资源-CPU/内存/磁盘I/O。

一般说来,这个职位涉及到一些相关问题的总结,包括我下面提到的许多其他职位的贷项。

EN

回答 1

Stack Overflow用户

发布于 2019-12-18 12:01:11

为了更好的转储恢复操作,我用MySQL参数进行了许多实验。

代码语言:javascript
复制
+--------------------------------+---------+---------+-----------------------+---------------------+
|           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%                |
+--------------------------------+---------+---------+-----------------------+---------------------+

摘要(最佳转储恢复性能)

  1. innodb_buffer_pool_size设置为半数的RAM
  2. Set innodb_log_file_size to 1G
  3. Set innodb_flush_log_at_trx_commit到0H 212H 113禁用innodb_double_write仅推荐用于最快性能的innodb_double_write,应该在生产中启用。我还发现,更改另一个相关参数innodb_flush_method并没有改变性能。但是,这可能是Windows的一个问题。如果您的结构复杂,有很多外键--例如,您可以尝试大容量加载environment.
  4. Restoring表的技巧,如您所见,页面
  5. 底部列出了链接,我试图通过将innodb_thread_concurrency设置为0(并将innodb_read_io_threads设置为最大64)来提高CPU利用率,但结果并没有改变--似乎mysqld进程对于仅用于多核InnoDB的数据(没有表结构)也是相当有效的。

我还更改了许多其他参数,但上述参数是迄今为止转储恢复操作中最相关的参数。

似乎很明显,但新手的问题可能是--我在哪里可以找到和设置这些设置

在Windows中,my.ini文件位于ProgramData/MySQL/MySQL Server <version>/my.ini。您不会在那里找到一些设置(比如innodb_double_write) --没关系,只需添加到文件的末尾即可。

更改设置的最佳方法是使用MySQL工作台(Server > Options file > InnoDB)。

我把我的学分花在了下面的文章(和许多类似的帖子)上,我发现这些帖子非常有用,

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

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59391611

复制
相关文章

相似问题

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