最近使用物化视图同步的环境在大量刷新的时候频繁出现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

 
 
 

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

oracle 11g enq: JI – contention等待事件的更多相关文章

  1. enq: DX – contention等待事件解决方法

    前几日,一测试环境在dblink单表同步的时候(不管怎么说,目前仍然是同构数据库同步性能最快的方法,别听网上的扯淡,无论goldengate还是java层,都是比较慢的),某张表一直同步不过去,看了一 ...

  2. Oracle 11g direct path read 等待事件的理解

    在Oracle 11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读的,所以不存在di ...

  3. enq: TX - row lock contention“等待事件的处理

      enq: TX - row lock contention“等待事件的处理   session1: SQL> conn scott/triger Connected. SQL> CRE ...

  4. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  5. Oracle 常见的33个等待事件

    一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...

  6. Oracle常见的33个等待事件

    Buffer busy waits 原因:        当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时.        当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读 ...

  7. 【参考】查找Oracle最高的几个等待事件以及锁的信息

    1.通过操作系统的命令找到系统资源的bottleneck,如:CPU, Memory, I/O, Network  同时主要关注IOWait, PI/PO, Memory的使用情况 2.通过查询v$s ...

  8. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结 ...

  9. 等待事件:enq: HW - contention和enq: TM - contention

    今天生成了生产库前几日的AWR报告,发现等待事件中出现了一个陌生的event--enq: HW - contention,google一下是ASSM(Auto Segment Space Manage ...

随机推荐

  1. Golang 引用库中含有初始化代码时如何引用

    简单点说吧,要在引用库前加'_'符号 给出示例 //foo.go // /usr/local/go/pkg/src/foo/foo.go package foo import "fmt&qu ...

  2. lldb使用

    常用 si,ni ,ex, mem,di,reg,b,c,x 以下内容是lldb帮助文档中内容: apropos           -- List debugger commands related ...

  3. 关于 CGI,Fastcgi和php-fpm 理解

    首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...

  4. ecshop 前台个人中心修改侧边栏 和 侧边栏显示不全 或 导航现实不全

    怎么给个人中心侧边栏加项或者减项 在模板文件default/user_menu.lbi 文件里添加或者修改,一般看到页面都会知道怎么加,怎么删,这里就不啰嗦了 添加一个栏目以后,这个地址跳的页面怎么写 ...

  5. nginx配置文件优化

    nginx配置优化     #定义Nginx运行的用户和用户组user  www  www: #启动工作进程,通常设置成和cpu的数量相等worker_processes  8:   最多开启8个,8 ...

  6. NHibernate之旅系列文章导航

    NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...

  7. java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的解决方案

    今天在GitHub上面看到一个有意思的项目,下载下来,使用tomcat部署失败,出现异常,网上说JDK版本太高,改低,还是失败. 由于本人有个习惯,更喜欢把项目直接放入tomcat webapps 里 ...

  8. MYSQLi数据访问修改数据

    <link href="../bootstrap.min.css" rel="stylesheet" type="text/css" ...

  9. SlimScroll插件学习

    SlimScroll插件学习 SlimScroll插件,是一个很好用的滚动条插件. 第一个实例程序: js代码: <script src="../slimScroll/jquery-3 ...

  10. Marlin 擠出頭溫度控制PID值校正

    Marlin 擠出頭溫度控制PID值校正 擠出頭加熱器.溫度感應器安裝好後,先別急著直接指定工作溫度並且加熱.因為控制板上的溫度控制PID參數尚未校正.如果加熱速度過快,有可能會加熱過度並且導致零件燒 ...