搜索结果

×

搜索结果将在这里显示。

🌻 2. Oracle数据库性能综合检查

  • 查看系统整体负载
    SELECT event, COUNT(*) FROM v$session WHERE status='ACTIVE' GROUP BY event;

    核心后台进程 (Core Background Processes)

    等待事件 (Event) 相关进程 含义
    rdbms ipc message LGWR, DBWR, PMON等 后台进程最典型的空闲等待。代表进程正通过进程间通信 (IPC) 机制,等待其他进程分配任务。
    pmon timer PMON (Process Monitor) PMON进程在定时休眠,等待执行周期性的清理工作,如监控和恢复失败的进程。
    smon timer SMON (System Monitor) SMON进程在定时休眠,等待执行如实例恢复、合并空闲空间等周期性维护任务。
    VKRM Idle VKRM (Virtual Scheduler for Resource Manager) 资源管理器调度进程在空闲等待,没有调度任务时就会处于此状态。

    12c 新特性进程 (New in Oracle 12c)

    等待事件 (Event) 相关进程 含义
    LGWR worker group idle LGWR (Log Writer) LGWR的工作进程处于空闲状态,等待LGWR主进程分配写入redo日志的任务。
    lreg timer LREG (Listener Registration) LREG进程在定时休眠,周期性地检查并将实例信息注册到Oracle监听器。
    heartbeat redo informer TMON (Redo Transport Monitor) 与Data Guard相关的TMON进程在空闲等待,用于监控redo日志的传输心跳,即使未配置DG也会存在。
    VKTM Logical Idle Wait VKTM (Virtual Keeper of Time) VKTM进程在空闲等待,作为中央时间服务,为其他进程提供时间。
    Data Guard: Timer Data Guard相关进程 Data Guard相关进程的通用定时器空闲等待,用于控制各种超时和间隔。
    Data Guard: Gap Manager Data Guard相关进程 Data Guard的Gap管理进程在空闲等待,负责检测和解决主备库间的日志缺口(Gap)。

    高级队列 (Advanced Queuing, AQ) 与 Streams

    等待事件 (Event) 相关进程 含义
    Streams AQ: qmn coordinator idle wait QMN (Queue Monitor) AQ队列监视器的协调进程在空闲等待,协调和管理从属进程的工作。
    Streams AQ: qmn slave idle wait QMN (Queue Monitor) AQ队列监视器的从属进程在空闲等待,等待协调进程分配具体任务。
    Streams AQ: waiting for time management or cleanup tasks AQ进程 AQ进程在空闲等待,等待执行时间管理或清理等后台任务。
    AQPC idle AQPC (AQ Process Coordinator) AQ进程协调器在空闲等待,协调所有AQ相关进程的活动。

    其他后台与工具进程 (Other Background & Utility Processes)

    等待事件 (Event) 相关进程 含义
    class slave wait 各类Slave进程 后台的“类从属进程”在空闲等待,属于一个通用等待类别。
    Space Manager: slave idle wait Wnnn进程 (Space Management) 空间管理从属进程(如W000)在空闲等待,等待被分配回收空间等任务。
    DIAG idle wait DIAG (Diagnostics) 诊断进程在空闲等待,收集诊断数据以支持故障诊断。
    OFS idle OFS (Oracle File Server) Oracle文件服务器相关进程的空闲等待状态。
    pman timer PMAN (Process Manager) 进程管理器在定时休眠,负责派生和管理其他后台从属进程。
    watchdog main loop Watchdog进程 看门狗进程的主循环空闲等待,用于监控系统是否挂起,并在必要时采取行动。
    wait for unread message on broadcast channel Data Pump等 常见于Data Pump(数据泵)操作,代表主进程正在等待所有从属进程完成任务后的最终同步信号。

    PGA 内存操作

    等待事件 (Event) 相关进程 含义
    PGA memory operation 服务器进程 (Server Process) 这是一个非空闲等待事件。会话正在为​排序、哈希连接等操作​,动态分配或释放PGA内存。这个过程通常很快,但如果出现大量等待,可能意味着SQL语句需要优化或​PGA配置不足
  • 检查活跃会话数
    select
    count(*) active_sessions
    from v$session
    where status='ACTIVE'
    and type!='BACKGROUND';

    status='ACTIVE' ​表示会话当前正在执行 SQL 或处于非空闲等待状态(即正在占用 CPU 或等待资源,如 I/O、锁等)。
    type!='BACKGROUND' ​排除 Oracle 后台进程(如 SMON、PMON、DBWR、LGWR 等),只统计用户会话(前台进程)。

    -- 总连接数
    SELECT COUNT(*) FROM v$session;
    
    -- 活跃会话(正在等待 CPU 或 I/O,非空闲)
    SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE' AND type != 'BACKGROUND';
    
    -- 按等待分类统计活跃会话
    SELECT event, COUNT(*) 
    FROM v$session WHERE status = 'ACTIVE' GROUP BY event
    ORDER BY COUNT(*) DESC;
  • 从内存中查找慢SQL
    19C版本中文:
    SELECT 
      sql_id,
      SUBSTR(sql_text, 1, 100) AS sql_text,
      executions AS "执行次数",
      ROUND(elapsed_time/1000000, 2) AS "总耗时秒",
      ROUND(cpu_time/1000000, 2) AS "CPU秒",
      ROUND(elapsed_time/1000000 / executions, 2) AS "平均耗时秒"
    FROM v$sql
    WHERE elapsed_time/1000000 > 5
    AND executions > 0
    ORDER BY elapsed_time DESC
    FETCH FIRST 20 ROWS ONLY;
    
    19C版本英文:
    
    SELECT 
      sql_id,
      SUBSTR(sql_text, 1, 100) AS sql_text,
      executions AS exec_cnt,
      ROUND(elapsed_time/1000000, 2) AS total_sec,
      ROUND(cpu_time/1000000, 2) AS cpu_sec,
      ROUND(elapsed_time/1000000 / executions, 2) AS avg_sec
    FROM v$sql
    WHERE elapsed_time/1000000 > 5
    AND executions > 0
    ORDER BY elapsed_time DESC
    FETCH FIRST 10 ROWS ONLY;
    
    11G版本中文:
    
    SELECT *
    FROM (
      SELECT sql_id,
             SUBSTR(sql_text, 1, 100) AS sql_text,
             executions AS "执行次数",
             ROUND(elapsed_time / 1000000, 2) AS "总耗时秒",
             ROUND(cpu_time / 1000000, 2) AS "CPU秒",
             ROUND(elapsed_time / 1000000 / executions, 2) AS "平均耗时秒"
      FROM v$sql
      WHERE elapsed_time / 1000000 > 5
        AND executions > 0
      ORDER BY elapsed_time DESC
    ) 
    WHERE ROWNUM <= 10;
  • 当前阻塞情况
    select blocking_session, sid, username, event, seconds_in_wait
    from v$session
    where blocking_session is not null;

    blocking_session​阻塞当前会话的会话 ID(SID)。若为 NULL,表示当前会话未被阻塞。
    sid​当前被阻塞的会话 ID。
    username​当前被阻塞会话的数据库用户名。
    event​当前被阻塞会话正在等待的事件(通常是 enq: TX - row lock contention​ 等锁等待)。
    seconds_in_wait当前会话已经等待该事件的秒数。

  • 当前 Top CPU 消耗 SQL(v$sql)
    SELECT sql_id,
         SUBSTR(sql_text, 1, 60) AS sql_text,
         cpu_time/1000000 AS cpu_sec,
         executions 
    FROM (
      SELECT sql_id, sql_text, cpu_time, executions
      FROM v$sql
      WHERE cpu_time > 1000000
      ORDER BY cpu_time DESC
    )
    WHERE rownum <= 5;
    
    SELECT sql_id,
         SUBSTR(sql_text, 1, 60) AS sql_text,
         cpu_time/1000000 AS cpu_sec,
         executions 
    FROM (
      SELECT sql_id, sql_text, cpu_time, executions
      FROM v$sql
      WHERE cpu_time > 1000000
      ORDER BY cpu_time DESC
    )
    WHERE rownum <= 5;

