事務上の待ちイベント——enq:TM-content

1931 ワード

DMLを実行する間は、DMLに関するオブジェクトの修正を防ぐために、DMLを実行するプロセスは、テーブルにTMロックを獲得する必要があります。TMロックを獲得する過程で競合が発生すると、enq:HW−contentionイベントが待機する。
SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name like 'enq: TM - contention';

NAME                           PARAMETER1           PARAMETER2           PARAMETER3
------------------------------ -------------------- -------------------- --------------------
enq: TM - contention           name|mode            object #             table/partition
DLLロックとDDLロックの二つのロックがあると思われますが、実はDLLロックとDDLロックは合理的にロックを割り当てるために付けられた名称です。)DLLロック:data lock。DML実行時にデータのロックを保護します。Row Lock(TX)特定行を保護し、テーブル全体をTable Lock(TM)で保護し、dba_dml_ロック観察。このビューの役割は、v$lockビューからロックタイプを絞り出すTMです。データベース上で許可されているTMロックの数は、dml_を利用することができます。locksパラメータ指定。
DDLロック:data dictionary lock。User/Table/View/Procesdureなどの定義を保護し、dba_同前ロック観察
 
一般的にTMロック争いが発生した場合は以下の通りです。
1、不当なDDLによるTMロック争い用
 事務が実行している表については、DDLは基本的に実行できません。そのため、この時点で競合による性能問題は発生しません。udateを完成したが、まだ提出されていない表については、DDLを実行することは不可能です。逆に、DDLを実行しているテーブルに対してDMLを実行すると、TMロック競合が発生する可能性がある。データの多いテーブルに対して不適切なDDLが実行されると、このテーブルにアクセスした全てのDLLセッションは待機状態になり、故障状態に発展する可能性がある。合理的な管理を通して、根本的に防止するのが一番いい方法です。DDLを実行する時はオンラインのオプションを使ったほうがいいです。oracleバージョンのアップグレードに伴い、オンライン状態で実行可能なDDLが徐々に増加しています。DDLの実行速度をparallel DDLを用いて最大化した。大量のデータを持ったテーブルに対してDDLを実行する場合、適切にparallelのオプションを使えば、DDL自体の性能を最大化できます。
 
2、ロックテーブルを利用して…TMロックを積極的に取得する場合
ロックテーブル…語句を利用してTMロックを意図的に取得する場合、TMロック争いが発生する可能性があります。TMロックによる争いは、セッションで実行されるSQL文を収集することが重要です。
 
3、Direct/Paralel Load作業を行う場合
INSERT/*+APPEND*/INTO…またはSQL*Loaderのdirect path loadなどの部分機能は、該当するテーブルに対してExclusiveモードでTMロックを獲得する。Direct load作業はSGAを経ずにデータファイルに直接書き込むので、作業中は表の修正はできません。Direct_load作業は、作業を実行する間、表の任意のDDLまたはDMLを許可しない。したがって、事務の多い時間にDirect load作業を行う場合は、TMロック争いが発生する可能性があるかどうかを確認する必要があります。SQL*LoaderをPalelモードで実行する場合、テーブルに対してSharedモードでTMロックを取得する。したがって、この場合、他のセッションのDDLまたはDMLは許可されない。