teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

現状の報告

2017/07/09 12:18

投稿

chida3
chida3

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,15 @@
1
+ 2017/07/09
2
+ 下記3件の質問の内、1と2について回答が得られていないのですが、一旦質問をクローズいたします。
3
+ 理由としましては、
4
+ ・3の質問に関してご回答いただけたことで、対応策の事例収集という目的の一つは達せられたこと。
5
+ ・排他ロックについて異なる事象が発生し、1、2の質問から派生して調査等をおこなったほうがよさそうであること。
6
+ ・ただ、1、2に関して自分なりの調査・検証時間がしばらく確保できない見込みであること。
7
+ です。
8
+ ご回答いただいたお二方ありがとうございました。お礼が遅くなりすみません。
9
+ 今後、自分での調査・検証を進めることができましたら、追記等させていただきたいと思います。
10
+
11
+ ---
12
+
1
13
  SQL Serverを使用したWebアプリで発生した事象です。
2
14
 
3
15
  ##現象

1

SQL Server バージョン修正/調査時の結果追記

2017/07/09 12:18

投稿

chida3
chida3

スコア15

title CHANGED
File without changes
body CHANGED
@@ -15,7 +15,7 @@
15
15
  デバックすると、Session2のSELECT箇所および排他エラー処理はすり抜けてしまい、後続のヘッダテーブル更新箇所でロック開放待ち→タイムアウトしていました。
16
16
 
17
17
  ##環境
18
- SQL Server2012
18
+ SQL Server2014
19
19
  ReadCommitted Snapshot
20
20
 
21
21
  ##問題のSQL等
@@ -85,6 +85,13 @@
85
85
  **1)実行計画の調査**
86
86
  Session2のアプリ内SQLの実行計画を見てみたところ、ヘッダテーブルのスキャンにPK以外のインデックス(例:上記のIDX_受注情報ヘッダ01)が使われていました。
87
87
 
88
+ **推定実行プラン**
89
+ **Session1:**
90
+ Clustered Index Seek[PK] 受注情報ヘッダ
91
+ **Session2:**
92
+ Index Seek(NonClustered)[IDX_受注情報ヘッダ01] 受注情報ヘッダ 50%
93
+ Index Seek(NonClustered)[受注情報ボディのインデックス] 受注情報ボディ 50%
94
+
88
95
  **2)ロック状況の確認**
89
96
  いくつかサイトで紹介されていた、下記のロック状況確認SQLを実行しました。
90
97
  結果、Session1とSession2それぞれ、「resource_associated_entity_id」の値が異なりました。
@@ -121,10 +128,25 @@
121
128
  T1.request_session_id
122
129
 
123
130
  ```
131
+ **検索結果**
132
+ Session1と2のSQLを実行後、確認SQLを実行したときの検索結果は下図のようになりました。
133
+ 両セッション間で、resource_associated_entity_idの値が違います。
134
+ ![検索結果1](c438ddbbb1a5fcc55930d6850234d7bb.png)
124
135
 
125
136
  **3)WITH句のヒント句にインデックス指定**
126
137
  WITH句に、PKのインデックスを指定したところ、期待値どおりになりました。
127
138
 
139
+ **推定実行プラン**
140
+ **Session2**
141
+ Clustered Index Seek[PK] 受注情報ヘッダ 51%
142
+ Index Seek(NonClustered)[受注情報ボディのインデックス] 受注情報ボディ 49%
143
+
144
+ **検索結果**
145
+ ![検索結果2](ca7acea75d0b1b05cece8249f273e6c2.png)
146
+
147
+ ※ちなみに、nowait指定を外すとSession2は待ちとなりますが、そのときの検索結果は次のようになりました。
148
+ ![検索結果3](27a2469c949f3598c197dfe276dd1237.png)
149
+
128
150
  ##質問と仮説
129
151
  **1)resource_associated_entity_idとは何を指すのか?**
130
152
  sys.dm_tran_locksの「resource_associated_entity_id」の項目に表示される値は何なのでしょうか?