System.Web.HttpUnhandledException: 发生类型为 System.Web.HttpUnhandledException 的异常。 ---> System.Data.SqlClient.SqlException: 事务(进程 ID 123)与另一个进程被死锁在 线程 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
System.Web.HttpUnhandledException: 发生类型为 System.Web.HttpUnhandledException 的异常。 ---> System.Data.SqlClient.SqlException: 事务(进程 ID 122)与另一个进程被死锁在 线程 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
System.Web.HttpUnhandledException: 发生类型为 System.Web.HttpUnhandledException 的异常。 ---> System.Data.SqlClient.SqlException: 事务(进程 ID 109)与另一个进程被死锁在 线程 | 通信缓冲区 资源上,并且已被选作死锁牺牲。请重新运行该事务。
109的最先运行 122的是后面,以上3个错误 为不同用户操作
数据库是2005
是用.NET的WEB程序 查询统计报表的时候 发生此问题数据库查询语句用的是EXCE(@变量+@变量+@变量)实现
查询 也没用到事务
并且也设置了数据库隔离级别 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
查询最终的 也带了with (nolock)
FROM SaleInfo with (nolock)
LEFT JOIN FH ON FH.FMemo = SaleInfo.FMemo and FH.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN WFH ON WFH.FMemo = SaleInfo.FMemo and WFH.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN TH ON TH.FMemo = SaleInfo.FMemo and TH.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN DZ ON DZ.FMemo = SaleInfo.FMemo and DZ.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN DisDZ ON DisDZ.FMemo = SaleInfo.FMemo and DisDZ.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN DisDZShiDianFh ON DisDZShiDianFh.FMemo = SaleInfo.FMemo and DisDZShiDianFh.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN DisDZShiDianTh ON DisDZShiDianTh.FMemo = SaleInfo.FMemo and DisDZShiDianTh.FBigBookType = SaleInfo.FBigBookType LEFT JOIN DisDZTH ON DisDZTH.FMemo = SaleInfo.FMemo and DisDZTH.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN HK ON HK.FMemo = SaleInfo.FMemo and HK.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN CS ON CS.FMemo = SaleInfo.FMemo and CS.FBigBookType = SaleInfo.FBigBookType
LEFT JOIN DisHK ON DisHK.FMemo = SaleInfo.FMemo and DisHK.FBigBookType = SaleInfo.FBigBookType
很急 哪位大大帮个忙
解决方案 »
- 每个姓名所属日期往前推5天,得出自己目前是第几个(HEROWANG帮忙解决后发现新问题)
- 多人开发系统,数据库方面的改动如果管理
- 怎么来计算两个时间字段间的间隔天数?
- 一對多關係中的子表關聯字段能否自動增加
- ADO是否支持这样的sql语句
- reporting server如何显示raiserror中的信息
- 完全备份和增量备份写在同一个文件中,恢复时怎样操作?
- 有一个关于sql server的问题,大家帮助看看?
- 请教在VB中执行SQl语句的问题!急!!!!
- 高手请进:SQL SERVER数据库连接和线程问题
- 子查询中返回多个sum值的sql语句怎么写?(access)
- sqlserver与oracle的数据同步问题
本身会造成脏读,先确认一下这是业务需求所允许的吗?
既然允许READ UNCOMMITTED,那么就简单了,
所有连线都用READ UNCOMMITTED,就不会产生死锁了.如果不允许脏读,那要从以下方面解决
1.建索引加快查询速度,尽量避免查询时间交叉.
2.是否LOCK_TIMEOUT设置过短,查询超时造成死锁.
3.也可能是其他连线隔离级别不当造成LOCK.
4.借助SQL Profiler分析死锁的具体原因.
其实 按里说 做报表 最好要等系统 无人 使用或关账了 才准确
但是 。。 所有的都要加 工作量太大了 而且 有的查询必须是可提交读谢谢 暂时将数据库服务器重启了下 就行了
使用 SQL Profiler 没看到 死锁进程啊
做报表要避免产生大量锁定的话,
可参考SQL2008的数据库快照功能.
05好像也有数据库快照吧 不过 一直没使用这个功能过
谢谢提醒 看下MSDN WEBCAST视频去
屏蔽了这个 就没了原来 是用 LEFT JOIN 关联 IS NULL 取代 NOT IN 写法
不过 LEFT JOIN 有点多 看起来复杂点
后来 改成了 NOT IN
暂时屏蔽了那个子查询语句我原本 是用LEFT JOIN 关联的方式 替代 NOT IN
来提高查询性能
后来升级 为了维护方便 又改成了NOT IN
谢谢
例如: select ... from ... not in / left join ...记得NOT IN的写法,对SQL执行性能不利.
至于是不是这样,还等高手来解答.
NOT IN 还是表扫描吧 用不到索引
查询数据在200多W条
数据出不来
不知道 是否 能导致那个 错误