Oracle 死锁、指标汇总

一、Oracle RAC 架构 

       待~

"SYS"."V_$SESSION" 与 "SYS"."GV_$SESSION"的区别
    哪个列可以区分V$和GV$: 添加条件 S.INST_ID = USERENV('INSTANCE')

SELECT * FROM GV$SESSION S WHERE S.USERNAME = 'SCOTT' AND S.INST_ID = USERENV('INSTANCE')

    查看当前是第几个实例

SELECT USERENV('INSTANCE') FROM DUAL;

二、Oracle 死锁的查询与处理

-- 1.查看EVENT字段中是否出现row block,则表示此SQL被阻塞
SELECT
    'alter system disconnect session ''' || s.sid || ', ' || s.serial# || ''' immediate;'  kill_session,
    s.inst_id,
    s.event, --是否含有row block
    s.blocking_session, -- 阻塞别人SQL的那条sid
    s.last_call_et,
    a.sql_text,
    s.machine,
    s.osuser,
    s.program,
    s.module,
    s.action,
    s.username,
    a.sql_id,
    a.child_number,
    s.logon_time,
    s.service_name,
    a.sql_fulltext
FROM
    gv$session s,
    gv$sql a  
WHERE
    s.sql_id = a.sql_id (+)
    AND   s.sql_child_number = a.child_number (+)
    AND   s.status = 'ACTIVE'
    AND   s.username <> 'SYS'
    AND   s.last_call_et > 10
    AND   s.inst_id = a.inst_id
ORDER BY  s.last_call_et DESC; 
       
-- 2.知道堵塞别人的sid后,根据sid和inst_id 查找出serial#
select * from gv$session where sid=1522 and inst_id=2;

-- 3.然后去对应的实例上,替换'sid,serial#'的sid与serial#,杀死阻塞别人的session
alter system disconnect session 'sid,serial#' immediate;

-- 4.确认有没有杀干净,正常情况下结果为空,否则用步骤3再杀一次
select a.spid,b.sid,b.serial#,b.username,b.osuser,a.program from gv$process a,gv$session b where a.ADDR=b.PADDR and b.STATUS='KILLED'
and a.inst_id = b.inst_id;

-- 5.通过步骤1的SQL_ID,确认有没有同一SQL_ID,但status是INACTIVE的,用步骤3杀掉
select * from gv$session a where a.SQL_ID='fmcuc8whh75ys';

三、Oracle查询实时运行语句及时间花费

--查询实时运行的语句
SELECT
    'ps -ef | grep '
    || spid ps,
    b.sid,
    b.username,
    a.sql_id,
    b.inst_id,
    b.event,
    round(b.last_call_et / 3600) "ses_T(小时)",
    trunc( ( (a.elapsed_time / DECODE(executions,0,1,executions) ) / 1000000),2) "etime(s)",
    round(a.buffer_gets / DECODE(a.executions,0,1,a.executions) ) per_bu,
    a.executions,
    a.sql_fulltext fullsql,
    a.sql_text,
    a.disk_reads,
    a.buffer_gets,
    b.osuser,
    b.machine,
    b.program,
    a.module,
    a.cpu_time,
    a.last_load_time,
    a.last_active_time
FROM
    gv$sqlarea a, gv$session b, gv$process p
WHERE
    executions >= 0
    AND   b.status = 'ACTIVE'
    AND   a.hash_value = b.sql_hash_value
    AND   a.sql_id = b.sql_id
    AND   b.paddr = p.addr
    AND   a.inst_id = b.inst_id
    AND   b.inst_id = p.inst_id
ORDER BY round(b.last_call_et / 3600) desc;
    --( cpu_time / DECODE(executions,0,1,executions) ) DESC,a.buffer_gets DESC,a.executions DESC,a.sql_id;

四、Oracle各项指标查询

--1.Oracle正在执行的语句和拼接杀进程
SELECT 'ALTER SYSTEM KILL SESSION ''' || A.SID ||',' ||A.SERIAL#||''' IMMEDIATE;' AS KILL_SESSION,
        A.SID,
        A.SERIAL#,
        A.USERNAME,
        A.INST_ID,
        A.MACHINE,
        A.PADDR,
        B.SPID,
        C.SQL_TEXT,
        C.SQL_FULLTEXT       
FROM GV$SESSION A, GV$PROCESS B, GV$SQLAREA C 
WHERE A.PADDR = B.ADDR AND A.SQL_HASH_VALUE = C.HASH_VALUE 
      --AND A.OSUSER = '系统用户名'
      AND A.INST_ID = B.INST_ID AND B.INST_ID = C.INST_ID;

      
