懂的入-->关于如何提高BULK INSERT的执行效率问题
用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脚本如下:
印象中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')";
...全文
相关推荐
使用BULK COLLECT, MERGE 语句提高sql执行效率
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
SQL Server中高效数据导入:使用BULK INSERT命令
是SQL Server提供的一种高效的数据导入方式,允许用户将存储在操作系统文件中的数据批量导入到数据库表中。此功能特别适合进行大规模数据迁移或初始化数据库操作,相较于逐条插入数据,能够显著提高导入性能。对于复杂的数据导入,使用格式文件可以更好地控制导入过程,尤其是当数据文件的结构和目标表不完全匹配时。格式文件定义了数据文件的布局和如何将这些数据映射到目标表的字段。格式文件可以是XML格式或非XML格式。以下是创建一个简单的XML格式文件format.xml的例子:<RECORD>
SQL SERVER BULK INSERT用法
SQL SERVER BULK INSERT用法
使用BULK INSERT大批量导入数据 SQLSERVER
使用BULK INSERT大批量导入数据 SQLSERVER,需要的朋友可以参考下。
elasticsearch-bulk-insert-plugin-8.2.0.0-342.zip
kettle8.2连接ElasticSearch7的插件,官方只支持连接ElasticSearch6


疑难问题
