【等待事件】序列等待事件總結(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

等待事件序列等待事件總結(enq: SQ - contentionrow cache lockDFS lock handleenq: SV -  contentionhtml

1  BLOG文檔結構圖

wpsBC4E.tmp 

2  前言部分

2.1  導讀和注意事項

各位技術愛好者,看完本文後,你能夠掌握以下的技能,也能夠學到一些其它你所不知道的知識,~O(∩_∩)O~數據庫

序列等待事件總結緩存

enq: SQ - contentionrow cache lockDFS lock handleenq: SV -  contention模擬微信

序列的CACHE值性能測試網絡

RAC中序列的ORDERNOORDER測試併發

序列等待的相關案例處理ide

Tipssvg

本文在itpubhttp://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和微信公衆號(xiaomaimiaolhr)上有同步更新性能

文章中用到的全部代碼、相關軟件、相關資料及本文的pdf版本都請前往小麥苗的雲盤下載,小麥苗的雲盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/學習

若網頁文章代碼格式有錯亂,下載pdf格式的文檔來閱讀

本篇BLOG中,代碼輸出部分通常放在一行一列的表格中。其中,須要特別關注的地方我都用灰色背景和粉紅色字體來表示,好比在下邊的例子中,thread 1的最大歸檔日誌號爲33thread 2的最大歸檔日誌號爲43是須要特別關注的地方;而命令通常使用黃色背景和紅色字體注;對代碼或代碼輸出部分的注釋通常採用藍色字體表示

  List of Archived Logs in backup set 11

  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

  ---- ------- ---------- ------------------- ---------- ---------

  1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

  1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

  2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

  2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

[ZHLHRDB1:root]:/>lsvg -o

T_XLHRD_APP1_vg

rootvg

[ZHLHRDB1:root]:/>

00:27:22 SQL> alter tablespace idxtbs read write;

====2097152*512/1024/1024/1024=1G

本文若有錯誤或不完善的地方請你們多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫做的最大動力。

2.2  相關文章連接

有關隊列的更多介紹能夠參考:http://blog.itpub.net/26736162/viewspace-2126079/

【故障處理】序列cache值太小致使CPU利用率太高,鏈接地址爲:http://blog.itpub.net/26736162/viewspace-2123996/

2016-10-18

【等待事件】等待事件系列(5.1)--Enqueue(隊列等待)--5.1.6 enq: SQ - contention 序列

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771602&idx=1&sn=3112cd29b4877435ffe37b603b263d00&chksm=fe8bbaeac9fc33fc6b0df4efa6e923f7c4f7ba2830659b75934627bf079dc76842bfc2b6f976&scene=21#wechat_redirect

2016-08-24

【故障處理】序列cache值太小致使CPU利用率太高

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771414&idx=1&sn=0cbc454bc7d5a513bbca6083958e2f34&scene=21#wechat_redirect

2016-10-14

【等待事件】等待事件系列(5.1)--Enqueue(隊列等待)--5.1.2 數據字典

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771592&idx=1&sn=2a2b8c842aa95fd05c5de559495f4055&chksm=fe8bbaf0c9fc33e66b5b2dc4b8a0b411837777a202201b89e853bd41a49ed1ee9ec1d74bb22d&scene=21#wechat_redirect

2016-10-11

【等待事件】等待事件系列(5.1)--Enqueue(隊列等待)--5.1.1 簡介部分

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771584&idx=1&sn=037855f956bb297168b3e2282c436e53&chksm=fe8bbaf8c9fc33eebeca20a9c66c18800bd49e5f90059e0df6f1516f456c6de2968f2322d1f6&scene=21#wechat_redirect

等待事件系列

 

【故障處理】隊列等待之TX - allocate ITL entry引發的死鎖處理

http://blog.itpub.net/26736162/viewspace-2124771/

【故障處理】隊列等待之enq: US - contention案例

http://blog.itpub.net/26736162/viewspace-2124767/

【推薦】 【故障處理】隊列等待之TX - allocate ITL entry案例

http://blog.itpub.net/26736162/viewspace-2124735/

【推薦】 等待事件系列(1)--User I/O類型(下)

http://blog.itpub.net/26736162/viewspace-2124435/

【推薦】 等待事件系列(1)--User I/O類型(上)

http://blog.itpub.net/26736162/viewspace-2124417/

【推薦】 【故障處理】隊列等待之enq: TX - row lock contention

http://blog.itpub.net/26736162/viewspace-2124369/

【推薦】 【等待事件】等待事件系列(5.1)--Enqueue(隊列等待)

http://blog.itpub.net/26736162/viewspace-2126079/

【推薦】 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日誌類等待

http://blog.itpub.net/26736162/viewspace-2125065/

【推薦】 等待事件系列(1)--User I/O類型(下)

http://blog.itpub.net/26736162/viewspace-2124435/

【推薦】 等待事件系列(1)--User I/O類型(上)

http://blog.itpub.net/26736162/viewspace-2124417/

【推薦】 【故障處理】隊列等待之TX - allocate ITL entry引發的死鎖處理

http://blog.itpub.net/26736162/viewspace-2124771/

【推薦】 【故障處理】隊列等待之enq: US - contention案例

http://blog.itpub.net/26736162/viewspace-2124767/

【推薦】 【故障處理】隊列等待之TX - allocate ITL entry案例

http://blog.itpub.net/26736162/viewspace-2124735/

【推薦】 【故障處理】隊列等待之enq: TX - row lock contention

http://blog.itpub.net/26736162/viewspace-2124369/

【推薦】 【故障處理】序列cache值太小致使CPU利用率太高

http://blog.itpub.net/26736162/viewspace-2123996/

 

 

2.3  本文簡介

2016824日發佈過一篇文章,BLOG名稱爲:【故障處理】序列cache值太小致使CPU利用率太高,鏈接地址爲:http://blog.itpub.net/26736162/viewspace-2123996/,文章中根據案例詳細分析了一次有關enq: SQ - contention等待事件的問題,基本上把全部的有關序列問題致使的等待事件所有講解了一遍,可是那篇文章是針對Oracle 10g數據庫而言的,而在Oracle 11g中,對SV鎖進行了分離,出現了enq: SV -  contention等待事件,而在Oracle 10g不存在「enq: SV -  contention」該等待事件,而是表現爲DFS lock handle,因此這篇文章將再次把序列等待事件整理一下。

第二章 序列等待事件

1  基礎知識介紹

序列的等待事件基本上都與隊列的等待事件相關,有關隊列的更多介紹能夠參考:http://blog.itpub.net/26736162/viewspace-2126079/

其實,enq: SQ - contentionrow cache lockDFS lock handleenq: SV -  contention4個等待事件都與Oracle序列有關,以下所示:

SELECT *

FROM V$EVENT_NAME

WHERE NAME IN ('row cache lock',

'enq: SQ - contention',

'DFS lock handle',

'enq: SV -  contention');

wpsBC4F.tmp 

其中,PAREMETER1的值爲「name|mode」「type|mode」的事件爲隊列等待。在這類等待事件中,name表明隊列的名稱,type表明隊列的類型,mode表明隊列的模式。使用以下的SQL能夠查詢到鎖的名稱和請求的mode值:

SELECT CHR(BITAND(P1,-16777216)/16777215)||

CHR(BITAND(P1, 16711680)/65535) "LOCK",

BITAND(P1, 65535) "MODE"

FROM V$SESSION_WAIT

WHERE EVENT IN ('enq: SQ - contention',

'DFS lock handle',

'enq: SV -  contention');

其中,MODE值以下表所示:

wpsBC5F.tmp 

使用以下的SQL能夠查詢SQSV2種鎖的解釋:

SELECT * FROM V$LOCK_TYPE D WHERE D.TYPE IN ('SV','SQ');

wpsBC60.tmp 

事實上,Oracle爲了管理序列使用了以下表所示的三種鎖

wpsBC61.tmp 

RAC上建立序列時,在賦予了CACHE屬性的狀態下,若沒有賦予ORDER屬性,則各節點將會把不一樣範圍的序列CACHE到內存上。好比,擁有兩個節點的RAC環境下,建立CACHE值爲100序列時,1號節點使用11002號節點使用101200。若兩個節點之間都經過遞增方式使用序列,必須賦予ORDER屬性。Oracle序列默認是NOORDER,若是設置爲ORDER,那麼在單實例環境沒有影響,在RAC環境,多實例實際緩存相同的序列,此時在多個實例併發取該序列的時候,會有短暫的資源競爭來在多實例之間進行同步。因次性能相比NOORDER要差,因此RAC環境非必須的狀況下不要使用ORDER,尤爲要避免NOCACHE ORDER組合。

有一點必需要注意,沒有賦予CACHE屬性時,無論ORDER屬性使用與否或RAC環境與否,一直等待row cache lock 事件。row cache lock是能夠在全局範圍內使用的鎖,單實例環境或多實例環境一樣能夠發生。若是使用了CACHE,若是此時DB崩潰了,那麼序列會從CACHE以後從新開始,在CACHE中沒有使用的序列會被跳過,這樣就會致使序列不連續。在建立序列時,CACHE的缺省值設定爲較小的20。所以建立併發量多的序列時,CACHE值應該取1000以上的較大值。

另外,若一次性同時建立許多會話時,有時會發生enq: SQ - contention等待事件。其緣由V$SESSION.AUDSID列值是利用序列建立的。Oracle在建立新的會話後,利用名爲SYS.AUDSES$序列NEXTVAL建立AUDSID值。Oracle 10gSYS.AUDSES$CACHE值默認20,但在Oracle 11gSYS.AUDSES$CACHE值默認爲10000,經過以下的SQL能夠查詢:

SELECT * FROM DBA_SEQUENCES D WHERE D.SEQUENCE_NAME ='AUDSES$';

wpsBC62.tmp 

2  RAC中的序列的ORDERNOORDER測試

2.1  測試1NOORDER屬性序列

NODE1

SQL> CREATE SEQUENCE SEQ_NOORDER_LHR START WITH 1 INCREMENT BY 1 CACHE 20 NOORDER;

SEQUENCE CREATED.

SQL> SELECT SEQ_NOORDER_LHR.NEXTVAL FROM DUAL;

   NEXTVAL

----------

         1

SQL> /

   NEXTVAL

----------

         2

SQL> /

   NEXTVAL

----------

         3       

 

NODE2

SQL>  SELECT SEQ_NOORDER_LHR.NEXTVAL FROM DUAL;

   NEXTVAL

----------

        21

SQL> /

   NEXTVAL

----------

        22

SQL> /

   NEXTVAL

----------

        23

NODE2上不是從4開始的,是從21開始的,由於NODE1已經CACHE20個。

2.2  測試2ORDER屬性序列

NODE1

SQL> CREATE SEQUENCE SEQ_ORDER_LHR START WITH 1 INCREMENT BY 1 CACHE 20 ORDER;

SEQUENCE CREATED.

SQL> SELECT SEQ_ORDER_LHR.NEXTVAL FROM DUAL;

NEXTVAL

----------

1

SQL> /

NEXTVAL

----------

2

SQL> /

NEXTVAL

----------

3

NODE2

SQL> SELECT SEQ_ORDER_LHR.NEXTVAL FROM DUAL;

NEXTVAL

----------

4

SQL> /

NEXTVAL

----------

5

SQL> /

NEXTVAL

----------

6

 

指定ORDER以後,取的序列就是順序的。

 

3  序列的CACHE值性能測試

SYS@lhrdb> CREATE SEQUENCE SEQ_NOCACHE_LHR NOCACHE;

 

Sequence created.

 

SYS@lhrdb> CREATE SEQUENCE SEQ_CACHE20_LHR  CACHE 20;

 

Sequence created.

 

SYS@lhrdb> CREATE SEQUENCE SEQ_CACHE100_LHR  CACHE 100;

 

Sequence created.

 

SYS@lhrdb> CREATE SEQUENCE SEQ_CACHE1000_LHR  CACHE 1000;

 

Sequence created.

 

SYS@lhrdb> SET TIMING ON;

SYS@lhrdb> DECLARE

  2   X NUMBER;

  3  BEGIN

  4   FOR I IN 1 .. 600000 LOOP

  5      SELECT SEQ_NOCACHE_LHR.NEXTVAL INTO X FROM DUAL;

  6   END LOOP;

  7  END;

  8  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:01:16.16

SYS@lhrdb> DECLARE

  2   X NUMBER;

  3  BEGIN

  4   FOR I IN 1 .. 600000 LOOP

  5      SELECT SEQ_CACHE20_LHR.NEXTVAL INTO X FROM DUAL;

  6   END LOOP;

  7  END;

  8  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:17.79

SYS@lhrdb> DECLARE

  2   X NUMBER;

  3  BEGIN

  4   FOR I IN 1 .. 600000 LOOP

  5      SELECT SEQ_CACHE100_LHR.NEXTVAL INTO X FROM DUAL;

  6   END LOOP;

  7  END;

  8  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:15.22

SYS@lhrdb> DECLARE

  2   X NUMBER;

  3  BEGIN

  4   FOR I IN 1 .. 600000 LOOP

  5      SELECT SEQ_CACHE1000_LHR.NEXTVAL INTO X FROM DUAL;

  6   END LOOP;

  7  END;

  8  /

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:13.74

SYS@lhrdb>

Oracle 11gR2測試,單實例數據庫單會話循環不間斷取600000個值。

類別

用時

NOCACHE

00:01:16.16

CACHE 20

00:00:17.79

CACHE 100

00:00:15.22

CACHE 1000

00:00:13.74

基本上cache 大於20的時候性能基本能夠接受,nocache的時候性能確實不好

4  等待事件模擬

4.1  row cache lock序列等待模擬

版本:11.2.0.4

CREATE SEQUENCE LHR_SEQ01 START WITH 1 NOCACHE ;

2-3個窗口分別執行以下的SQL語句:

DECLARE

  V_N NUMBER;

BEGIN

  FOR CUR IN 1 .. 100000000 LOOP

    SELECT LHR_SEQ01.NEXTVAL INTO V_N FROM DUAL;

  END LOOP;

END;

/

 

可使用vmstat 1查看CPU的使用率。

 

SELECT A.SID,

       A.BLOCKING_SESSION,

       A.SQL_ID,

       (SELECT B.SQL_TEXT FROM V$SQLAREA B WHERE B.SQL_ID = A.SQL_ID) SQL_TEXT,

A.P1

  FROM V$SESSION A

 WHERE A.STATUS = 'ACTIVE'

   AND A.EVENT = 'row cache lock';

wpsBC63.tmp 

SELECT * FROM V$ROWCACHE A WHERE A.CACHE#=13;

wpsBC64.tmp 

SELECT * FROM v$lock a WHERE a.sid IN (6,8,114) AND a.TYPE <>'AE';

wpsBC65.tmp 

SELECT * FROM V$lock_Type a WHERE A.TYPE='TO';

wpsBC66.tmp 

 

4.2  enq: SQ - contention模擬

版本:11.2.0.4

DROP  SEQUENCE LHR_SEQ01;

CREATE SEQUENCE LHR_SEQ01 START WITH 1 CACHE 2  NOORDER;

DECLARE

  V_N NUMBER;

BEGIN

  FOR CUR IN 1 .. 100000000 LOOP

    SELECT LHR_SEQ01.NEXTVAL INTO V_N FROM DUAL;

  END LOOP;

END;

/

 

 

 

SELECT A.SID,

       A.BLOCKING_SESSION,

       A.SQL_ID,

       (SELECT B.SQL_TEXT FROM V$SQLAREA B WHERE B.SQL_ID = A.SQL_ID) SQL_TEXT,

       CHR(BITAND(P1, -16777216) / 16777215) ||

       CHR(BITAND(P1, 16711680) / 65535) "Lock",

       BITAND(P1, 65535) "Mode",

       (SELECT A.OBJECT_NAME || ':' || A.OBJECT_TYPE

          FROM DBA_OBJECTS A

         WHERE A.OBJECT_ID = A.p2) OBJECT_NAME

  FROM V$SESSION A

 WHERE A.STATUS = 'ACTIVE'

   AND A.EVENT = 'enq: SQ - contention';

wpsBC67.tmp 

4.3  enq: SV -  contentionDFS lock handle模擬

DROP  SEQUENCE LHR_SEQ01;

CREATE SEQUENCE LHR_SEQ01 START WITH 1 CACHE 2   ORDER;

DECLARE

  V_N NUMBER;

BEGIN

  FOR CUR IN 1 .. 100000000 LOOP

    SELECT LHR_SEQ01.NEXTVAL INTO V_N FROM DUAL;

  END LOOP;

END;

/

版本:11.2.0.4

SELECT A.INST_ID,

       A.SID,

       A.BLOCKING_SESSION,

       A.SQL_ID,

       (SELECT B.SQL_TEXT FROM V$SQLAREA B WHERE B.SQL_ID = A.SQL_ID) SQL_TEXT,

       CHR(BITAND(P1, -16777216) / 16777215) ||

       CHR(BITAND(P1, 16711680) / 65535) "Lock",

       BITAND(P1, 65535) "Mode",

       (SELECT A.OBJECT_NAME || ':' || A.OBJECT_TYPE

          FROM DBA_OBJECTS A

         WHERE A.OBJECT_ID = A.P2) OBJECT_NAME,

       A.EVENT

  FROM GV$SESSION A

 WHERE A.STATUS = 'ACTIVE'

      --  AND A.EVENT = 'enq: SQ - contention'

   AND A.SID IN (225, 99, 193, 194)

   AND A.SQL_ID IS NOT NULL;

wpsBC78.tmp 

Oracle 10.2.0.5中:

wpsBC79.tmp 

注意,Oracle 10g表現爲:DFS lock handle,而Oracle 11g中表現爲enq: SV -  contention。我的測試版本,10g10.2.0.511g版本爲11.2.0.4

5  序列等待案例處理參考

有關隊列的更多介紹能夠參考:http://blog.itpub.net/26736162/viewspace-2126079/

【故障處理】序列cache值太小致使CPU利用率太高,鏈接地址爲:http://blog.itpub.net/26736162/viewspace-2123996/

2016-08-24

【故障處理】序列cache值太小致使CPU利用率太高

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771414&idx=1&sn=0cbc454bc7d5a513bbca6083958e2f34&scene=21#wechat_redirect

About Me

...............................................................................................................................

本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用

本文在itpubhttp://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和我的微信公衆號(xiaomaimiaolhr)上有同步更新

本文itpub地址:http://blog.itpub.net/26736162/viewspace-2127465/

本文博客園地址:http://www.cnblogs.com/lhrbest/p/6020872.html

本文pdf小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ羣:230161599     微信羣:私聊

聯繫我請加QQ好友(642808185),註明添加原因

2016-10-31 12:00 ~ 2016-11-01 19:00 在中行完成

文章內容來源於小麥苗的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解

版權全部,歡迎分享本文,轉載請保留出處

...............................................................................................................................

手機長按下圖識別二維碼或微信客戶端掃描下邊的二維碼來關注小麥苗的微信公衆號:xiaomaimiaolhr,免費學習最實用的數據庫技術。

wpsBC7A.tmp

相關文章
相關標籤/搜索