--1.1 当前用户正在执行的语句
SELECT
        a.sid,
        a.serial#,
        a.paddr,
        a.username,
        a.inst_id,
        a.machine,
        A.SQL_ID,
        A.PREV_SQL_ID,
        nvl(a.sql_id,a.prev_sql_id) sql_id,
        b.sql_text,
        b.sql_fulltext,
        b.executions,
        b.first_load_time,
        b.last_load_time,
        b.last_active_time,
        b.disk_reads,
        b.direct_writes,
        b.buffer_gets
FROM            
gv$session a, gv$sql b
WHERE a.username = sys_context('USERENV','CURRENT_USER') -- 获取当前的用户
AND a.status = 'ACTIVE'
AND nvl(a.sql_id,a.prev_sql_id) = b.sql_id
AND a.inst_id = b.inst_id;

      
--2.锁表语句和拼接杀进程
SELECT 'ALTER SYSTEM KILL SESSION ''' || A.SID ||',' ||A.SERIAL#||''' IMMEDIATE;' AS KILL_SESSION,
        B.SESSION_ID,
        A.SERIAL#,
        A.EVENT,             --是否含有row block
        A.BLOCKING_SESSION,  -- 阻塞别人SQL的那条sid
        B.LOCKED_MODE,
        B.ORACLE_USERNAME,
        A.USER#,
        B.OS_USER_NAME,
        A.MACHINE,
        A.TERMINAL,
        C.SQL_TEXT,
        C.ACTION
FROM GV$SESSION A, GV$LOCKED_OBJECT B, GV$SQLAREA C 
WHERE A.SID = B.SESSION_ID AND A.PREV_SQL_ADDR = C.ADDRESS
      AND A.INST_ID = B.INST_ID AND B.INST_ID = C.INST_ID
      AND A.STATUS = 'ACTIVE' AND A.USERNAME <> 'SYS'
ORDER BY A.SID, A.SERIAL#;

--3.最耗费CPU
SELECT  TRUNC(CPU_TIME / 1000000 / decode(executions, 0, 1, executions), 2) CPU_SEC,
        BUFFER_GETS,
        DISK_READS,
        SORTS,
        EXECUTIONS,
        SQL_TEXT,
        ROWS_PROCESSED
FROM GV$SQLSTATS ORDER BY CPU_SEC DESC;

--4.汇总指标
SELECT
        t.inst_id,
        t.sql_id,
        t.last_active_time,
        t.sql_profile,         --如果该字段有值,就是按固化走执行计划
        t.plan_hash_value,
        t.child_number      "执行计划版本号",
        trunc( (t.cpu_time / t.executions / 1000000),4)  "每次cpu时间",
        trunc( (t.elapsed_time - t.cpu_time) / t.executions / 1000000,4) "每次等待时间",
        t.executions        "总执行次数",
        round(t.rows_processed / t.executions,2) "平均返回行数",
        trunc(t.elapsed_time / t.executions / 1000000,4) "每次执行(秒)",
        trunc( (t.buffer_gets / t.executions / 1000000),4) "每次逻辑读",
        trunc( (t.disk_reads / t.executions / 1000000),4) "每次物理读",
        trunc( (t.cluster_wait_time / t.executions / 1000000),4) "每次集群等待",
        trunc( (t.user_io_wait_time / t.executions / 1000000),4) "每次io等待",
        trunc( (t.application_wait_time / t.executions / 1000000),4) "每次应用等待",
        trunc( (t.concurrency_wait_time / t.executions / 1000000),4) "每次并发等待",
        t.first_load_time   "首次硬解析时间",
        t.last_load_time    "上次硬解析时间",
        t.module,
        t.action,
        t.parsing_schema_name,
        trunc(t.elapsed_time / 1000000,4) "执行时间(秒)",
        trunc(t.cpu_time / 1000000,4) "cpu时间",
        t.parse_calls       "总解析次数",
        t.loads             "硬解析次数",
        t.buffer_gets,
        t.cluster_wait_time,
        t.user_io_wait_time,
        t.application_wait_time,
        t.concurrency_wait_time,
        t.plan_hash_value,
        t.sql_fulltext
    FROM
        gv$sql t
    WHERE
        t.executions > 0
    ORDER BY
        t.cpu_time DESC;

--5.最耗缓存
SELECT
    sql_fulltext   sql,
    buffer_gets,
    executions,
    buffer_gets / executions "Gets/Exec",
    hash_value,
    address,
    last_active_time
FROM
    v$sqlarea
WHERE
    buffer_gets > 10000
ORDER BY
    buffer_gets DESC;
    
    
