有没有办法弄清楚为什么我的生产mysql这么慢?

时间:2013-02-15 06:55:02

标签: php mysql

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

我不知道它是否已连接,但几天前我还通过phpmyadmin导入了一个大型的sql文件,我认为它需要的时间比它应该的长。

可能是什么问题?

TIA!

3 个答案:

答案 0 :(得分:2)

除非你进行分析和EXPLAIN查询之类的东西,否则很难说。

但是有一些可能值得研究的可能性:

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

当然问题可能出在PHP方面,你不能确定它是否在数据库上,直到你确切地调查它在哪里放慢速度以及原因。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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