首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假设有10^8行、10 DB的导入,是在单独的行上导入数据还是合并和分隔数据库中的行更好?

假设有10^8行、10 DB的导入,是在单独的行上导入数据还是合并和分隔数据库中的行更好?
EN

Stack Overflow用户
提问于 2013-12-10 00:30:02
回答 2查看 219关注 0票数 0

我正在做一个相当大的导入到一个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行。

EN

回答 2

Stack Overflow用户

发布于 2013-12-10 00:48:39

您要导入的数据在哪里?如果它位于另一台服务器上,则网络可能是瓶颈。然后,这取决于NIC的数量和帧大小。

如果它位于同一服务器上的上,则需要考虑批处理大小和影响日志文件的恢复模式。在完整恢复模式下,所有内容都写入日志文件。大容量复制恢复模式在日志中的开销较小。

由于这是暂存数据,因此可能在此过程之前进行完整备份,将模型更改为简单,然后导入可能会减少时间。当然,将模型更改回full并执行另一次备份。

至于一次导入多行的非规范化数据,我通常会避免额外的编码。

大多数时候,我使用SSIS包。更多的包,更多的线程,意味着更多的NIC管道。我通常至少有4 GB的背部骨骼,很少会填满。

其他要玩的东西是你的光盘。您是否有多个文件(路径路径)连接到RAID 5阵列?如果不是,您可能需要考虑一下。

简而言之,这真的取决于你的环境。

使用DMAIC工艺。

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2013-12-10 12:42:23

如果这是一次性的,并且是在脱机更改窗口中完成的..在插入数据之前,您可能需要考虑将数据库置于简单恢复模式。

请记住,这会打破日志链……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20475602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档