--6.最多物理读取
SELECT
    sql_fulltext   sql,
    disk_reads,
    executions,
    disk_reads / executions "Reads/Exec",
    hash_value,
    address,
    last_active_time
FROM
    v$sqlarea
WHERE
    disk_reads > 1000
ORDER BY
    disk_reads DESC;
 
    
--7.最多执行
SELECT
    substr(sql_text,1,40) sql,
    sql_fulltext,
    executions,
    rows_processed,
    rows_processed / executions "Rows/Exec",
    hash_value,
    address,
    last_active_time
FROM
    v$sqlarea
WHERE
    executions > 100
ORDER BY
    executions DESC;


-- 8.最耗内存
SELECT
    substr(sql_text,1,40) sql,
    sharable_mem,
    executions,
    hash_value,
    address,
    last_active_time
FROM
    v$sqlarea
WHERE
    sharable_mem > 1048576
ORDER BY
    sharable_mem DESC;
      
--9.阻塞等待语句
SELECT
    blocksession.sid          AS block_session_sid,
    blocksession.serial#      AS block_session_serial#,
    blocksession.username     AS block_session_username,
    blocksession.osuser       AS block_session_osuser,
    blocksession.machine      AS block_session_machine,
    blocksession.status       AS block_session_status,
    blockobject.object_name   AS blocked_table,
    waitsession.sid           AS wait_session_sid,
    waitsession.serial#       AS wait_session_serial#,
    waitsession.username      AS wait_session_username,
    waitsession.osuser        AS wait_session_osuser,
    waitsession.machine       AS wait_session_machine,
    waitsession.status        AS wait_session_status
FROM
    v$lock blocklock,
    v$lock waitlock,
    v$session blocksession,
    v$session waitsession,
    v$locked_object lockedobject,
    dba_objects blockobject
WHERE
    blocklock.block = 1
    AND blocklock.sid != waitlock.sid
    AND blocklock.id1 = waitlock.id1
    AND blocklock.id2 = waitlock.id2
    AND blocklock.sid = blocksession.sid
    AND waitlock.sid = waitsession.sid
    AND lockedobject.session_id = blocksession.sid
    AND lockedobject.object_id = blockobject.object_id;    
 
--10.失效索引查询与重建    
SELECT
    'alter index '
    || a.index_name
    || ' rebuild online;',
    a.*
FROM
    user_indexes a
WHERE
    a.status <> 'VALID'
    AND a.index_name NOT LIKE '%$$';

参考资料:

https://www.cnblogs.com/shouke/p/17437893.html

https://docs.oracle.com/database/121/REFRN/GUID-2B9340D7-4AA8-4894-94C0-D5990F67BE75.htm#REFRN30246

https://docs.oracle.com/database/121/REFRN/GUID-09D5169F-EE9E-4297-8E01-8D191D87BDF7.htm#REFRN30259

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-SESSION.html

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/V-LOCKED_OBJECT.html#GUID-3F9F26AA-197F-4D36-939E-FAF1EFD8C0DD

相关推荐

  1. Oracle 指标汇总

    2024-03-14 06:22:04       17 阅读
  2. 解决Oracle问题

    2024-03-14 06:22:04       6 阅读
  3. Oracle机制之分类和

    2024-03-14 06:22:04       8 阅读
  4. Windows下Oracle处理过程

    2024-03-14 06:22:04       11 阅读
  5. 2024-03-14 06:22:04       18 阅读
  6. 以及如何避免

    2024-03-14 06:22:04       15 阅读
  7. 资源、、如何监测

    2024-03-14 06:22:04       12 阅读
  8. Oracle Foreign key 无索引导致的 deadlock 或者hang

    2024-03-14 06:22:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 06:22:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 06:22:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 06:22:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 06:22:04       18 阅读

热门阅读

  1. 计算机网络——Internet结构和ISP

    2024-03-14 06:22:04       19 阅读
  2. 什么是API密钥及其安全使用指南?

    2024-03-14 06:22:04       20 阅读
  3. 自然语言处理(NLP)技术的概念及优势

    2024-03-14 06:22:04       25 阅读
  4. 电动汽车安全吗?

    2024-03-14 06:22:04       23 阅读
  5. ROS 语音交互(二)nlp

    2024-03-14 06:22:04       24 阅读
  6. samba服务器的配置

    2024-03-14 06:22:04       18 阅读
  7. HDOJ 2036

    2024-03-14 06:22:04       19 阅读
  8. Haproxy

    Haproxy

    2024-03-14 06:22:04      22 阅读
  9. es6面试题

    2024-03-14 06:22:04       19 阅读
  10. 控件交互与视图交互的区别

    2024-03-14 06:22:04       20 阅读