我现在一直在等待36小时,以用简单的简单导入12 GB .SQL文件 type site.sql | mysql 命令。我可以看到 ibdata1 正在增长,目前将近40 GB。

考虑到触发器和存储过程在.sql的末尾,我只认为MySQL应该添加数据和密钥索引。

使用来自另一台服务器的此命令生成site.sql:

mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers

什么要花这么长时间?

有帮助吗?

解决方案

尝试这个:

$ ps -ef|grep [m]ysql

然后确定过程ID

$ strace -cp <pid>

离开10秒或一分钟 ^C. 。这会告诉您该过程在哪里花费时间,例如,如果您看到的话,它可能只是在等待磁盘 readwrite 支配。

其他提示

您是否有任何InnoDB表和主键

  1. 包含多个列?
  2. 有一个宽阔的瓦尔查尔奇?
  3. 还有很多非唯一索引?
  4. 一个或多个具有宽钥匙的非唯一索引?

这些条件中的任何一个可能会导致您的索引中的大BTREE节点在每个BTREE节点中都有很少的叶子。主键中的群集键也附加到非聚集密钥中的每个非唯一键条目。

另一个考虑因素:InnoDB数据页面的总和是否明显少于InnoDB索引页面?

您可以通过此查询(在MB中)找到该问题:

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

其他考虑因素:您是否正在加载DB服务器中启用了二进制记录?如果是,请在您正在加载的服务器上执行此操作:

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

我希望这有帮助 !!!

您确定您正在阅读的表是否没有触发器,索引和约束?您正在运行什么硬件和操作系统?您的存储如何配置?

我更熟悉Oracle,但是在没有触发器,索引和约束的情况下,12G导入了200GB/h。一个单个扳机可以将过程变成蜗牛,具体取决于触发器的作用...

我希望这有帮助

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top