.net - Web 应用程序的最佳 SQL Server 隔离级别?

标签 .net sql sql-server tsql sql-server-2008

我们有一个使用 ASP.NET MVC 的网站和 SQL Server 2008 年,我们使用的是可序列化的默认事务范围隔离级别。但是,如果打开任何事务,它会使应用程序无法使用,因为我们有一个几乎所有东西都在使用的表,并且它运行起来像

select * from table1 where id = 1

所以我认为在执行上述操作时它会锁定整个表。

我一直在阅读对于具有大量事务的 Web 应用程序来说,什么是最佳选择。

我有点喜欢快照隔离级别。尽善尽美:

  • 通过抛出错误更改读取数据时的数据保护。
  • 还允许读取事务中的数据。

根据您的经验,Web 应用程序可以采用哪种隔离级别?

编辑: 默认隔离级别来自事务范围,只是为了澄清我为什么提到可序列化作为默认值。

我在这里阅读了很多博客和答案,建议使用 no_lock 进行选择,但如果你问我,那是一种 hack。在现实生活场景中,可能有 99.99% 的时间会没事。这对 Facebook、Twitter 或 Stack Overflow 来说是件好事。谁在乎数据是否损坏。但我的看法是,如果我们使用事务隔离,那么它必须是 100% 保证的架构。否则根本不要使用它,并使用触发器或其他东西添加一些其他数据完整性检查。

最佳答案

您应该在数据库中使用已提交的读取快照。此隔离级别提供最高程度的并发性,但代价是在更新期间维护版本存储。如果您的应用是读取密集型应用而不是 oltp 密集型应用,那么这种权衡是值得的。

如果您在数据库中启用了已提交读快照,则已提交读隔离下的事务将自动使用快照隔离。

可序列化的隔离级别通常是矫枉过正,一个真正的性能 pig 。读取已提交(简单,无快照)很好,但它可能会导致问题,因为它会阻塞读取与写入。

关于.net - Web 应用程序的最佳 SQL Server 隔离级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1662957/

相关文章:

sql - dense_rank 在 SQL 服务器上填充 tempdb?

sql-server - 如何将 Oracle TO_NUMBER 转换为 SQL Server

javascript - 从字符串 mssqlsequelize 转换日期和/或时间时转换失败

c# - WPF MVVM 设计 ViewModel

sql - 如何将特定行保留为查询 (T-SQL) 的第一个结果?

sql - 使用变量时的查询性能

mysql - 使用 COUNT 和 HAVING BY 的 SELECT 查询

.net - 为什么Winforms中的修饰符设置为Friend?

c++ - 在 VB.Net 中使用 C++ dll 时出现异常

javascript - 如何在启用 Windows 身份验证的情况下发送 API 请求?