2.2 等待事件检查

  • 实例启动以来的 Top 等待事件
    SELECT * FROM (
    SELECT event,
           total_waits,
           time_waited_micro/1000000 AS time_waited_sec,
           average_wait/1000 AS avg_wait_ms,
           wait_class
    FROM v$system_event
    WHERE wait_class != 'Idle'
    ORDER BY time_waited_micro DESC
    )
    WHERE ROWNUM <= 10;
    优化后的兼容11G:
    SELECT event,
         total_waits,
         ROUND(time_waited_micro / 1000000, 2) AS total_wait_sec,
         ROUND(average_wait * 10, 2) AS avg_wait_ms,
         wait_class
    FROM (
    SELECT event, total_waits, time_waited_micro, average_wait, wait_class
    FROM v$system_event
    WHERE wait_class != 'Idle'
      AND event IS NOT NULL
    ORDER BY time_waited_micro DESC
    )
    WHERE ROWNUM <= 10;
  • Top 5 等待事件(累计)
    select event, total_waits, round(time_waited_micro/1000000,2) wait_sec
    from (
    select event, total_waits, time_waited_micro
    from v$system_event
    where wait_class != 'Idle'
    order by time_waited_micro desc
    )
    where rownum <= 5;
  • 最近 1 小时 ASH Top 等待事件
    select event, cnt
    from (
      select event, count(*) cnt
      from v$active_session_history
      where sample_time > sysdate - 1/24
      group by event
      order by count(*) desc
    )
    where rownum <= 5;
  • 当前正在发生的等待事件(非空闲)
    SELECT s.sid, s.serial#, s.username, s.program, sw.event, sw.wait_time_micro/1000000
    AS wait_sec, sw.state, sw.seconds_in_wait, s.sql_id
    FROM v$session s, v$session_wait sw
    WHERE s.sid = sw.sid
    AND sw.event NOT LIKE '%Idle%'
    AND s.status = 'ACTIVE'ORDER BY sw.seconds_in_wait DESC;

