亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        Oracle阻塞(blockingblocked)實(shí)例詳解

        字號(hào):


            一、概述:
            阻塞是DBA經(jīng)常碰到的情形,尤其是不良的應(yīng)用程序設(shè)計(jì)所造成的阻塞將導(dǎo)致數(shù)據(jù)庫性能的嚴(yán)重下降,直至數(shù)據(jù)庫崩潰。對(duì)DBA而言,有必要知道如何定位到當(dāng)前系統(tǒng)有哪些阻塞,到底誰是阻塞者,誰是被阻塞者。本文對(duì)此給出了描述并做了相關(guān)演示。
            二、演示阻塞:
            --更新表,注,提示符scott@CNMMBO表明用戶為scott的session,用戶名不同,session不同。
            scott@CNMMBO> update emp set sal=sal*1.1 where empno=7788;
            1 row updated.
            scott@CNMMBO> @my_env
            SPID        SID  SERIAL# USERNAME    PROGRAM
            ------------ ---------- ---------- --------------- ------------------------------------------------
            11205       1073    4642 robin      oracle@SZDB (TNS V1-V3)
            --另起兩個(gè)session更新同樣的行,這兩個(gè)session都會(huì)處于等待,直到第一個(gè)session提交或回滾
            leshami@CNMMBO> update scott.emp set sal=sal+100 where empno=7788;
            goex_admin@CNMMBO> update scott.emp set sal=sal-50 where empno=7788;
            --下面在第一個(gè)session 查詢阻塞情況
            scott@CNMMBO> @blocker
            BLOCK_MSG                        BLOCK
            -------------------------------------------------- ----------
            pts/5 ('1073,4642') is blocking 1067,10438         1
            pts/5 ('1073,4642') is blocking 1065,4464          1
            --上面的結(jié)果表明session 1073,4642 阻塞了后面的2個(gè)
            --即session 1073,4642是阻塞者,后面2個(gè)session是被阻塞者
            --Author : Leshami
            --Blog  : http://blog.csdn.net/leshami
            --下面查詢正在阻塞的session id,SQL語句以及被阻塞的時(shí)間
            scott@CNMMBO> @blocking_session_detail.sql
            'SID='||A.SID||'WAITCLASS='||A.WAIT_CLASS||'TIME='||A.SECONDS_IN_WAIT||CHR(10)||'QUERY='||B.SQL_TEXT
            ------------------------------------------------------------------------
            sid=1067 Wait Class=Application Time=5995
             Query=update scott.emp set sal=sal+100 where empno=7788
            sid=1065 Wait Class=Application Time=225
             Query=update scott.emp set sal=sal-50 where empno=7788
            --下面的查詢阻塞時(shí)鎖的持有情況
            scott@CNMMBO> @request_lock_type
            USERNAME               SID TY LMODE    REQUEST      ID1    ID2
            ------------------------------ ---------- -- ----------- ----------- ---------- ----------
            SCOTT                1073 TX Exclusive  None      524319   27412
            LESHAMI               1067 TX None    Exclusive    524319   27412
            GOEX_ADMIN              1065 TX None    Exclusive    524319   27412
            --可以看到LESHAMI,GOEX_ADMIN 2個(gè)用戶都在請(qǐng)求524319/27412上的Exclusive鎖,而此時(shí)已經(jīng)被SCOTT加了Exclusive鎖
            --查詢阻塞時(shí)鎖的持有詳細(xì)信息
            scott@CNMMBO> @request_lock_detail
                SID USERNAME       OSUSER     TERMINAL         OBJECT_NAME     TY Lock Mode  Req_Mode
            ---------- -------------------- --------------- ------------------------- -------------------- -- ----------- --------------------
               1065 GOEX_ADMIN      robin      pts/1           EMP         TM Row Excl
               1065 GOEX_ADMIN      robin      pts/1           Trans-524319     TX --Waiting-- Exclusive
               1067 LESHAMI       robin      pts/0           EMP         TM Row Excl
               1067 LESHAMI       robin      pts/0           Trans-524319     TX --Waiting-- Exclusive
               1073 SCOTT        robin      pts/5           EMP         TM Row Excl
               1073 SCOTT        robin      pts/5           Trans-524319     TX Exclusive
            三、文中涉及到的相關(guān)SQL腳本完整代碼如下:
            robin@SZDB:~/dba_scripts/custom/sql> more my_env.sql
            SELECT spid, s.sid, s.serial#, p.username, p.program
            FROM v$process p, v$session s
            WHERE p.addr = s.paddr
               AND s.sid = (SELECT sid
                      FROM v$mystat
                      WHERE rownum = 1);
            robin@SZDB:~/dba_scripts/custom/sql> more blocker.sql
            col block_msg format a50;
            select c.terminal||' ('''||a.sid||','||c.serial#||''') is blocking '||b.sid||','||d.serial# block_msg, a.block
            from v$lock a,v$lock b,v$session c,v$session d
             where a.id1=b.id1
             and a.id2=b.id2
             and a.block>0
             and a.sid <>b.sid
             and a.sid=c.sid
             and b.sid=d.SID;
            robin@SZDB:~/dba_scripts/custom/sql> more blocking_session_detail.sql
            --To find the query for blocking session
            --Access Privileges: SELECT on v$session, v$sqlarea
            SELECT   'sid='
                 || a.SID
                 || ' Wait Class='
                 || a.wait_class
                 || ' Time='
                 || a.seconds_in_wait
                 || CHR (10)
                 || ' Query='
                 || b.sql_text
              FROM v$session a, v$sqlarea b
              WHERE a.blocking_session IS NOT NULL AND a.sql_address = b.address
            ORDER BY a.blocking_session
            /
            robin@SZDB:~/dba_scripts/custom/sql> more request_lock_type.sql
            --This script generates a report of users waiting for locks.
            --Access Privileges: SELECT on v$session, v$lock
            SELECT sn.username, m.sid, m.type,
                DECODE(m.lmode, 0, 'None',
                        1, 'Null',
                        2, 'Row Share',
                        3, 'Row Excl.',
                        4, 'Share',
                        5, 'S/Row Excl.',
                        6, 'Exclusive',
                    lmode, ltrim(to_char(lmode,'990'))) lmode,
                DECODE(m.request,0, 'None',
                         1, 'Null',
                         2, 'Row Share',
                         3, 'Row Excl.',
                         4, 'Share',
                         5, 'S/Row Excl.',
                         6, 'Exclusive',
                         request, ltrim(to_char(m.request,
                    '990'))) request, m.id1, m.id2
            FROM v$session sn, v$lock m
            WHERE (sn.sid = m.sid AND m.request != 0)
                OR (sn.sid = m.sid
                    AND m.request = 0 AND lmode != 4
                    AND (id1, id2) IN (SELECT s.id1, s.id2
               FROM v$lock s
                        WHERE request != 0
                   AND s.id1 = m.id1
                            AND s.id2 = m.id2)
                    )
            ORDER BY id1, id2, m.request;
            robin@SZDB:~/dba_scripts/custom/sql> more request_lock_detail.sql
            set linesize 190
            col osuser format a15
            col username format a20 wrap
            col object_name format a20 wrap
            col terminal format a25 wrap
            col Req_Mode format a20
            select B.SID, C.USERNAME, C.OSUSER, C.TERMINAL,
                DECODE(B.ID2, 0, A.OBJECT_NAME,
                  'Trans-'||to_char(B.ID1)) OBJECT_NAME,
               B.TYPE,
                DECODE(B.LMODE,0,'--Waiting--',
                       1,'Null',
                       2,'Row Share',
                       3,'Row Excl',
                      4,'Share',
                       5,'Sha Row Exc',
                  6,'Exclusive',
                        'Other') "Lock Mode",
                DECODE(B.REQUEST,0,' ',
                       1,'Null',
                       2,'Row Share',
                       3,'Row Excl',
                       4,'Share',
                       5,'Sha Row Exc',
                       6,'Exclusive',
                       'Other') "Req_Mode"
             from DBA_OBJECTS A, V$LOCK B, V$SESSION C
            where A.OBJECT_ID(+) = B.ID1
             and B.SID = C.SID
             and C.USERNAME is not null
            order by B.SID, B.ID2;