博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 11g enq: JI – contention等待事件
阅读量:4987 次
发布时间:2019-06-12

本文共 12073 字,大约阅读时间需要 40 分钟。

最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查:

JI enqueue is acquired in exclusive mode on the mview base (container) table when more than one session refresh the same materialzed view. It ensures that two or more refresh processes do not try to refresh the same object.

Sessions waiting on this event are waiting on locks held during materialized view operations (such as refresh, alter) to prevent concurrent operations on the same materialized view.

Solutions

A materialized view cannot be fast refreshed more than once in a given period because it is serialized during the commit phase. Ensure that only one session at a time is performing the refreshes. If there is more than one session, the first session will work normally but the subsequent sessions will wait on “enq: JI – contention”.

Waits on this event can also be caused by on-commit time logic within the materialized view. Normally when a session updates record 1 and commits and then another session updates record 2 and commits, they do not have to wait for each other. However, when using an on commit-time fast refreshable materialized view on top of the table, we do have to wait when two sessions do totally unrelated transactions concurrently against the same table. This is not a problem when the table is modified infrequently or only by a single session, but it can be a big problem when applied to a table that performs a lot of modifications concurrently. Be sure to use on commit-time fast refreshable materialized views for implementing business rules only on tables that are not concurrently accessed or infrequently changed.

 

Solution:

First we have to check which session hold the lock (LMODE) and which process requests the lock(REQUEST). We can easily check it from v$lock.

 

LMODE and REQUEST Column description from v$lock.

LMODE

NUMBER

Lock mode in which the session holds the lock:

  • 0 - none
  • 1 - null (NULL)
  • 2 - row-S (SS)
  • 3 - row-X (SX)
  • 4 - share (S)
  • 5 - S/Row-X (SSX)
  • 6 - exclusive (X)

 

REQUEST

NUMBER

Lock mode in which the process requests the lock:

  • 0 - none
  • 1 - null (NULL)
  • 2 - row-S (SS)
  • 3 - row-X (SX)
  • 4 - share (S)
  • 5 - S/Row-X (SSX)
  • 6 - exclusive (X)

 

select

nvl(S.USERNAME,'Internal') username,S.MACHINE,s.SERIAL#,

        L.SID,

        nvl(S.TERMINAL,'None') terminal,

        decode(command,

0,'None',decode(l.id2,0,U1.NAME||'.'||substr(T1.NAME,1,20),'None')) tab,

