INSERT...SELECT * FROM OPENROWSET(BULK...) 的局限性?

wxylvmnn 2016-07-11 01:35:55
作为系统联动的一部分,
从别的系统传过来的24个txt文本数据,每个文件的内容,最大可能在10万件左右。

现在同时,并行的,通过
INSERT...SELECT * FROM OPENROWSET(BULK...)
语句插入到work表中。

当然接下来,因为会有接下来的处理,把work表中的数据,再更新或者插入到其他的表里,所以work表设计了索引。

但是,
现在我们这边的DBA提出,
work表,不允许有主键和索引,原因是可能造成死锁。
理由是下面这个微软官方资料
https://technet.microsoft.com/zh-cn/library/ms186341(v=sql.105).aspx

头一次听说,虽然系统运行了半年多没发生过死锁,但看这个,貌似有潜在风险。
但索引要是删除了,接下来的处理,performance会很ugly,怎么办,克了。。。

大家有什么好的对策?请赐教哈。谢谢。。
...全文
267 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-07-11
  • 打赏
  • 举报
回复
优化大容量导入指南 https://technet.microsoft.com/zh-cn/library/ms177445(v=sql.105).aspx 最好是设置时间点把导入时间分开分批导
薛定谔的DBA 2016-07-11
  • 打赏
  • 举报
回复
参考:
kingtiy 2016-07-11
  • 打赏
  • 举报
回复
这是因为多个客户端同时导数据,且数据之前有交叉,才会导致死锁. 要么导入之前,禁用索引,导入后再启用.(需要重建索引) 要么,就用一个客户端(程序)导入
yooq_csdn 2016-07-11
  • 打赏
  • 举报
回复
没有索引insert应该更快啊,你在愁什么
shoppo0505 2016-07-11
  • 打赏
  • 举报
回复
引用 3 楼 wxylvmnn 的回复:
[quote=引用 1 楼 kk185800961 的回复:] 导入前禁用索引,导入后重建索引。
DBA那边说的, 具体的不是很清楚,听说好像目前的执行用户需要加什么权限才可以这样。我们这些码奴不是很清楚他在说啥。。 我是没想到, bulk的并发性居然会有这种潜在风险, 但咋从来没实际发生过?微软的东西真不靠谱,问题发生居然还带偶然性?有些意外。。。[/quote] 这种问题很正常,目前来说也是无法解决的. 如果确实是如你所说并发的,那出于安全考虑,还是按照1楼说的做吧.
wxylvmnn 2016-07-11
  • 打赏
  • 举报
回复
引用 2 楼 shoppo0505 的回复:
造成死锁的原因是由大容量并发加载流导致,也就是说如果你的导入操作不是并发的,就不会有问题
现状是并发执行的。。
wxylvmnn 2016-07-11
  • 打赏
  • 举报
回复
引用 1 楼 kk185800961 的回复:
导入前禁用索引,导入后重建索引。
DBA那边说的, 具体的不是很清楚,听说好像目前的执行用户需要加什么权限才可以这样。我们这些码奴不是很清楚他在说啥。。 我是没想到, bulk的并发性居然会有这种潜在风险, 但咋从来没实际发生过?微软的东西真不靠谱,问题发生居然还带偶然性?有些意外。。。
shoppo0505 2016-07-11
  • 打赏
  • 举报
回复
造成死锁的原因是由大容量并发加载流导致,也就是说如果你的导入操作不是并发的,就不会有问题
薛定谔的DBA 2016-07-11
  • 打赏
  • 举报
回复
导入前禁用索引,导入后重建索引。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