Plugin调用SQL存储过程导致死锁的问题
2013-05-04 17:08
260 查看
场景:1.有一个实体,如account
2.为实体注册一个后期事件的Plugin,该Plugin的Isolation Mode必须注册到None,如下图所示:
3.在SQL Server中创建一个存储过程,在存储过程中有一个SQL语句:select * from accountBase
问题描述:在account实体的后期事件的Plugin中调用该存储过程,CRM表单界面全部变为只读,且不可操作,跟踪数据库发现,数据库已发生死锁.
问题原因:MSCRM 2011的前期事件阶段和后期事件阶段是数据库事务的一部分,因此当在account实体的Plugin中调用包含访问account实体数据的SQL存储过程时,发生资源相互等待,引发死锁.
解决方案:
第1种:修改数据库表。为需访问的字段建立索引,索引的建立方法可查询相关资料,不建议使用此方案。
第2种:修改Plugin的Step的设置,将Execution Mode设置为Asynchronous,即异步执行Plugin。如下图所示:
2.为实体注册一个后期事件的Plugin,该Plugin的Isolation Mode必须注册到None,如下图所示:
3.在SQL Server中创建一个存储过程,在存储过程中有一个SQL语句:select * from accountBase
问题描述:在account实体的后期事件的Plugin中调用该存储过程,CRM表单界面全部变为只读,且不可操作,跟踪数据库发现,数据库已发生死锁.
问题原因:MSCRM 2011的前期事件阶段和后期事件阶段是数据库事务的一部分,因此当在account实体的Plugin中调用包含访问account实体数据的SQL存储过程时,发生资源相互等待,引发死锁.
解决方案:
第1种:修改数据库表。为需访问的字段建立索引,索引的建立方法可查询相关资料,不建议使用此方案。
第2种:修改Plugin的Step的设置,将Execution Mode设置为Asynchronous,即异步执行Plugin。如下图所示:
相关文章推荐
- 我也谈谈 代码调用存储过程超时,SQL Server Management Studio里运行很快的问题
- dblink远程库表结构修改导致本地库调用此表的存储过程出错问题解决方法
- 解决多线程调用sql存储过程问题
- 用XML和SQL 2000来管理存储过程调用
- 如何在VS2008中调用SQL存储过程?
- java.sql.SQLException: 关闭的连接问题及hibernate clob缓冲流存储的解决过程记录
- 连接英文字符集的ORACLE和调用存储过程问题及64位服务器连接ORACLE问题
- SQL 生成商品订单的存储过程 ,ADO.NET调用存储过程
- EXTASPNET C# ASP.NET sql server 调用存储过程超时,解决方法
- PL/SQL Developer中,存储过程无法调试的问题解决办法
- 数据库笔试面试42——SQL标准中用来调用存储过程的
- SQL和存储过程的结果不一致——小议Oracle的number精度问题
- SQL存储过程游标调用存储过程示例
- 用XML和SQL 2000来管理存储过程调用
- 步步为营VS 2008 + .NET 3.5(10) - DLINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除
- DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
- DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
- ASP.NET中调用SQL存储过程
- sql的存储过程调用
- 多线程调用存储过程问题