decode(command,

0,'BACKGROUND',

1,'Create Table',

2,'INSERT',

3,'SELECT',

4,'CREATE CLUSTER',

5,'ALTER CLUSTER',

6,'UPDATE',

7,'DELETE',

8,'DROP',

9,'CREATE INDEX',

10,'DROP INDEX',

11,'ALTER INDEX',

12,'DROP TABLE',

13,'CREATE SEQUENCE',

14,'ALTER SEQUENCE',

15,'ALTER TABLE',

16,'DROP SEQUENCE',

17,'GRANT',

18,'REVOKE',

19,'CREATE SYNONYM',

20,'DROP SYNONYM',

21,'CREATE VIEW',

22,'DROP VIEW',

23,'VALIDATE INDEX',

24,'CREATE PROCEDURE',

25,'ALTER PROCEDURE',

26,'LOCK TABLE',

27,'NO OPERATION',

28,'RENAME',

29,'COMMENT',

30,'AUDIT',

31,'NOAUDIT',

32,'CREATE EXTERNAL DATABASE',

33,'DROP EXTERNAL DATABASE',

34,'CREATE DATABASE',

35,'ALTER DATABASE',

36,'CREATE ROLLBACK SEGMENT',

37,'ALTER ROLLBACK SEGMENT',

38,'DROP ROLLBACK SEGMENT',

39,'CREATE TABLESPACE',

40,'ALTER TABLESPACE',

41,'DROP TABLESPACE',

42,'ALTER SESSION',

43,'ALTER USER',

44,'COMMIT',

45,'ROLLBACK',

46,'SAVEPOINT',

47,'PL/SQL EXECUTE',

48,'SET TRANSACTION',

49,'ALTER SYSTEM SWITCH LOG',

50,'EXPLAIN',

51,'CREATE USER',

52,'CREATE ROLE',

53,'DROP USER',

54,'DROP ROLE',

55,'SET ROLE',

56,'CREATE SCHEMA',

57,'CREATE CONTROL FILE',

58,'ALTER TRACING',

59,'CREATE TRIGGER',

60,'ALTER TRIGGER',

61,'DROP TRIGGER',

62,'ANALYZE TABLE',

63,'ANALYZE INDEX',

64,'ANALYZE CLUSTER',

65,'CREATE PROFILE',

66,'DROP PROFILE',

67,'ALTER PROFILE',

68,'DROP PROCEDURE',

69,'DROP PROCEDURE',

70,'ALTER RESOURCE COST',

71,'CREATE SNAPSHOT LOG',

72,'ALTER SNAPSHOT LOG',

73,'DROP SNAPSHOT LOG',

74,'CREATE SNAPSHOT',

75,'ALTER SNAPSHOT',

76,'DROP SNAPSHOT',

79,'ALTER ROLE',

85,'TRUNCATE TABLE',

86,'TRUNCATE CLUSTER',

87,'-',

88,'ALTER VIEW',

89,'-',

90,'-',

91,'CREATE FUNCTION',

92,'ALTER FUNCTION',

93,'DROP FUNCTION',

94,'CREATE PACKAGE',

95,'ALTER PACKAGE',

96,'DROP PACKAGE',

97,'CREATE PACKAGE BODY',

98,'ALTER PACKAGE BODY',

99,'DROP PACKAGE BODY',

command||' - ???') COMMAND,

        decode(L.LMODE,1,'No Lock',

                2,'Row Share',

                3,'Row Exclusive',

                4,'Share',

                5,'Share Row Exclusive',

                6,'Exclusive','NONE') lmode,

        decode(L.REQUEST,1,'No Lock',

                2,'Row Share',

                3,'Row Exclusive',

                4,'Share',

                5,'Share Row Exclusive',

                6,'Exclusive','NONE') request,

l.id1||'-'||l.id2 Laddr,

l.type||' - '||

