オラクルのデッドロックのトラブルシューティング

これは、内部のグループの前に私のプロジェクトで、それぞれが処理ロジックを呼び出すために、すべてのストア上でビジネスをやって、非常に複雑なSQLストアドプロシージャを作成するための機能モジュールがあります。

ビジネスを行うために複数の人が相談専門のDBAの後ろに問題のトラブルシューティングを行う場合は、ページがスタックに対応することができなかったとき、ストアドプロシージャを呼び出すと、挿入内部ストアドプロシージャの一部であり、更新操作がデッドロックにつながりました。

今、次のように要約デッドロックのトラブルシューティングを行うための手順について話:

1、查行锁:
カラムイベント形式A30
列のSES形式A20
セットLINESIZE 150
ID1にブレーク1スキップ
セレクトデコード(リクエスト、0、 '者:'、 'ウェイターを:')|| s.inst_id || ':' || s.sid || '' || s.serial#1のSES、
ID1、ID2、LMODE、要求、l.type、CTIME、s.sql_id、s.event、s.last_call_et
のGV $ロックリットル、GVの$セッションSから
(ID1、ID2、l.type )で
ID1、ID2、リクエスト> 0)GVの$ロックの種類を選択(
およびl.sid = s.sid
とl.inst_id = s.inst_id
ID1、CTIMEのDESC、要求によって順序を、

2、SQLデッドロックによって引き起こされるライン・ロック・ビットをチェックし、ストアドプロシージャを介し。

:ロック・テーブル・SQLIDその結果
、特定のチェックされたSQL文のWHERE「9g5813my4anbt」GV = $ sqlをするSQL_IDからSELECT SQL_TEXT

ビューには、DBA権限によって関連デッドロックのためのテーブルでは:

* $ SELECT Vからのロック;
SELECT *五$ SQLAREA FROM;
SELECT * $セッションV FROM;
SELECT *五$プロセスから;
SELECT *五$ LOCKED_OBJECT FROM;
SELECT * ALL_OBJECTSの;
SELECT *五$ SESSION_WAIT FROM;
-ビューテーブルはロックされ
; b.object_id DBA_OBJECTS = a.object_id SELECT b.owner、b.object_name、a.session_idには、V $ A、Bからa.locked_modeのLOCKED_OBJECT
プロセスが記載ユーザがデッドロックすることを確認してください-
セレクトBを.username、b.sid、b.serial#、五$ LOCKED_OBJECT aからLOGON_TIME、セッションa.session_id五$ WHERE bの= b.logon_timeで注文をb.sid;
-アタッチされたプロセスを参照してください
SELECT sidの、シリアル番号、ユーザ名、FROM $ OSUSERセッションV;
。--- 3見つかったロックされたテーブルsidの、シリアル番号、os_user_name、マシン名 、ターミナル、 ロックタイプ、モード
S.sid SELECT、s.serial#、s.username、s.schemaname、s.osuser、s.process、s.machine、
s.terminal、s.logon_time、l.type
五$ Sからのセッションには、V $ロックをL
WHERE s.sid = l.sid
とNOT NULL s.usernameある
ORDER BY SID;
この文は、生成されたすべてのDML文のデータベースをロックすることになりますが、また見つけることができる、
任意のDML文は、実際に2つのロックを持っていました、表ロックは、行ロックです。
-プロセスのSIDを殺す、シリアル#

4、最終溶液は、保存処理を最適化するために行く、あるいは出張の最適化から、それらが解決を取得する前に、私たちは年によって異なる年間、データ滝をテーブルの分割処理を行うため、データの大規模なテーブルの何百万、数十を持っていましたさ

私はみんなに本当の直面する問題や技術的な支援のソリューションを通じてそれを願って、異なるデータファイル!

おすすめ

転載: www.cnblogs.com/cx-20190810/p/11331230.html