为什么我的perl脚本在Windows 8.1上很慢,在同一台机器上的8.0上很慢?

问题描述:

我有一个600行的perl脚本,不是我写的,而是与权限一起使用的,它解析一组xml文件并将它们插入到几个MySQL表中。五月左右,我首先在机器上运行了这个脚本,一切都很顺利。它对于我的目的来说足够快(每秒多次插入查询),效果很好。我最近获得了更多需要相同解析的数据,因此我将再次运行它。这一次,它是冰川慢 - 每个查询10-12秒。为什么我的perl脚本在Windows 8.1上很慢,在同一台机器上的8.0上很慢?

在此期间没有更换硬件;唯一重要的软件更改是“升级”到Windows 8.1,最初是8.0。这可能是问题的原因吗?任何人都知道我可能会如何解决这个问题?按照这样的速度,这需要花费三个月的时间才能完成。

我很高兴根据您的要求提供一些/所有脚本,以及您可能需要的任何其他细节。

在此先感谢!

+0

你的数据库有改变吗?检查触发器和索引。尝试手动插入一条记录 – bansi

+0

没有索引;其他表已更新,但没有结构性数据库更改;我不知道如何使用触发器,所以没有。当我可以(现在无法访问)尝试手动插入到这些表中时,但我会说从手动从.csv导入到同一数据库中的其他表上的运行速度与以前一样快,并且选择查询运行正常速度。 –

+0

我不认为Windows 8.1可以使perl脚本变慢。可能是XML文件的大小和脚本读取/解析它的方式。 – bansi

要诊断性能问题在你的脚本,可以考虑安装和使用工具,如下列:

  • Devel::NYTProf。这款出色的profiler工具包将向您显示您正在花费周期执行Perl代码的位置。按照设计,将在I/O上花费的时间(包括数据库调用)耗尽
  • DBI::Profile。这提供了多级调试分析,并可以显示每个数据库操作需要多长时间。它是Devel::NYTProf的优秀伴侣,易于使用。

如果既不Devel::NYTProf也不DBI::Profile显示热点在你的代码(在一个Perl计算或数据库查询/交易),那么你应该看看通过你的system电话或网络代码访问,看看那些是罪魁祸首。