2.3 回收站状态检查

  • 查看所有用户的回收站
    SELECT owner, object_name, original_name, type, droptime
    FROM dba_recyclebin
    ORDER BY droptime DESC;
  • 查看回收站对象占用的空间
    SELECT owner, object_name, type, space
    FROM dba_recyclebin
    WHERE space > 0
    ORDER BY space DESC;
    • space 表示该对象占用的数据块数(8KB 为单位),可以估算空间占用。

2.4 数据库SGA命中率检查

  • 数据缓冲区缓存命中率
    SELECT  ROUND((1 - (phy.value / (cur.value + con.value))) * 100, 2)
    AS "Buffer Cache Hit Ratio"
    FROM  v$sysstat cur,  v$sysstat con,  v$sysstat phy
    WHERE  cur.name = 'session logical reads'
    AND con.name = 'consistent gets'
    AND phy.name = 'physical reads';
    • 命中率 < 90% :可能存在大量物理 I/O,需检查 SQL 是否低效(如全表扫描),或考虑增加 db_cache_size
    • 命中率 > 95% :通常表示缓存效率较高。
  • 共享池命中率
    SELECT
    ROUND(SUM(pins - reloads) / SUM(pins) * 100, 2)
    AS "Library Cache Hit Ratio" FROM  v$librarycache;
    • 命中率 > 95% :正常。
    • 低于 90% :可能存在大量硬解析,检查是否未使用绑定变量,或共享池过小(调整 shared_pool_size)。
  • 查看 SGA 各组件当前大小
    SELECT * FROM v$sgainfo;

