我有一个脚本,它读取一个带有3mb数据的文本文件并编写一个.sql文件来导入。为什么apache2服务器需要长达1.5小时才能写出一个6 MB的.sql文件
此文本文件正在上传到第三方的应用程序,每隔1小时尽管一天。
问题是这个脚本在我的本地PC中完成少于1分钟。但是当脚本在生产服务器上运行(这是4GB RAM,2核处理器的专用服务器)需要高达1.5小时小时。此脚本用于在相同环境下运行5分钟以下。
的文本文件ziped成.gz文件解所以我用gzopen
到oepn通过文件的文件和fgets
循环,并创建一个SQL字符串写入到一个.sql文件(以下是创造出来的字符串文本文件)
'INSERT INTO `table` (`col_1`,`col_2`,`col_3`,`col_4`,`col_5`,`col_6`,`col_7`,`col_8`,`col_9`,`col_10`,`col_11`,`col_12`,`col_13`,`col_14`,`col_15`,`col_16`)
VALUES
("'.implode('","',
array(
mysqli_real_escape_string($this->ds,$trackNo),
mysqli_real_escape_string($this->ds,$ln[1]),
$dateReceived,
mysqli_real_escape_string($this->ds,$ln[2]),
$dateDelevered,
mysqli_real_escape_string($this->ds,$ln[3]),
mysqli_real_escape_string($this->ds,$ln[4]),
mysqli_real_escape_string($this->ds,$ln[5]),
mysqli_real_escape_string($this->ds,$ln[7]),
mysqli_real_escape_string($this->ds,$ln[8]),
mysqli_real_escape_string($this->ds,$ln[9]),
date(DATE_ISO8601,time()),
date(DATE_ISO8601,time()),
'system',
mysqli_real_escape_string($this->ds,$ln[4]),
'txt.gz'))
.'");'
这个字符串将由线写入.sql文件行中使用fwrite
的fgets
结束我不明白为什么这个过程需要这么长的时间,因为在我之前电脑完成2分钟以下
在某些日志文件或控制台的不同步骤中记录时间以知道哪一步花费了大量时间,读取,内爆,写入或其他内容 –
感谢您的快速回复。我会这样做,并带来结果。 – Tharindu
客观地看待问题,你可以做一些[规范化](http://en.wikipedia.org/wiki/Database_normalization)。备份你的数据库会更快。查看增量/部分备份解决方案也可能是一个好主意。 – psycotik