我正在使用SqlBulkCopy类对SQLServer数据库进行批量插入。
与DB关联的.mdf文件的原始大小为1508 Mb。
当我运行它(在大约400万条记录的相同数据上)时:
BatchSize为100000,.mdf的大小增加到1661 MB
BatchSize为1000000,.mdf的大小增加到1659 MB。
为什么会出现这种变化?这样一个小的变化可以忽略不计,除了当我的Tester运行它(在相同的数据上)批量大小为100时,.mdf文件疯狂地增长,直到它耗尽所有可用的20个演出,然后由于缺乏可用空间而导致错误。
这是因为SqlBulkCopy有一些它分配的固定大小的块吗? 它的工作正常与BatchSizes> 100000,但我想了解这种奇怪的行为/错误的根本原因。
答案 0 :(得分:3)
您的mdf文件是存储数据的位置 - 它应该根据您的数据负载大致增长。但正如“ck”已经指出的那样 - SQL Server允许您指定某种增长模式,例如:每当插入一行时,mdf文件都不会逐字节增长。因此,根据您的设置,当需要更多空间时,它将在大小上“跳跃”。
这与是否使用常规INSERT语句或SqlBulkLoad加载数据无关。
马克
答案 1 :(得分:1)
这取决于数据库的增长设置。默认值是增长10%,但是当填充等时你可以设置为增长1GB。
答案 2 :(得分:0)
通过批量加载或“常规”加载来加载数据会影响日志文件的大小而不会影响MDF文件(数据库必须处于简单或批量日志恢复模式,还有其他一些要求) 您确定测试人员的日志文件没有用完所有可用空间吗?