首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以每秒数千次插入、更新和选择

以每秒数千次插入、更新和选择
EN

Database Administration用户
提问于 2011-01-21 22:48:44
回答 3查看 819关注 0票数 7

我有一个表,可以在一秒钟内从数千次中插入、更新和选择。不过,我有僵局问题。

  1. 数据库使用Linq同时插入2-5个1000+行。
  2. 每秒40次,该表中也有一条select语句,如果某个条件为真(95%的时间是这样的),则使用类似的代码进行更新:创建过程AccessFile ( @code,@admin)作为声明@id int,@访问日期时间,@file字符串选择@id=Id,@ @admin<> =@admin<>_@admin<>=@@admin<>0,如果@admin<>0为空,则设置事务隔离级别,读取未提交的更新文件,其中id = @id事务隔离级别读取提交的end选择@ Id,@file作为文件

似乎是与插入冲突的更新导致了死锁。

这个例子是1比1的存储过程,唯一的区别是名称。假设1和2,而不考虑存储过程的名称。

EN

回答 3

Database Administration用户

发布于 2011-01-21 23:44:55

将更新更改为与(ROWLOCK)一起使用。这将减少从页面级别到行级别的锁。您也可以在插入件上尝试同样的方法。

票数 2
EN

Database Administration用户

发布于 2011-01-22 02:06:35

您也可以在proc的开头尝试,将隔离级别设置为快照。欲了解更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms173763.aspx

您将在tempdb中为行版本控制付出一些代价。

票数 2
EN

Database Administration用户

发布于 2013-03-03 23:59:26

我会重新设计应用程序,这样行就可以成批保存。通常情况下,500到1000行的批处理对我来说很好,但是您需要运行自己的测试。在保存批处理之前,我将使用sp_getapplock序列化批处理更新。

当然,这种序列化会稍微降低修改的速度,但批量保存比对其补偿更多,所以总的来说,这样做的速度要快得多,逐行保存。

另外,我将使用快照隔离级别运行我的选择,这样它们就会被修改所阻止。

这样做了,您可能根本就没有死锁--我们的混合负载系统中没有死锁,您也可以这样做。

祝好运!

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

https://dba.stackexchange.com/questions/779

复制
相关文章

相似问题

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