2.5 数据库共享池状态检查

  • 查看共享池当前大小
    SELECT * FROM v$sgainfo WHERE name LIKE '%Shared%';
  • 共享池内存使用分布
    SELECT * 
    FROM (  SELECT name, ROUND(bytes/1024/1024, 2) AS mb  
    FROM v$sgastat  WHERE pool = 'shared pool'  ORDER BY bytes DESC) WHERE ROWNUM <= 20;
    • free memory:空闲内存,如果持续很小说明共享池紧张。
    • sql area:SQL 游标占用,过大可能表示 SQL 未重用或存在大量子游标。
    • library cache:包含 SQL 和 PL/SQL 对象。
    • row cache:数据字典缓存。
  • 库缓存命中率
    SELECT
    ROUND(SUM(pins - reloads) / SUM(pins) * 100, 2) AS "Library Cache Hit Ratio"
    FROM v$librarycache;
    • > 95% :正常。 < 90% :存在大量硬解析,需检查绑定变量使用情况。
  • 字典缓存命中率
    SELECT
    ROUND(SUM(gets - getmisses) / SUM(gets) * 100, 2) AS "Dictionary Cache Hit Ratio"
    FROM v$rowcache;
    • > 95% :正常。
    • < 85% :可能共享池不足或动态 SQL 过多。
  • 硬解析比例
    SELECT  ROUND(100 * (hard_parses.value / total_parses.value), 2) AS "Hard Parse Ratio"
    FROM
    (SELECT VALUE FROM v$sysstat WHERE name = 'parse count (hard)') hard_parses,
    (SELECT VALUE FROM v$sysstat WHERE name = 'parse count (total)') total_parses;
    • < 5% :良好。
    • > 10% :应检查应用是否使用绑定变量。
    • 查询生成硬解析最多的SQL
    SELECT sql_id, 
           SUBSTR(sql_text, 1, 60) sql_text,
           executions,
           parse_calls,
           ROUND(parse_calls / DECODE(executions, 0, 1, executions), 2) parse_ratio
    FROM v$sql
    WHERE parse_calls > 100
      AND executions > 0
    ORDER BY parse_calls DESC
    FETCH FIRST 20 ROWS ONLY;
    
    --11G:
    SELECT *
    FROM (
        SELECT sql_id,
               SUBSTR(sql_text, 1, 60) AS sql_text,
               executions,
               parse_calls,
               ROUND(parse_calls / DECODE(executions, 0, 1, executions), 2) AS parse_ratio
        FROM v$sql
        WHERE parse_calls > 100
          AND executions > 0
        ORDER BY parse_calls DESC
    )
    WHERE ROWNUM <= 10;
  • 查看空闲内存块大小分布
    SELECT * FROM
    (
    SELECT
      chunk_size,
      count(*) chunks,
      sum(chunk_size)/1024/1024 AS total_mb
    FROM
    (
      SELECT bytes AS chunk_size
      FROM v$sgastat
      WHERE name = 'free memory'
    AND pool = 'shared pool'
    ) 
    GROUP BY chunk_size
    ORDER BY total_mb DESC)
    WHERE ROWNUM <= 10;
    指标 含义
    CHUNK_SIZE 1,022,129,400 字节 (~974.78 MB) 单个连续空闲内存块的大小
    CHUNKS 1 只有 1 个这样的空闲块
    TOTAL_MB 974.78 MB 所有相同大小的空闲块的总和(即该块的大小)
    • 查看 Shared Pool 总大小
    -- 方法一:查看参数设置
    SHOW PARAMETER shared_pool_size
    
    -- 方法二:统计 Shared Pool 中所有内存(包括已使用和空闲)
    SELECT SUM(bytes)/1024/1024 AS total_shared_pool_mb
    FROM v$sgastat
    WHERE pool = 'shared pool';
    • 如果总大小远大于 974 MB(例如 3\~4 GB 以上),则空闲 1 GB 是合理的。如果总大小就在 1\~1.5 GB 左右,则说明大量内存未被使用,可以考虑减小 shared_pool_size
  • 查看保留池使用情况
    SELECT  request_misses,
    request_failures,
    free_space,
    free_unpinned_space
    FROM v$shared_pool_reserved;
    
    19c版本
    
    SELECT request_misses,
         request_failures,
         free_space
    FROM
     v$shared_pool_reserved;

    共享池中有一块保留区域(reserved pool)用于存放大对象(如大 PL/SQL 包)。查看其使用情况:

    • 如果 request_misses 持续增长,说明保留池可能太小。

    • request_failures > 0​ 表示大对象无法分配内存,需增大 shared_pool_reserved_size

  • 查看 SQL 版本数过多的游标
    SELECT sql_id, COUNT(*) AS versions
    FROM v$sql
    GROUP BY sql_id
    HAVING COUNT(*) > 10
    ORDER BY versions DESC;
    • 如果大量 SQL_ID 有多个子游标,可能是由于环境变量不一致、统计信息不同步或未使用绑定变量导致。
  • 查看占用共享池最多的 SQL
    SELECT * FROM
    (
    SELECT
      sql_id,
      SUBSTR(sql_text,1,50) sql_text,
      sharable_mem/1024/1024 AS sharable_mb,
      executions,
      loads
    FROM v$sqlarea
    WHERE sharable_mem > 1024*1024
    ORDER BY sharable_mem DESC
    )
    WHERE ROWNUM <= 10;
  • 共享池自动调优建议
    SELECT  shared_pool_size_for_estimate
    AS size_mb, shared_pool_size_factor,  estd_lc_time_saved_factor
    AS estd_lc_saved_factor FROM v$shared_pool_advice;
    • shared_pool_size_factor=1 表示当前大小。
    • estd_lc_time_saved_factor > 1,说明增加共享池可能减少解析时间。

