【问题标题】:Does SQLBulkCopy dramatically increase the .mdf file size?SQLBulkCopy 是否会显着增加 .mdf 文件的大小?
【发布时间】:2009-04-17 11:05:52
【问题描述】:

我正在使用 SqlBulkCopy 类对 SQLServer DB 进行批量插入。

与数据库关联的 .mdf 文件的原始大小为 1508 Mb。

当我运行它时(在大约 400 万条记录的相同数据上):
BatchSize 为 100000,.mdf 的大小增长到 1661 MB。
BatchSize 为 1000000,.mdf 的大小增长到 1659 MB。

为什么会有这种变化?这么小的变化可以忽略不计,除了 当我的测试器以 100 的批量大小运行它(在相同数据上)时,.mdf 文件会疯狂增长,直到它用完所有可用的 20 个演出,然后由于可用空间不足而出错。

这是因为 SqlBulkCopy 分配了一些固定大小的块吗?
它在 BatchSizes > 100000 时工作正常,但我想了解这种奇怪行为/错误的根本原因。

【问题讨论】:

  • 您确定是 .MDF 增长而不是 .LDF(日志文件)吗?无论数据如何插入,我都希望数据文件的增长相似,但日志的工作方式可能会有所不同。
  • 这有没有想过?我遇到过类似的情况,我在增加 10GB 的数据库上使用大容量复制,但是在使用 SqlBulkCopy 添加数据后,mdf 文件增加了很多,以至于 46% 的文件大小是可用空间。 269,000 MB。这对我来说没有任何意义。

标签: sql-server sqlbulkcopy


【解决方案1】:

您的 mdf 文件是存储数据的位置 - 它应该会根据您的数据负载大致增长。但正如“ck”已经指出的那样 - SQL Server 允许您指定某种增长模式,例如每当您插入一行时,mdf 文件都不会逐字节增长。因此,根据您的设置,当它需要更多空间时,它的大小会“跳跃”。

这与您是使用常规 INSERT 语句还是 SqlBulkLoad 加载数据无关。

马克

【讨论】:

    【解决方案2】:

    这取决于数据库的增长设置。默认为增长 10%,但您可以设置为在填充时增长 1GB 等。

    【讨论】:

      【解决方案3】:

      通过批量加载或“常规”加载加载数据会影响日志文件的大小,而不是 MDF 文件(数据库必须处于简单或批量日志恢复模式,还有一些其他要求) 您确定测试人员的日志文件没有用完所有可用空间吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        相关资源
        最近更新 更多