用C#写了个收集网页信息的小程序,基本思路是以正则表达式批量抓取网页数据,存储为CSV文件,边抓取边循环用BULK INSERT批量导入SQL SERVER 2005中去。
印象中BULK INSERT效率是很高的即使百万数量级的记录也可以在30秒内全部导入完毕。但是这个程序的实际运行结果却让我大跌眼镜,根据SQL Server Profiler跟踪的结果,每次导入0至2000条记录情况下,BULK INSERT的执行效率约是400毫秒至20秒!粗略估计平均执行效率在4秒钟左右,仅极个别情况时间少于100毫秒。
已用HDTUNE查硬盘性能基本正常,磁盘测试平均值89M/S,突发数据传输率180M/S,后台除360安全卫士、ZONEALARM、MACFEE
外基本未开其他程序。数据库日志记录模式已改为“简单”。要插入的表只包含3个非聚集索引。断点调试程序,发现程序暂停时,有时也出现硬盘灯常亮15秒以上情况,任务管理器监控到是sqlservr.exe在作大量I/O写入操作,怀疑是后台写日志影响SQL脚本的正常执行。
这个问题已困扰我2个月之久,实在找不到原因,请大家一同分析探讨,如蒙指教,感激不尽。分数不多,全部敬上,请有缘人笑纳!
C#中的SQL脚本如下:
SqlStr = "BULK INSERT "+TbName
+" FROM '"+Fname+"'"
+" WITH (FIELDTERMINATOR='\t',ROWTERMINATOR='\r\n')";