【发布时间】:2015-04-29 18:35:43
【问题描述】:
我正在尝试将一个大对象插入到单个数据行中。当对象的大小变大时,我会遇到超时。
对象中的一个属性是byte[]。该对象只有几个属性,其余为int。
目标表有一个varbinary(max) 类型的列来保存byte[] 属性。插入是通过存储过程完成的,包装在事务中,并使用 ROWLOCK 提示进行插入(此表目前仅在本地存在,因此此时锁定不应该成为问题。)
当byte[] 包含最多约 200MB 的数据时,插入工作正常。在那之后,它变得非常丑陋并开始超时(内存可能不是我机器上的问题)。
我已将数据库的设置更改为自动扩展 500MB,并将恢复模式设置为简单。这笔交易应该非常快,但似乎某处存在瓶颈。
对于数据库更改或将大型对象写入varbinary 列的替代方法有什么想法吗?谢谢!
【问题讨论】:
-
您是否尝试为连接设置适当的timeout 值?
-
@MehrzadChehraz - 超时设置为 45 秒。
-
而你增加了超时值,命令仍然无法执行?
-
只是为了测试,我将超时设置为 5 分钟。仍然超时。
-
200MB 的数据太多,无法在 SQL 中保存。使用正确的超时,它可能会起作用,但从逻辑上讲,它看起来是个坏主意。为什么不将其存储在文件中并将文件名放入数据库中?顺便说一句,你在使用 FILESTREAM varbinary 吗?
标签: c# sql sql-server-2008