上記の記事のトランザクション、ロック、ブロック、そして最終的にはより多くの極端な場合があるが、ロックされているデッドロック、である、状況がブロックされました。
2つのトランザクションがロックされたリソースだったときデッドロックはあるが、得られた他のリソースを要求し続け、それがデッドロックを生成します。
:デッドロックがあるために発生し
別のテーブルにA、シーケンシャルアクセスセッション。
B、セッションは、このように、競合の可能性を高め、取引、1つのトランザクションで更新またはテーブル行の多くを長時間実行します。
C、セッション1は、テーブルロックにエスカレートことを決めた、いくつかの行ロックを適用するために、セッション2をいくつかの行ロックを適用します。
これらの行に同じデータページ、及び2つのセッションが同じページ上でロックの粒度をアップグレードする場合は、それがデッドロックします。
1、セッション1
-
set lock_timeout
1000
-
--跟踪死锁--会话1
-
set
transaction
isolation
level
serializable
-
-
begin tran
-
-
update t
-
set v =
'563'
-
where idd =
2
-
-
waitfor delay
'00:00:10'
-
-
update t
-
set v =
'963'
-
where idd =
1
-
-
COMMIT
2、セッション2
-
set
transaction
isolation
level
serializable
-
-
begin tran
-
-
update t
-
set v =
'234'
-
where idd =
1
-
-
waitfor delay
'00:00:10'
-
-
update t
-
set v =
'987'
-
where idd=
2
-
-
commit
3、その後、会話を開き、オープントラック
オープントレースフラグ:
DBCC TRACEON(トレース#[、... N-]、 - 1。)[NO_INFOMSGS付き]
1を確認するか、いくつかのフラグがオンまたはオフである:
DBCC TRACESTATUS(トレース#[、... N-]、 - 1。)[NO_INFOMSGS付き]
1.trace番号:もっとオープンにするか、トレースフラグ桁の状態をチェックする必要の一つまたは指定した
グローバルオープンな場所1またはいくつかのトレースフラグを指定した場合-1:2 -1を
3.withのNO_INFOMSGSを:このパラメータがコマンドで含まれている場合、DBCC出力メッセージが禁止されています
-
-
--跟踪1222能把详细的死锁信息返回到SQL Server的日志中
-
--标志位-1表示跟踪标志位1222应该对所有SQL Server连接全局启用
-
DBCC TraceOn(1222,-1)
-
go
-
-
--验证标志位是否启动
-
DBCC TraceStatus
-
go
-
-
--关闭标志位
-
DBCC TraceOff(1222,-1)
-
go
デッドロックランニングに終了されるクエリセッションを調整し、デッドロックの優先順位を設定する可能性 - 4、デッドロックの優先順位を設定
SET DEADLOCK_PRIORITY低| ノーマル| 高いです| 数値の優先順位
-
--是当前连接很有可能被终止运行
-
set deadlock_priority
Low
-
-
--SQL Server终止回滚代价较小的连接
-
set deadlock_priority
Normal
-
-
--减少连接被终止的可能性,除非另一个连接也是High或数值优先级大于5
-
set deadlock_priority
High
-
-
--数值优先级:-10到10的值,-10最有可能被终止运行,10最不可能被终止运行,
-
--两个数字谁大,谁就越不可能在死锁中被终止
-
set deadlock_priority
10