• Oracle 学习总结


    搜集常用诊断sql

    https://blog.csdn.net/yangshangwei/article/details/52449489

    lock相关:

    1. 查看lock, 打开两个事物,事物1更新一行未提交,事物2更新同一行,互锁,查看得到结果

    select a.USERNAME        登录Oracle用户名,
           a.MACHINE         计算机名,
           SQL_TEXT,
           b.FIRST_LOAD_TIME,
           b.SQL_FULLTEXT,
    a.sid
    from v$sqlarea b, v$session a where a.sql_hash_value = b.hash_value order by b.FIRST_LOAD_TIME desc;

    2. 杀死session

    alter system kill session 'sid'
    
    

    3. 查询导致死锁的sql

    SELECT s.sid, q.sql_text
    FROM v$sqltext q, v$session s
    WHERE q.address = s.sql_address AND s.sid = 52 -- 这个&sid 是第一步查询出来的
    ORDER BY piece;

    4. 查看锁会话的关系

    SELECT s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||
           ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||
           s2.sid || ' ) ' AS blocking_status
      FROM v$lock l1, v$session s1, v$lock l2, v$session s2
     WHERE s1.sid = l1.sid
       AND s2.sid = l2.sid
       AND l1.BLOCK = 1
       AND l2.request > 0
       AND l1.id1 = l2.id1
       AND l2.id2 = l2.id2;

    5. 查看资源状态 select * from tt for update锁定资源之后

    select object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号
    from v$locked_object l , dba_objects o , v$session s , v$process p
    where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;

    查看绑定变量使用:

     select bind.sql_id, sql.sql_text, bind.name, bind.datatype_string, bind.last_captured, bind.value_string  
      from v$sql_bind_capture bind, v$sql sql where bind.sql_id = sql.sql_id  order by LAST_CAPTURED, POSITION;

    等待/争用:

    1. 监控实例等待

    select event,sum(decode(wait_Time,0,0,1)) "Prev", 
    sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" 
    from v$session_Wait 
    group by event order by 4 ;

    2. 回滚段争用

    select name, waits, gets, waits / gets "Ratio"
      from v$rollstat a, v$rollname b
     where a.usn = b.usn;

    3. 查看回滚段名称及大小

    SELECT segment_name,
           tablespace_name,
           r.status,
           (initial_extent / 1024) initialextent,
           (next_extent / 1024) nextextent,
           max_extents,
           v.curext curextent
      FROM dba_rollback_segs r, v$rollstat v
     WHERE r.segment_id = v.usn(+)
     ORDER BY segment_name;

    数据表和表空间

    1. 查看数据表空间大小

    select segment_name, tablespace_name, bytes, blocks
      from user_segments
     where segment_type = 'TABLE' and segment_name='TT'
     ORDER BY bytes DESC, blocks DESC;

    2. 查询表空间碎片的大小

    select tablespace_name,round(sqrt(max(blocks)/sum(blocks))*
               (100/sqrt(sqrt(count(blocks)))),2) FSFI
        from dba_free_space
        group by tablespace_name order by 1;

    3. 表空间占用磁盘的情况

    select 
      b.file_id                                 文件ID号,
      b.tablespace_name                         表空间名,
      b.bytes                                 字节数,
      (b.bytes-sum(nvl(a.bytes,0)))                 已使用,
      sum(nvl(a.bytes,0))                         剩余空间,
      sum(nvl(a.bytes,0))/(b.bytes)*100         剩余百分比 
    from dba_free_space a,dba_data_files b 
      where a.file_id=b.file_id 
      group by b.tablespace_name,b.file_id,b.bytes 
      order by b.file_id;

    4. 查看表大小

    SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTESE
      FROM USER_SEGMENTS
     WHERE SEGMENT_TYPE = 'TABLE'
     GROUP BY SEGMENT_NAME
     order by MBYTESE desc;

    5. 查询表空间物理文件的大小

    SELECT tablespace_name,
           file_id,
           file_name,
           round(bytes / (1024 * 1024), 0) total_space
      FROM dba_data_files
     ORDER BY tablespace_name;

    sql语句相关

    1.性能最差sql

    SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text 
                    FROM v$sqlarea 
                    ORDER BY disk_reads DESC) 
    WHERE ROWNUM<100;

    2. 读磁盘超过100次的sql

    select * from sys.v_$sqlarea where disk_reads>100;

    3.查看较耗资源的sql

    Select se.username,
              se.sid,
              su.extents,
              su.blocks * to_number(rtrim(p.value)) as Space,
              tablespace,
              segtype,
              sql_text
         from v$sort_usage su, v$parameter p, v$session se, v$sql s
        where p.name = 'db_block_size'
          and su.session_addr = se.saddr
          and s.hash_value = su.sqlhash
          and s.address = su.sqladdr
        order by se.username, se.sid;

    4.查看执行频繁的sql

    select * from sys.v_$sqlarea where executions>100;

    5.查看正在执行的sql及触发用户

    SELECT b.sid oracleID,
        b.username 登录Oracle用户名,
        b.serial#,
        spid 操作系统ID,
        paddr,
        sql_text 正在执行的SQL,
        b.machine 计算机名
    FROM v$process a, v$session b, v$sqlarea c
    WHERE a.addr = b.paddr
      AND b.sql_hash_value = c.hash_value
    select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
     from v$session a, v$sqlarea b 
    where a.sql_address = b.address 

    6.查看oracle执行过的语句及执行人

    ---执行过的
    select a.USERNAME        登录Oracle用户名,
           a.MACHINE         计算机名,
           SQL_TEXT,
           b.FIRST_LOAD_TIME,
           b.SQL_FULLTEXT
      from v$sqlarea b, v$session a
     where a.sql_hash_value = b.hash_value
       and b.FIRST_LOAD_TIME between '2016-11-01/09:24:47' and
           '2016-11-31/09:24:47'
     order by b.FIRST_LOAD_TIME desc;

    7.查询缓存命中率

    select sum(pins) "Executions",
           sum(reloads) "Cache Misses",
           sum(reloads) / sum(pins)
    from v$librarycache;

    SGA使用率相关

    1. sga命中率

    select a.value + b.value "logical_reads", 
           c.value "phys_reads", 
           round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" 
    from v$sysstat a, v$sysstat b, v$sysstat c 
    where a.statistic# = 38 and 
          b.statistic# = 39 and 
          c.statistic# = 40 ;

     索引相关

    1.查看表的索引

    select index_name,table_name,num_rows From dba_indexes i Where i.table_name ='TT';

    2.查看用户下所有索引

     create index itt on tt (id)
     
     select user_indexes.table_name,
           user_indexes.index_name,
           uniqueness,
           column_name
      from user_ind_columns, user_indexes
     where user_ind_columns.index_name = user_indexes.index_name
       and user_ind_columns.table_name = user_indexes.table_name and user_ind_columns.table_name='TT'
     order by user_indexes.table_type,
              user_indexes.table_name,
              user_indexes.index_name,
              column_position;

    3.针对当前用户某个表的监控索引使用

    execute dbms_stats.gather_table_stats(ownname => 'SYSTEM', tabname =>'TT', estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO');
    ALTER INDEX ITT MONITORING USAGE;
    select id from tt where id=1;
    
    SELECT * FROM V$OBJECT_USAGE;

  • 相关阅读:
    python给邮箱发送消息
    shell 的echo和 printf
    shell 基本运算符
    shell傳遞參數
    shell變量和數組
    pycharm的放大和缩小字体的显示 和ubunt的截圖工具使用 ubuntu上安装qq微信等工具
    flask的g对象
    mysqlcilent的安装
    Ubuntu安装 和 python开发
    使用python来建立http服务
  • 原文地址:https://www.cnblogs.com/it-worker365/p/8745719.html
Copyright © 2020-2023  润新知