2.6 PGA信息检查

  • 查看PGA参数设置
    SHOW PARAMETER pga_aggregate_target
    
    SELECT name, value, isdefault FROM v$parameter WHERE name = 'pga_aggregate_target';
    • pga_aggregate_target:目标 PGA 总大小(单位:字节)。如果值为 0,表示手动 PGA 管理。
    • workarea_size_policy​:应为 AUTO​(自动)或 MANUAL​。11g 默认 AUTO
  • PGA 总体使用情况(v$pgastat)
    SELECT * FROM v$pgastat;
    • aggregate PGA target parameterpga_aggregate_target 设置值
    • aggregate PGA auto target 当前可用于自动工作区(排序/哈希)的内存,剩余部分会被会话私有内存消耗。
    • total PGA allocated 当前实际分配的 PGA 内存(包括所有进程)。
    • total PGA used 当前正在使用的 PGA(部分内存可能空闲但未释放)。
    • maximum PGA allocated 实例启动以来 PGA 分配的最大值。
    • cache hit percentage PGA 缓存命中率(影响磁盘排序比例)。
    • over allocation count PGA 超限分配次数(大于 0 表示 PGA 不足,触发了换页)。
  • PGA 自动调优建议(v$pga_target_advice)
    SELECT
    pga_target_for_estimate / 1024 / 1024
    AS pga_target_mb,  pga_target_factor,
    estd_pga_cache_hit_percentage,estd_overalloc_count
    FROM v$pga_target_advice
    ORDER BY pga_target_factor;

    pga_target_factor=1​ 对应当前 pga_aggregate_target​ 大小。
    观察 estd_pga_cache_hit_percentage​ 是否接近 100%,以及 estd_overalloc_count​ 是否 > 0。
    如果当前大小下 estd_overalloc_count​ 不为 0,或命中率偏低,建议增大 pga_aggregate_target

  • PGA 命中率(缓存命中率)
    SELECT name, value
    FROM v$pgastat WHERE name = 'cache hit percentage';
    • PGA 命中率主要反映排序和哈希操作在内存中完成的比例,直接从 v$pgastat​ 获取:通常应保持在 90% 以上,低于此值表示大量排序/哈希操作使用了临时段(磁盘),需要增加 PGA 或优化 SQL。
    • 也可以从 v$sysstat 计算临时段 I/O 比例:

      SELECT
      ROUND(100 * (1 - (physical_reads.value / (logical_reads.value + physical_reads.value))), 2)
      AS pga_hit_ratioFROM
      (SELECT VALUE FROM v$sysstat WHERE name = 'physical reads') physical_reads,
      (SELECT VALUE FROM v$sysstat WHERE name = 'session logical reads') logical_reads;
      • 但该公式包含所有 I/O,不够精确,推荐直接使用 v$pgastat 中的命中率。
  • 当前活跃工作区(排序/哈希/位图)情况
    SELECT
    operation_type,
    actual_mem_used/1024/1024 AS actual_mem_mb,
    max_mem_used/1024/1024 AS max_mem_mb,
    tempseg_size/1024/1024 AS tempseg_mb,
    sql_id,  sql_exec_idFROM v$sql_workarea_activeORDER BY actual_mem_used DESC;
    • operation_type​:SORT​(排序)、HASH-JOIN​(哈希连接)、BITMAP(位图)等。
    • actual_mem_used:当前使用的 PGA 内存。
    • tempseg_size:如果内存不足,会使用临时段,该值 >0 表示已使用磁盘。
  • PGA 工作区历史分布(v$sql_workarea_histogram)
    SELECT
    low_optimal_size/1024/1024 AS low_opt_mb,
    high_optimal_size/1024/1024 AS high_opt_mb,
    optimal_executions,  onepass_executions,
    multipass_executionsFROM v$sql_workarea_histogramORDER BY low_optimal_size;
    • optimal_executions:完全在内存中完成的操作次数(最佳)。
    • onepass_executions:需要一次磁盘传递的操作。
    • multipass_executions:需要多次磁盘传递的操作(应极力避免)。
    • multipass_executions 比例高,说明 PGA 严重不足或 SQL 设计糟糕。
  • 各进程 PGA 内存使用分布
    SELECT
    pid,
    spid,
    pga_used_mem/1024/1024 AS used_mb,
    pga_alloc_mem/1024/1024 AS alloc_mb,
    pga_max_mem/1024/1024 AS max_mbFROM v$processWHERE pga_used_mem > 0
    ORDER BY pga_used_mem DESCFETCH FIRST 10 ROWS ONLY;
    
    **11g 中需使用** **ROWNUM:** 
    
    SELECT * FROM (
    SELECT
      pid, spid,
      pga_used_mem/1024/1024 AS used_mb,
      pga_alloc_mem/1024/1024 AS alloc_mb,
      pga_max_mem/1024/1024 AS max_mb
    FROM v$process
    WHERE pga_used_mem > 0
    ORDER BY pga_used_mem DESC)
    WHERE ROWNUM <= 10;
  • 表碎片检查
    #检查表碎片;
    
    SELECT owner, table_name,
         ROUND((blocks - empty_blocks) * 8192 / (avg_row_len * num_rows), 2) AS avg_blocks_per_row,
         ROUND((1 - (avg_row_len * num_rows) / ((blocks - empty_blocks) * 8192)) * 100, 2) AS waste_pct
    FROM dba_tables
    WHERE owner NOT IN ('SYS','SYSTEM')
    AND num_rows > 10000
    AND blocks > 100
    ORDER BY waste_pct DESC;
    • ==定义:==​==表在数据文件中存储不连续,存在大量空闲块或块内空间利用率低。==​==影响:==​==全表扫描时读取更多块,缓存命中率下降,DML 可能引发更多空间管理操作。==​==常见原因:==​==频繁的 DML(尤其是 DELETE)、未启用 ASSM、未设置合理的 PCTFREE。==
    • 说明waste_pct 为预估的块内空间浪费比例,超过 30% 建议重组。
    #如果上一项指标过高,检查统计信息是否最新;
    
    SELECT owner, table_name, num_rows, last_analyzed
    FROM dba_tables
    WHERE table_name IN ('TP_LTGLLCSJFZB','TP_LTBPDWLSJ','SYS_JOB_LOG');
    
    SELECT owner, table_name, num_rows, last_analyzed
    FROM dba_tables
    WHERE table_name IN ('TB_IRON_LOG','SYS_JOB_LOG');
    • 如果 last_analyzed​ 距离当前时间较长,或 num_rows 与表实际行数相差很大,建议重新收集统计信息:
  • 索引碎片检查
    ANALYZE INDEX idx_name VALIDATE STRUCTURE; (低负载时运行)
    
    SELECT name, height, lf_rows, lf_blks, del_lf_rows,
         ROUND(del_lf_rows / lf_rows * 100, 2) AS del_pct
    FROM index_stats;
    • ==定义==​==:索引块存在大量删除标记,或叶子块填充率低,B*树层次过高。==
      ==影响==​==:索引扫描效率下降,逻辑读增加。==
      ==常见原因==​==:频繁的 DML、未及时重建索引。==
    • del_pct​ > 20% 建议重建。
      height > 3 可能需要重建(视数据量而定)。
  • 行迁移检查
    SELECT name, value
    FROM v$sysstat
    WHERE name = 'table fetch continued row';
    • ==定义==​==:UPDATE 使行长度增加,原块空间不足,行被迁移到新块,原块留下指针。==
      ==影响==​==:读取该行需访问两个块,增加 I/O。==
      ==识别==​==:通过== ==​V$SYSSTAT​==​ ==的== ==​table fetch continued row​==​ ==统计。==
    • 该值代表行迁移/链接导致的额外读取次数。若持续增长且数值较大,说明存在较多迁移行。
  • 行链接检查 - X
    -- 创建 CHAINED_ROWS 表
    @$ORACLE_HOME/rdbms/admin/utlchain.sql
    
    --真实表名VISUAL.SYS_JOB_LOG(表碎片检查结果中的表名)
    ANALYZE TABLE VISUAL.SYS_JOB_LOG LIST CHAINED ROWS INTO CHAINED_ROWS; 
    
    --查询链式行数量
    SELECT table_name, chain_cnt FROM dba_tables WHERE table_name = 'TB_IRON_LOG'; 
    • 定义:行长度超过块大小(如含 LOB、长字段),行被拆分存储在多个块中。
      影响:读取一行需访问多个块,性能下降。
      识别:同样可通过 table fetch continued row 和链式行分析表发现。
  • 失效索引检查
    SELECT owner, index_name, table_name, status
    FROM dba_indexes
    WHERE status = 'UNUSABLE'
    ORDER BY owner, index_name;

阅读:154
发布时间: