我已经等待了 36 个小时,以便使用一个简单的type site.sql | mysql
命令导入一个 12 GB 的 .sql 文件。我可以看到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
什么要花这么长时间?
尝试这个:
然后识别进程ID
留 10 秒或 1 分钟
^C
。read
这将告诉您进程在哪里花费时间,例如,如果您看到并控制它,它可能只是在等待磁盘write
。你有没有主键的 InnoDB 表
这些条件中的任何一个都可能导致索引中的大型 BTREE 节点在每个 BTREE 节点中的叶子很少。主键中的集群键也附加到非集群键中的每个非唯一键条目。
另一个考虑因素:InnoDB 数据页的总和是否明显少于 InnoDB 索引页?
您可以通过以下查询(以 MB 为单位)找到它:
额外注意事项:您是否在正在加载的数据库服务器中启用了二进制日志记录?如果是,请在您正在加载的服务器上执行此操作:
我希望这有帮助 !!!
您确定您正在读取的表没有触发器、索引和约束吗?你在什么硬件和操作系统上运行?您的存储是如何配置的?
我对 oracle 比较熟悉,但是在没有触发器、索引和约束的表上导入 12G 应该很容易达到 200GB/h。一个触发器可以使进程变成蜗牛,这取决于触发器的作用......
我希望这有帮助