| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[DB2 ロッキングの問題]]==
[[DB2]] | [[Database]] |
*ロック要求は、タイムアウト期間を超えるか、またはデッドロックが発生するまで、待機アプリケーションに対して保留
*locktimeout データベース・パラメーター (秒単位) を使用して、ロックが使用可能になるのをアプリケーションが待機する期間の長さを構成
*タイムアウト期間を超えた場合、待機アプリケーションは戻りコード 68 を伴う SQL0911 [[SQL]]0911 エラー・メッセージを受け取りロールバック
*locktimeout のデフォルト値は -1 で、これによりロック・タイムアウトは使用不可(永久に、またはロックが解除されるまで待機し続けます)
=====管理通知ログの情報を使用し、エスカレーション問題の解決方法を決定=====
*maxlocks または locklist データベース構成パラメーター (あるいはその両方) を確認または調整
*RR、RS、CS、または UR などの、アプリケーションおよび [[SQL ]] ステートメントが実行中の場合の分離レベルを考慮
*アプリケーションでのコミットの頻度を増やす
*アプリケーションを変更し、LOCK TABLE ステートメントを使用して、表ロックを取得
===デッドロック===
デッドロックが検出されると、デッドロック検出機能は、自動的にロールバックされ戻りコード 2 を伴う SQL0911 [[SQL]]0911 sql コードが出されるビクティム (犠牲となる作業単位) を選択します。ビクティムをロールバックすることにより、ロックの競合が除去され、他のアプリケーションは処理を続行
<blockquote>SQLコード [[SQL]]コード -911 の場合、理由コード 2 ならデッドロック、68ならタイムアウト</blockquote>
====ロックエスカレーション====
=====[http://faq.db2watch.com/content/3/19/ja/%E7%AA%81%E7%84%B6%E3%83%AD%E3%83%83%E3%82%AF%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%82%84%E3%83%87%E3%83%83%E3%83%89%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E5%A4%9A%E7%99%BA%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%E5%8E%9F%E5%9B%A0%E3%81%AF%EF%BC%9F.html 突然ロックタイムアウトやデッドロックが多発]=====
まずはロック・エスカレーション を疑ってみましょう。DB2はデフォルトでは行ロックですが、ロック用のメモリー(LOCKLIST )が全体として不足したり、ロック用のメモリー(LOCKLIST)を1トランザクションで所定量を1[[トランザクション]]で所定量(MAXLOCKS) 以上使うと、ロックの量を減らすために自動的に表ロックになります。表ロックになると並行度が下がり他の処理が待たされたりデッドロックが起きやすくなります。
*ログを確認
*例
2008-04-XX-00.00.29.617870+540 E413519E589 LEVEL: Warning
PID : 3707 TID : 47070471776608PROC 47070471776608P[[R]]OC : db2sysc
INSTANCE: db2inst1 NODE : 000 DB : XXXDB
APPHDL : 0-44235 APPID: *LOCAL.db2inst1.080424212730
AUTHID : DB2INST1[[DB2]]INST1
EDUID : 36147 EDUNAME: db2agent (XXXDB)
FUNCTION: [[DB2 ]] UDB, data management, sqldEscalateLocks, probe:2 MESSAGE : ADM5500W [[DB2 ]] is performing lock escalation. The total number of
locks currently held is "212121", and the target number of locks to
hold is "106060".

案内メニュー