我发布了一个相关的问题在 askubuntu.com 上,但这可能是更好的提问地点和方式。
我正在研究一种加快数据库导入速度的方法。目前导入需要一周时间,或多或少几天,这是不可接受的,我知道它可以更快(从生产服务器转储数据只需不到一小时)。
我使用 设置的 ramdisk 上设置了一个 MySQL 数据库作为符号链接ramfs
,这就像 的无缓存版本tmpfs
。尽管硬盘和 RAM 之间存在性能差异,但我仍然只看到 40-190 QPS 之间。
该表是innodb。
我怎样才能加快导入速度?
我似乎在这个问题上得到了很多反对票,所以也许澄清我的意图会有所帮助:
- 这不是生产服务器
- 我有一个将 ramdisk 刷新到磁盘的系统,并且花了很多功夫设置它,以便我可以随意执行此操作
- 我的目标是能够在合理的时间内导入超过 800 万条记录。最好少于一周,这是我使用默认安装的 MySQL 所获得的性能。
答案1
这通常不是您设置数据库的方式。MySQL 会将其自身缓存到内存中。理想的做法是设置具有大量内存的 MySQL,以便它可以将表的索引缓存到内存中,这将加快查找速度并提高 QPS。
但是,如果您的 SQL 未经过优化并且未正确使用索引,那么您将无法增加 QPS,即使使用更快的驱动器也不行,因为在您的情况下,更快的驱动器是 ram fs。
有几件事需要你审查,
- 我的表格结构是怎样的?
- 不!!!-> SELECT * FROM ... <- 这会影响性能
- 我有正确的索引吗
- 我的繁忙表是否位于单独的磁盘卷上
- BINLOGS 在单独的磁盘卷上,INNODB 在单独的磁盘卷上
- VARCHARS = 糟糕的设计
最后,如果数据库的设计不适合当前的任务,那么优化它将会非常困难。