zoukankan      html  css  js  c++  java
  • DBA日常维护SQL整理

    database 概况信息检查
    # 检查 database 基本信息
    select * from v$version;
    select name ,open_mode,log_mode from v$database;
    select instance_number,instance_name ,status from gv$instance;
    show parameter cpu_count
    show parameter block_size
    select group#,thread#,members,bytes/1024/1024 from gv$log;
    show sga
    select count(*) from v$controlfile
    select count(*) from v$tempfile;
    select count(*) from v$datafile;

    查看数据文件信息
    # 检查表空间数据文件信息
    col tablespace_name for a30
    select tablespace_name , sum(bytes)/1024/1024 from dba_temp_files group by tablespace_name;
    # 检查表空间
    SELECT
    TABLESPACE_NAME,EXTENT_MANAGEMENT,ALLOCATION_TYPE,SEGMENT_SPACE
    _MANAGEMENT FROM DBA_TABLESPACES;
    # 检查数据文件状态
    select count(*),status from v$datafile group by status;
    # 检查表空间使用情况
    select
    f.tablespace_name,
    a.total,
    f.free,(a.total-f.free)/1024 "used SIZE(G)"
    ,round((f.free/a.total)*100) "% Free"
    from
    (select tablespace_name, sum(bytes/(1024*1024)) total from dba_data_files group by
    tablespace_name) a,
    (select tablespace_name, round(sum(bytes/(1024*1024))) free from dba_free_space
    group by tablespace_name) f
    WHERE a.tablespace_name = f.tablespace_name(+)
    order by "% Free"
    /
    # 查询临时 segment 使用情况
    COL username FORMAT a10;
    COL segtype FORMAT a10;
    SELECT username, segtype, extents "Extents Allocated"
    ,blocks "Blocks Allocated"
    FROM v$tempseg_usage;
    # 查看数据文件信息 , 若文件较多可以根据需要字段进行排序 输出 top 10

    col datafile for a60
    SELECT fs.phyrds "Reads", fs.phywrts "Writes"
    ,fs.avgiotim "Average I/O Time", df.name "Datafile"
    FROM v$datafile df, v$filestat fs WHERE df.file# = fs.file#;
    # 查看所有数据文件 i/ o 情况 , 若文件太多 , 可以改写 为 top 10 select *( order by xx desc) where
    rownum<=10。其中phyrds为物理读的次数极为Reads,phywrts为物理写的次数极为Writes,phyblkrd为物理块读的次数即为br,phyblkwrt为物理写的次数即为bw。readtime为耗费在物理读上的总时间极为RTime,writetim为耗费在物理写上的总时间即为WTime。这两个值只有在参数timed_statistics参数为true时才有效。
    COL ts FORMAT a10 HEADING "Tablespace";
    COL reads FORMAT 999990;
    COL writes FORMAT 999990;
    COL br FORMAT 999990 HEADING "BlksRead";
    COL bw FORMAT 999990 HEADING "BlksWrite";
    COL rtime FORMAT 999990;
    COL wtime FORMAT 999990;
    SELECT ts.name AS ts, fs.phyrds "Reads", fs.phywrts "Writes"
    ,fs.phyblkrd AS br, fs.phyblkwrt AS bwJava 获取指定时间
    ,fs.readtim "RTime", fs.writetim "WTime"
    FROM v$tablespace ts, v$datafile df, v$filestat fs
    WHERE ts.ts# = df.ts# AND df.file# = fs.file#
    UNION
    SELECT ts.name AS ts, ts.phyrds "Reads", ts.phywrts "Writes",ts.phyblkrd AS br, ts.phyblkwrt AS bw
    ,ts.readtim "RTime", ts.writetim "WTime"
    FROM v$tablespace ts, v$tempfile tf, v$tempstat ts
    WHERE ts.ts# = tf.ts# AND tf.file# = ts.file# ORDER BY 1;
    # 获取 top 10 热 segment

    set linesize 180
    col object_name for a40
    select * from
    (select
    ob.owner, ob.object_name, sum(b.tch) Touchs
    from x$bh b , dba_objects ob
    where b.obj = ob.data_object_id
    and b.ts# > 0
    group by ob.owner, ob.object_name
    order by sum(tch) desc)
    where rownum <=10
    # 判断物理读最多的 object

    select * from (select owner,object_name,value from v$segment_statistics where
    statistic_name='physical reads' order by value desc) where rownum<=10
    # 查看热点数据文件 ( 从单块读取时间判断 )

    col FILE_NAME for a60
    set linesize 180
    SELECT t.file_name,
    t.tablespace_name,
    round(s.singleblkrdtim/s.singleblkrds, 2) AS CS,
    s.READTIM,
    s.WRITETIM
    FROM v$filestat s, dba_data_files t
    WHERE s.file# = t.file_id and s.singleblkrds <>0 and rownum<=10 order by cs desc
    查看redo
    # 检查日志切换频率
    select sequence#,to_char(first_time,'yyyymmdd_hh24:mi:ss')
    firsttime,round((first_time-lag(first_time) over(order by first_time))*24*60,2) minutes from
    v$log_history where first_time > sysdate - 1 order by first_time ,minutes;
    # 检查 lgwr i/o 性能 (time_waited/total_waits:表示平均lgwr写入完成时间若>1表示写入过慢 )
    select total_waits,time_waited,average_wait,time_waited/total_waits as avg from
    v$system_event where event = 'log file parallel write';
    # 查询 redo block size

    select max(lebsz) from x$kccle;
    # 查看 user commit 次数
    select to_number(value,99999999999) from v$sysstat where name='user commits';
    # 查看系统运行时间
    select (sysdate - startup_time)*24*60*60 as seconds from v$instance
    # 计算出每秒用户提交次数
    select user_commit 次数 / 系统运行时间 from dual;
    # 计算出每个事务平均处理多少个 redo block
    select value from v$sysstat where name = 'redo blocks written';
    select a.redoblocks/b.trancount from (select value redoblocks from v$sysstat where name='redo
    blocks written') a ,(select value trancount from v$sysstat where name='user commits') b
    sga,pga, 命中率
    # sga,pga, 命中率
    # 检查 sga
    show sga
    select * from v$sga;
    # 查看buffer cache设置建议
    select size_for_estimate, estd_physical_read_factor,
    to_char(estd_physical_reads,99999999999999999999999) as"estd_physical_reads" from
    v$db_cache_advice where name = 'DEFAULT';
    COL pool FORMAT a10;
    SELECT (SELECT ROUND(value/1024/1024,0) FROM v$parameter
    WHERE name = 'db_cache_size') "Current Cache(Mb)"
    ,name "Pool", size_for_estimate "Projected Cache(Mb)"
    ,ROUND(100-estd_physical_read_factor,0) "Cache Hit Ratio%"
    FROM v$db_cache_advice
    WHERE block_size = (SELECT value FROM v$parameter
    WHERE name = 'db_block_size')
    ORDER BY 3;
    # 查看 pga
    show parameter pga
    # 查看 cache 池
    show parameter cache
    # 查看 buffer cache 中 defalut pool 命中率
    select name,1-(physical_reads)/(consistent_gets+db_block_gets)
    from v$buffer_pool_statistics;
    # 检查 shared pool
    show parameter shared
    # 检查 shared pool 中 library cache
    select namespace,pinhitratio from v$librarycache;
    # 检查整体命中率 (library cache)
    select sum(pinhits)/sum(pins) from v$librarycache;
    select sum(pins) "hits",
    sum(reloads) "misses",
    sum(pins)/(sum(pins)+sum(reloads)) "Hits Ratio"
    from v$librarycache;
    # 检查 shared pool free space
    SELECT * FROM V$SGASTAT
    WHERE NAME = 'free memory'
    AND POOL = 'shared pool';
    # 每个子shared pool 由单独的 shared pool latch保护,查看他们的命中率 shared pool latch,用于shared pool空间回收分配使用的latch
    col name format a15
    select addr,name,gets,misses,1-misses/gets from v$latch_children where name='shared pool';
    # 使用 v$shared_pool_advice 计算不同 shared pool 大小情况下,响应时间, S 单位
    SELECT 'Shared Pool' component,
    shared_pool_size_for_estimate estd_sp_size,
    estd_lc_time_saved_factor parse_time_factor,
    CASE
    WHEN current_parse_time_elapsed_s + adjustment_s < 0 THEN
    0
    ELSE
    current_parse_time_elapsed_s + adjustment_s
    END response_time
    FROM (SELECT shared_pool_size_for_estimate,
    shared_pool_size_factor,
    estd_lc_time_saved_factor,
    a.estd_lc_time_saved,
    e.VALUE / 100 current_parse_time_elapsed_s,
    c.estd_lc_time_saved - a.estd_lc_time_saved adjustment_s FROM v$shared_pool_advice a,
    (SELECT * FROM v$sysstat WHERE NAME = 'parse time elapsed') e,
    (SELECT estd_lc_time_saved FROM v$shared_pool_advice
    WHERE shared_pool_size_factor = 1) c)
    /
    # 查看 shared pool 中 各种类型的 chunk 的大小数量
    SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
    To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG
    SIzE"
    FROM X$KSMSP GROUP BY KSMCHCLS;
    # 查看是否有库缓冲有关的等待事件
    select sid,seq#,event,p1,p1raw,p2,p2raw,p3,p3raw,state from v$session_wait where event like
    'library%';
    # 查询 sga 中各个 pool 情况
    COL name FORMAT a32;
    SELECT pool, name, bytes FROM v$sgastat
    WHERE pool IS NULL
    OR pool != 'shared pool' OR (pool = 'shared pool'
    AND (name IN('dictionary cache','enqueue','library
    cache','parameters',
    'processes','sessions','free memory')))
    ORDER BY pool DESC NULLS FIRST, name;
    SELECT * FROM V$SGAINFO;
    # 查看使用 shard_pool 保留池情况
    SELECT request_misses, request_failures, free_space
    FROM v$shared_pool_reserved;
    Oracle 专门从共享池内置出一块区域来来分配内存保持这些大块。这个保留共享池的默认大小是共享池的5%(_shared_pool_reserved_pct 5 控制 ) oracle 建设置为 10% 。大小通过参数 SHARED_POOL_RESERVED_SIZE 改。它是从共享池中分配,不是直接从 SGA 中分配的,它是共享池的保留部分,专门用于存储大块段#shared pool 中内存大于 _SHARED_POOL_RESERVED_MIN_ALLOC 将放入 shared pool 保留池 , 保留池维护一个单独的 freelist,lru ,并且不会在 lru 列表存recreatable 类型 chunks ,普通 shared pool 的释放与 shared pool 保留池无关。
    # 关于设置 SHARED_POOL_RESERVED_SIZE
    #1.如果系统出现ora-04031, 发现请求内存都是大于 _SHARED_POOL_RESERVED_MIN_ALLOC (default 10GR2 4400) , 且v$shared_pool_reserved 中有大量 REQUEST_MISSES( 并且可以看下LAST_MISS_SIZE )表示 SHARED_POOL_RESERVED_SIZE 太小了需要大的内存的请求失败 , 那么需要加大SHARED_POOL_RESERVED_SIZE
    #2. 如果 ora-04031 请求内存出现在 4100-4400 并造成 shared pool lru 合并 , 老化换出内存 , 可以调小 _SHARED_POOL_RESERVED_MIN_ALLOC 让此部分内存进入shared reserved pool, 相应的加大SHARED_POOL_RESERVED_SIZE
    #3. 从 v$shared_pool_reserved 来判断 , 如果 REQUEST_FAILURES>0( 出现过 ora-04031) 且LAST_FAILURE_SIZE( 最后请求内存大小 )>_SHARED_POOL_RESERVED_MIN_ALLOC表示 shared reserved pool 缺少连续内存 , 可以加大 SHARED_POOL_RESERVED_SIZE, 减少 _SHARED_POOL_RESERVED_MIN_ALLOC 少放对象 , 并相对加大 shared_pool_size
    # 要是反过来 REQUEST_FAILURES>0( 出现过 ora-04031) 且 LAST_FAILURE_SIZE( 最后请求内存大小)<_SHARED_POOL_RESERVED_MIN_ALLOC, 表示 在 shared pool 中缺少连续内存 , 可以加减少_SHARED_POOL_RESERVED_MIN_ALLOC 多放入一些对象 , 减少 sharedpool 压力 , 适当加大shared_pool_size,SHARED_POOL_RESERVED_SIZE
    # 查询还保留在 library cache 中,解析次数和执行次数最多的 sql( 解析 * 执行 )
    COL sql_text FORMAT A38;
    SELECT * FROM(
    SELECT parse_calls*executions "Product", parse_calls
    "Parses"
    ,executions "Execs", sql_text FROM v$sqlarea ORDER BY 1 DESC)
    WHERE ROWNUM <= 10;
    # 查看 pga
    show parameters area_size
    # 查看 pga
    SELECT * FROM v$pgastat;
    # 查看数据库 cache 或 keep 了哪些 object
    COL table_name FORMAT A16
    COL index_name FORMAT A16
    SELECT table_name AS "Table", NULL, buffer_pool, cache FROM
    user_tables
    WHERE buffer_pool != 'DEFAULT' OR TRIM(cache)='Y'
    UNION
    SELECT table_name, index_name, NULL, buffer_pool FROM
    user_indexes
    WHERE buffer_pool != 'DEFAULT'
    ORDER BY 1, 2 NULLS FIRST;

  • 相关阅读:
    【python】python中的定义类属性和对像属性
    【Python】Python—判断变量的基本类型
    【python】Python中给List添加元素的4种方法分享
    【python】python各种类型转换-int,str,char,float,ord,hex,oct等
    【python】python 中的三元表达式(三目运算符)
    【python】 sort、sorted高级排序技巧
    【SQLAlchemy】SQLAlchemy技术文档(中文版)(中)
    【SQLAlchemy】SQLAlchemy技术文档(中文版)(上)
    【其他】VS提示不一致的行尾
    UML 之 用例图
  • 原文地址:https://www.cnblogs.com/sky7034/p/2277670.html
Copyright © 2011-2022 走看看