加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – SQL Server插入/更新/删除和选择性能/死锁建议

发布时间:2020-12-15 20:54:15 所属栏目:百科 来源:网络整理
导读:我面临着一项任务,我必须在.net框架中设计一个Web应用程序.在这个应用程序中,用户只能(99%的时间)具有只读访问权限,因为他们只会看到数据(SELECT). 然而,后端数据库将成为每分钟更新/插入/删除记录的野兽.预测是,在一年内,系统中将有大约1000万条记录添加到
我面临着一项任务,我必须在.net框架中设计一个Web应用程序.在这个应用程序中,用户只能(99%的时间)具有只读访问权限,因为他们只会看到数据(SELECT).

然而,后端数据库将成为每分钟更新/插入/删除记录的野兽.预测是,在一年内,系统中将有大约1000万条记录添加到系统中,总共少于5个表.

问题/要求1:

由于这些更新/插入将非常频繁地发生(每分钟或最近2次),我希望得到一些提示,以便在更改某些行时,选择查询可能不会导致线程死锁,反之亦然.

问题/要求2:

我的计算猜测是,在正常情况下,每分钟24/7只会插入几百条记录(并根据某些条件更新/删除).如果我编写一个C#工具,它将从任意数量的源(xml,csv或直接来自远程数据库的某些表中获取数据,配置文件或注册表设置将决定从哪种格式导入数据)然后执行插入/更新/删除,这是否足够快和/或将导致死锁问题?

我希望我的问题足够详细……如果这一切都含糊不清,请告诉我……

提前致谢

解决方法

我将首先回答你的问题#2:根据你所描述的情景,它会足够快.但请记住向数据库发出直接sql命令.我个人有一个非常非常类似的场景,应用程序运行没有任何问题,但是当一个预定的作业执行多次插入/删除工具(如nhibernate)时,会发生死锁.所以,再次,如果不可能,执行直接的sql语句.

问题#1:您可以使用“SELECT WITH NOLOCK”.

例如:

SELECT * FROM table_sales WITH (NOLOCK)

它避免了数据库上的块.但是你必须记住,你可能正在阅读一个过时的信息(再一次,在你描述的场景中可能不会有问题).

您也可以尝试“READ COMMITTED SNAPSHOT”,它自2005版以来就受到支持,但是对于这个例子,我会保持简单.搜索一下它可以决定哪一个可能是你的最佳选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读