繁体   English   中英

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

[英]SQL Server insert/Update/Delete and Select performance/deadlock suggestions

我面临着一项任务,我必须在.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版以来就受到支持,但是对于这个例子,我会保持简单。 搜索一下它可以决定哪一个可能是你的最佳选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM