我正在做一个相当大的导入到一个SQL数据库,10^8+项目,我正在做这件事与一个批量插入。我很想知道,通过将多行数据作为单行导入并在导入后拆分它们,是否可以提高批量插入的运行速度?
如果导入数据的时间由数据本身的绝对容量定义(即,10 10),那么我预计导入10^6行与导入10^2合并数据所需的时间大致相同。
但是,如果导入时间更多地受到行操作和每行日志记录的限制,而不是受到数据本身的限制,那么我认为合并数据将会带来性能上的好处。但是,我不确定如果以后必须分解数据库中的数据,这种情况会如何进行。
有没有人有这方面的经验,可以说明具体可以做些什么来减少批量插入时间,而不是简单地添加时间来拆分数据库中的数据?
对于10 DB的导入,是在单独的行上导入数据还是合并和分离数据库中的行更好?
编辑我在一台具有8 8GB或RAM和300MB/秒读/写磁盘(条带化阵列)的Quad 2.5GH上进行了测试。文件托管在相同的阵列中,平均行大小有所不同,有些行包含大量数据(> 100KB),许多行包含100B以下的数据。
我已经将我的数据分成了100 MB的文件,大约需要40秒才能导入文件。每个文件有10^6行。
发布于 2013-12-10 00:48:39
您要导入的数据在哪里?如果它位于另一台服务器上,则网络可能是瓶颈。然后,这取决于NIC的数量和帧大小。
如果它位于同一服务器上的上,则需要考虑批处理大小和影响日志文件的恢复模式。在完整恢复模式下,所有内容都写入日志文件。大容量复制恢复模式在日志中的开销较小。
由于这是暂存数据,因此可能在此过程之前进行完整备份,将模型更改为简单,然后导入可能会减少时间。当然,将模型更改回full并执行另一次备份。
至于一次导入多行的非规范化数据,我通常会避免额外的编码。
大多数时候,我使用SSIS包。更多的包,更多的线程,意味着更多的NIC管道。我通常至少有4 GB的背部骨骼,很少会填满。
其他要玩的东西是你的光盘。您是否有多个文件(路径路径)连接到RAID 5阵列?如果不是,您可能需要考虑一下。
简而言之,这真的取决于你的环境。
使用DMAIC工艺。
1 - Define what you want to do
2 - Measure the current implementation
3 - Analyze ways to improve.
4 - Implement the change.
5 - Control the environment by remeasuring.
Did the change go in the positive direction?
If not, rollback the change and try another one.重复该过程,直到达到所需的结果(定时)。
祝你好运,J
发布于 2013-12-10 12:42:23
如果这是一次性的,并且是在脱机更改窗口中完成的..在插入数据之前,您可能需要考虑将数据库置于简单恢复模式。
请记住,这会打破日志链……
https://stackoverflow.com/questions/20475602
复制相似问题