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

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

我们有一个使用ASP.NET MVCSQL Server 2008的网站,并且使用的是默认的Transactionscope隔离级别,该级别是Serializable。但是,如果打开了任何事务,这会使应用程序无法使用,因为我们有一个几乎所有东西都在使用的表,它的运行方式类似于

select * from table1 where id = 1

因此,我认为执行上述操作会锁定整个表。

我一直在阅读有很多事务的Web应用程序的最佳选择。

我在Snapshot隔离级别上有点卖。可以提供最好的一切:
  • 通过抛出错误更改读取数据时的数据保护。
  • 还允许读取事务中的数据。

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

    编辑:
    默认隔离级别来自transactionscope,只是为了阐明为什么我提到了可序列化为默认值。

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

    最佳答案

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

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

    可串行化的隔离级别通常是方法过度使用,真正的性能消耗。提交的读操作(简单,没有快照)是不错的选择,但由于它会阻塞读取与写入操作,因此可能会引起问题。

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

    相关文章:

    Sql Server 拆分和连接

    sql - VB中从SQL Server到Excel的海量数据导出

    .net - 如何知道使用 mysql 和 .Net 仍然打开的连接数?

    .net - 无法使用VB.NET和SSH.NET连接到SSH/SFTP服务器-但是WinSCP和FileZilla可以连接

    sql - 将每个 SQL 查询记录到 Rails 中的数据库中

    python - 查询集 : LEFT JOIN with AND

    c# - 带有 Observable 的复杂流

    c# - 在读取内容之前从套接字接收全部数据

    php - 如何将用户计算机名存储在数据库中?

    sql - 无法构造数据类型日期时间,某些参数的值无效