zoukankan      html  css  js  c++  java
  • 数据库中的锁

    • EF操作数据库有时会出现如下异常
      • 从存储区提供程序的数据读取器中进行读取时出错...........事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
      • 原因:通过EF操作数据库时发生了死锁,这有可能是因为数据库同时有数据库同步、OGG等事务进程在进行。
      • 解决方法:
        • 貌似只能缓解
        • 如果业务上允许部分数据的脏读(不及时)
          • EF读数据时允许读取脏数据
            •  1 public static List<T> ToListReadUncommitted<T>(this IQueryable<T> query)
               2         {
               3             using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
               4             {
               5                 List<T> toReturn = query.ToList();
               6                 scope.Complete();
               7                 return toReturn;
               8             }
               9         }
              10 
              11         public static int CountReadUncommitted<T>(this IQueryable<T> query)
              12         {
              13             using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
              14             {
              15                 int toReturn = query.Count();
              16                 scope.Complete();
              17                 return toReturn;
              18             }
              19         }
              View Code
          • sql查询增加nolock
          • 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST,NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。NOLOCK 可能把没有提交事务的数据也显示出来.READPAST 会把被锁住的行不显示出来。不使用NOLOCK 和 READPAST ,在 Select 操作时候则有可能报错误:事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。

  • 相关阅读:
    计算机专业术语中英对照
    PhpStorm如何下载github上的代码到本地
    PDO学习
    Shell中特殊的变量
    Shell中变量的使用
    修改cmd的字体
    Shell的输入输出
    Shell入门第一课
    设计模式--观察者(Observer)
    eclipse中使用git提交代码到github
  • 原文地址:https://www.cnblogs.com/wyp1988/p/9927926.html
Copyright © 2011-2022 走看看