3

我有一个解析 txt 文件并将数据写入 Mysql 表的 php 文件。xml 文件很大,超过 600 万行。我在家里的电脑上做了这个,整个过程大约花了六个小时。现在我试图在我的增强型专用服务器(32GB 内存)上做同样的事情,12 小时后,它几乎没有通过 10% 的记录。

不知道有没有连接上,不过前几天我也通过phpmyadmin导入了一个很大的sql文件,我觉得用的时间比应该的长多了。

可能是什么问题呢?

蒂亚!

4

3 回答 3

2

除非您进行分析和诸如 EXPLAIN 查询之类的事情,否则很难说。

不过,有一些可能值得研究:

  • 大量索引:如果您正在执行 INSERTS,则与您要插入的表关联的每个索引都需要更新。如果有很多索引,那么单个插入可以触发大量写入。您可以通过在开始之前删除索引并在之后恢复它们来解决此问题
  • MyISAM 与 InnoDB:前者往往更快,因为它为了速度而牺牲了特性。写入 InnoDB 表往往更慢。注意:我只是指出这是应用程序运行速度变慢的潜在原因,我不建议您将 InnoDB 表更改为 MyISAM!
  • 无事务:如果使用 InnoDB,您可以通过在事务中执行批量操作来加快批量操作。如果您不使用事务,那么您所做的每个 INSERT 都会有一个隐式事务。
  • PHP 机器和 SQL 服务器之间的连接:在测试中,您可能在同一个机器上同时运行 PHP 和 SQL 服务器。您可能一直通过命名管道或 TCP/IP 连接(开销更大)进行连接,但无论哪种情况,带宽实际上都是无限的。如果 SQL 服务器与运行 PHP 脚本的机器不是同一台机器,那么它将被限制在两者之间的连接中存在的任何带宽。
  • 并发用户:在任何给定时间,您都是测试 SQL 数据库的唯一用户。实时系统可能并且将有任意数量的附加用户连接并在给定时间运行查询。这会占用你的脚本时间,增加它的运行时间。您应该在晚上运行大型 SQL 作业,以免给其他用户带来不便,同时也让他们也不会剥夺您的性能。还有其他原因,但上述原因值得首先调查。

当然,问题可能出在 PHP 方面,您无法确定它是否在数据库中,直到您确切调查它在哪里变慢以及为什么变慢。

于 2013-02-15T07:32:17.860 回答
0

检查服务器上的 phpmemory_limit设置或 Mysql 缓冲区设置是否低于本地。

于 2013-02-15T07:46:55.803 回答
0

好吧,我最终按照此处的建议实施了对数据库设置的所有更改:http ://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/

现在数据库正在咆哮!我不确定究竟是哪个设置产生了影响,但它现在可以工作了,所以最重要的是!无论如何,你们所有人也给了我很好的建议,我会跟进的,所以谢谢!

于 2013-02-15T08:34:26.000 回答