decode(l.type,

'BL','Buffer hash table instance lock',

'CF',' Control file schema global enqueue lock',

'CI','Cross-instance function invocation instance lock',

'CS','Control file schema global enqueue lock',

'CU','Cursor bind lock',

'DF','Data file instance lock',

'DL','Direct loader parallel index create',

'DM','Mount/startup db primary/secondary instance lock',

'DR','Distributed recovery process lock',

'DX','Distributed transaction entry lock',

'FI','SGA open-file information lock',

'FS','File set lock',

'HW','Space management operations on a specific segment lock',

'IN','Instance number lock',

'IR','Instance recovery serialization global enqueue lock',

'IS','Instance state lock',

'IV','Library cache invalidation instance lock',

'JQ','Job queue lock',

'KK','Thread kick lock',

'MB','Master buffer hash table instance lock',

'MM','Mount definition gloabal enqueue lock',

'MR','Media recovery lock',

'PF','Password file lock',

'PI','Parallel operation lock',

'PR','Process startup lock',

'PS','Parallel operation lock',

'RE','USE_ROW_ENQUEUE enforcement lock',

'RT','Redo thread global enqueue lock',

'RW','Row wait enqueue lock',

'SC','System commit number instance lock',

'SH','System commit number high water mark enqueue lock',

'SM','SMON lock',

'SN','Sequence number instance lock',

'SQ','Sequence number enqueue lock',

'SS','Sort segment lock',

'ST','Space transaction enqueue lock',

'SV','Sequence number value lock',

'TA','Generic enqueue lock',

'TD','DDL enqueue lock',

'TE','Extend-segment enqueue lock',

'TM','DML enqueue lock',

'TO','Temporary Table Object Enqueue',

'TT','Temporary table enqueue lock',

'TX','Transaction enqueue lock',

'UL','User supplied lock',

'UN','User name lock',

'US','Undo segment DDL lock',

'WL','Being-written redo log instance lock',

'WS','Write-atomic-log-switch global enqueue lock',

'TS',decode(l.id2,0,'Temporary segment enqueue lock (ID2=0)',

                    'New block allocation enqueue lock (ID2=1)'),

'LA','Library cache lock instance lock (A=namespace)',

'LB','Library cache lock instance lock (B=namespace)',

'LC','Library cache lock instance lock (C=namespace)',

'LD','Library cache lock instance lock (D=namespace)',

'LE','Library cache lock instance lock (E=namespace)',

'LF','Library cache lock instance lock (F=namespace)',

'LG','Library cache lock instance lock (G=namespace)',

'LH','Library cache lock instance lock (H=namespace)',

'LI','Library cache lock instance lock (I=namespace)',

'LJ','Library cache lock instance lock (J=namespace)',

'LK','Library cache lock instance lock (K=namespace)',

'LL','Library cache lock instance lock (L=namespace)',

'LM','Library cache lock instance lock (M=namespace)',

'LN','Library cache lock instance lock (N=namespace)',

'LO','Library cache lock instance lock (O=namespace)',

'LP','Library cache lock instance lock (P=namespace)',

'LS','Log start/log switch enqueue lock',

'PA','Library cache pin instance lock (A=namespace)',

'PB','Library cache pin instance lock (B=namespace)',

'PC','Library cache pin instance lock (C=namespace)',

'PD','Library cache pin instance lock (D=namespace)',

'PE','Library cache pin instance lock (E=namespace)',

'PF','Library cache pin instance lock (F=namespace)',

'PG','Library cache pin instance lock (G=namespace)',

'PH','Library cache pin instance lock (H=namespace)',

'PI','Library cache pin instance lock (I=namespace)',

'PJ','Library cache pin instance lock (J=namespace)',

'PL','Library cache pin instance lock (K=namespace)',

'PK','Library cache pin instance lock (L=namespace)',

'PM','Library cache pin instance lock (M=namespace)',

'PN','Library cache pin instance lock (N=namespace)',

'PO','Library cache pin instance lock (O=namespace)',

'PP','Library cache pin instance lock (P=namespace)',

'PQ','Library cache pin instance lock (Q=namespace)',

'PR','Library cache pin instance lock (R=namespace)',

'PS','Library cache pin instance lock (S=namespace)',

'PT','Library cache pin instance lock (T=namespace)',

'PU','Library cache pin instance lock (U=namespace)',

'PV','Library cache pin instance lock (V=namespace)',

'PW','Library cache pin instance lock (W=namespace)',

'PX','Library cache pin instance lock (X=namespace)',

'PY','Library cache pin instance lock (Y=namespace)',

'PZ','Library cache pin instance lock (Z=namespace)',

'QA','Row cache instance lock (A=cache)',

'QB','Row cache instance lock (B=cache)',

'QC','Row cache instance lock (C=cache)',

'QD','Row cache instance lock (D=cache)',

'QE','Row cache instance lock (E=cache)',

'QF','Row cache instance lock (F=cache)',

'QG','Row cache instance lock (G=cache)',

'QH','Row cache instance lock (H=cache)',

'QI','Row cache instance lock (I=cache)',

'QJ','Row cache instance lock (J=cache)',

'QL','Row cache instance lock (K=cache)',

'QK','Row cache instance lock (L=cache)',

'QM','Row cache instance lock (M=cache)',

'QN','Row cache instance lock (N=cache)',

'QO','Row cache instance lock (O=cache)',

'QP','Row cache instance lock (P=cache)',

'QQ','Row cache instance lock (Q=cache)',

'QR','Row cache instance lock (R=cache)',

'QS','Row cache instance lock (S=cache)',

'QT','Row cache instance lock (T=cache)',

'QU','Row cache instance lock (U=cache)',

'QV','Row cache instance lock (V=cache)',

'QW','Row cache instance lock (W=cache)',

'QX','Row cache instance lock (X=cache)',

'QY','Row cache instance lock (Y=cache)',

'QZ','Row cache instance lock (Z=cache)','????') Lockt,

 SQ.SQL_TEXT

from    V$LOCK L, 

        V$SESSION S,

        SYS.USER$ U1,

        SYS.OBJ$ T1,

        V$SQL SQ

where   L.SID = S.SID

and     S.SQL_ADDRESS = SQ.ADDRESS

and     T1.OBJ#  = decode(L.ID2,0,L.ID1,1) 

and     U1.USER# = T1.OWNER#

and     S.TYPE != 'BACKGROUND'

and l.type like '%JI%'

order by 1,2,5;

 

USERNAME

MACHINE

SERIAL#

SID

TERMINAL

TAB

COMMAND

LMODE

REQUEST

LADDR

LOCKT

SQL_TEXT

BIDATA

db.test.com

21,031

254

None

BIDATA.SESSION_LOG_DAY_

PL/SQL EXECUTE

NONE

Exclusive

640374-0

JI - ????

BEGIN DBMS_MVIEW.REFRESH ('WEB_SESSION_LOG_DAY_MV', 'f'); END;

BIDATA

db.test.com

10,143

7

pts/5

BIDATA.SESSION_LOG_DAY_

INSERT

Exclusive

NONE

640374-0

JI - ????

/* MV_REFRESH (INS) */INSERT /*+ BYPASS_RECURSIVE_CHECK */ INTO "BIDATA"."WEB_SESSION_LOG_DAY_MV"("IPX_DATE","CONSUMERMARKETID","CONSUMEROPERATORID","CONTENTPROVIDERID","SESSIONTYPE","WASWHITELABEL","FINALSTATE","ERRORCODE","BRANDNAME","MODELNAME","MOBILEBROWSER","MOBILEBROWSERVERSION","CONTENTPROVIDERSERVICEID","NUMTRANSACTIONS","CNT_NUMTX","COUNT(*)") SELECT "TDIM"."DAY_KEY","WSLMV"."CONSUMERMARKETID","WSLMV"."CONSUMEROPERATORID","WSLMV"."CONTENTPROVIDERID","WSLMV"."SESSIONTYPE","WSLMV"."WASWHITELABEL","WSLMV"."FINALSTATE","WSLMV"."ERRORCODE","WSLMV"."BRANDNAME","WSLMV"."MODELNAME","WSLMV"."MOBILEBROWSER","WSLMV"."MOBILEBROWSERVERSION","WSLMV"."CONTENTPROVIDERSERVICEID",SUM("WSLMV"."NUMTRANSACTIONS"),COUNT("WSLMV"."NUMTRANSACTIONS"),COUNT(*) FROM "WEB_SESSION_LOG_HOUR_MV" "WSLMV","TIME_DIMENSION" "TDIM" WHERE "WSLMV"."IPX_DATE"="TDIM"."DAY_KEY" GROUP BY "TDIM"."DAY_KEY","WSLMV"."CONSUMERMARKETID","WSLMV"."CONSUMEROPERATORID","WSLMV"."CONTENTPROVIDERID","WSLMV"."SESSIONTYPE","WSLMV"."

 

If the JI enqueue holder is an intended refresh session then the other session that trying to refresh it need to wait until first one finishes.  If the JI enqueuer holder session stuck for some reason then you may kill it so the second session can proceed.

Example:

SQL> alter system kill session '254,21031';

System altered.

 

Don’t refresh the same Mview object by many sessions at the same time.

 

For more information please check Oracle Doc ID 1358453.1

 
 
 

 也就是对于同一个物化视图基表,不能过于频繁的刷新,尤其不能并发进行刷新,我们的刚好就是有频繁的定时刷新+手工刷新,重叠之后就出现这个问题了。让开发调整为要么手工、要么自动,不要交叉进行。

转载于:https://www.cnblogs.com/zhjh256/p/9719764.html

你可能感兴趣的文章
什么是提醒?
查看>>
AngularJS5.0 (第一篇)
查看>>
ORACLE基础
查看>>
redis-4.0.8 配置文件解读
查看>>
Ubuntu 16.04搭建原始Git服务器
查看>>
Ubuntu 16.04下没有/var/log/messages文件问题解决
查看>>
JSP指令
查看>>
[转]操作系统Unix、Windows、Mac OS、Linux的故事
查看>>
SQL Server中 sysobjects、syscolumns、systypes
查看>>
heredoc和nowdoc的区别
查看>>
mysql存储过程中遍历数组字符串的两种方式
查看>>
CCF201803-3-URL映射
查看>>
.NET程序开发中必须收藏的七个类型的经典工具
查看>>
Springboot重构-云笔记(2)
查看>>
数据库语句备份
查看>>
在对象之间搬移特性(读书摘要——重构改善既有代码的设计)
查看>>
OperService.class.php
查看>>
收藏:Windows消息机制
查看>>
《InsideUE4》UObject(四)类型系统代码生成
查看>>
jQuery对表格进行类样式
查看>>