精华内容
下载资源
问答
  • oracle 统计信息

    2015-09-24 13:45:06
    环境:oracle 11.2 for windows */ 统计信息描述了数据库及其对象的具体信息,查询优化器根据这些信息为sql语句选择最佳的执行计划,若统计信息不准确,可能导致错误的执行计划,此适用于cbo优化器,rbo不使用...
    /*
    环境:oracle 11.2 for windows
    */

    统计信息描述了数据库及其对象的具体信息,查询优化器根据这些信息为sql语句选择最佳的执行计划,若统计信息不准确,可能导致错误的执行计划,此适用于cbo优化器,rbo不使用统计信息。

    统计信息包括以下内容

     

    表信息
    Number of rows  --行数
    Number of blocks  --块数
    Average row length --行平均长度
    字段信息
    Number of distinct values (NDV) in column --列中唯一值数量
    Number of nulls in column  --NULL值的数量
    Data distribution (histogram)  --数据分布
    Extended statistics
    索引信息
    Number of leaf blocks --叶块数量
    Levels --等级
    Clustering factor --聚簇因子
    系统信息
    I/O performance and utilization --I/O性能与使用率
    CPU performance and utilization --CPU性能与使用率

    统计信息存储在数据字典中,oracle 10g会自动收集统计信息,也可以通过anlanze 和 dbms_stats 包手动收集统计信息,同时也可以导出或锁定统计信息。

    1.管理统计信息的自动收集
    GATHER_STATS_JOB
    GATHER_STATS_PROG

    SELECT owner,job_name,state,last_start_date,last_run_duration,failure_count FROM dba_scheduler_jobs WHERE job_name = 'GATHER_STATS_JOB' ;
    select PROGRAM_NAME,PROGRAM_ACTION, ENABLED from dba_scheduler_programs where PROGRAM_NAME = 'GATHER_STATS_PROG' ;

    SELECT log_id, job_name, status,
              TO_CHAR (log_date, 'YYYY-MM-DD HH24:MI' ) log_date
         FROM dba_scheduler_job_run_details
        WHERE job_name = 'GATHER_STATS_JOB' ORDER BY log_date;

    oracle收集那些表的统计信息
    1.没有统计信息的表
    2.更新超过10%的表
    oracle 收集腐旧统计信息时需要用到一个modification monitoring的特性,当此特性disable时,不能收集腐旧的统计信息,STATISTICS_LEVEL为typical或all时此特性生效,默认为typical

    2.手动管理统计信息
    收集统计信息可以用dbms_stats 包,这个包也用于修改、查看、导入导出和删除统计信息。新收集的统计将替换旧的统计信息,旧的统计信息将被保存,以便用于恢复

     

         Procedure
    Collects
    GATHER_INDEX_STATS
    Index statistics
    GATHER_TABLE_STATS
    Table, column, and index statistics
    GATHER_SCHEMA_STATS
    Statistics for all objects in a schema
    GATHER_DICTIONARY_STATS
    Statistics for all dictionary objects
    GATHER_DATABASE_STATS
    Statistics for all objects in a database
    GATHER_DICTIONARY_STATES
    Statistics for all system schema
    3.锁定统计信息
    统计信息被锁定后不可修改,用于保证统计信息的不可变,使执行计划固定
    加锁:LOCK_SCHEMA_STATS and LOCK_TABLE_STATS
    解锁:UNLOCK_SCHEMA_STATS and UNLOCK_TABLE_STATS
    4.统计信息的删除
    DBMS_STATS.DELETE_TABLE_STATS
    5.统计信息的导入导出
    新建一个表用于导出
    DBMS_STATS.CREATE_STAT_TABLE
    导出
    DBMS_STATS.EXPORT_*_STATS
    导入
    DBMS_STATS.IMPORT_*_STATS

    6.统计信息的恢复
    统计信息会自动保存,用于恢复之前版本
    视图DBA_OPTSTAT_OPERATIONS 储存了schema 和 database 级的 DBMS_STATS 操作
    视图*_TAB_STATS_HISTORY(all,dba,user)存储对表的修改历史
    PURGE_STATS:手动清除超过时间戳的旧版本。
    GET_STATS_HISTORY_RETENTION:获取当前的统计历史保留价值。
    GET_STATS_HISTORY_AVAILABILITY:获得最早 可用 统计版本的时间
    ANALYZE命令不能存储旧的统计信息
    RESTORE 利用时间戳恢复到时间戳时的统计信息

    7.统计的恢复与导入导出的对比
    恢复使用的场景:
    (1)想要回退到之前的执行计划
    (2)删除旧的统计信息
    导入导出使用场景
    (1)想保留比自动保存更久的统计信息
    (2)数据库迁移
    (3)保存多组数据,用于反复测试

     

    展开全文
  • Oracle统计信息命令

    2020-06-01 13:12:44
    1. 收集数据字典统计信息(针对SYS,SYSTEM 及其他数据库用户) EXEC DBMS_STATS.gather_dictionary_stats; 2. 收集基表的统计信息V$,gv$视图 EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; select table_name, num_...


    1. 收集数据字典统计信息(针对SYS,SYSTEM 及其他数据库用户)
    EXEC DBMS_STATS.gather_dictionary_stats;


    2. 收集基表的统计信息V$,gv$视图
    EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

    select table_name, num_rows, last_analyzed
      from dba_tab_statistics
     where last_analyzed is not null
     order by last_analyzed desc


    3. 收集全库统计信息
    EXEC DBMS_STATS.gather_database_stats;


    --如果数据库很大的话,可以修改采用率或并发,提高收集统计信息速度
    EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15);
    EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15, cascade => TRUE);
    EXEC DBMS_STATS.gather_database_stats(estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,degree => 8);


    4. 修改指定用户名统计信息
    EXEC DBMS_STATS.gather_schema_stats('QRUM');
    EXEC DBMS_STATS.gather_schema_stats('QRUM', estimate_percent => 25);
    EXEC DBMS_STATS.gather_schema_stats('QRUM', estimate_percent => 100, cascade => TRUE);

    exec dbms_stats.gather_schema_stats(
        ownname => 'QRUM',
        method_opt => 'FOR ALL COLUMNS SIZE 1',
        granularity => 'ALL',
        degree => 8,
        cascade => TRUE,
        estimate_percent=>dbms_stats.auto_sample_size);

    5. 收集指定表统计信息

    EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP');
    EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP', estimate_percent => 15);
    EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMP', estimate_percent => 15, cascade => TRUE);

    exec DBMS_STATS.GATHER_TABLE_STATS (
        ownname => 'SCOTT' ,
      tabname => 'EMP',
      cascade => true,
        method_opt=>'for all indexed columns size 1',
        granularity => 'ALL',
        degree => 8);

    exec DBMS_STATS.GATHER_TABLE_STATS (
        ownname => 'SCOTT' ,
        tabname => 'EMP',
        cascade => true,
        method_opt=>'FOR ALL COLUMNS SIZE 1',
        granularity => 'ALL',
        degree => 8);


    6. 收集指定分区表的单个分区
    BEGIN
    DBMS_STATS.GATHER_TABLE_STATS (
        ownname => 'SCOTT',
        tabname => 'TEST',  
        partname => 'TEST_JAN2016'  
        method_opt=>'for all indexed columns size 1',
        GRANULARITY => 'APPROX_GLOBAL AND PARTITION',
        degree => 8);
        END;
    /


    7. 锁定和解锁统计信息:

    --锁定指定用户的统计信息:
    EXEC DBMS_STATS.lock_schema_stats('SCOTT');

    --锁定指定表的统计信息
    EXEC DBMS_STATS.lock_table_stats('SCOTT', 'EMP');

    --锁定分区表的统计信息
    EXEC DBMS_STATS.lock_partition_stats('SCOTT', 'EMP', 'EMP');

    --解锁统计信息
    EXEC DBMS_STATS.unlock_schema_stats('SCOTT');
    EXEC DBMS_STATS.unlock_table_stats('SCOTT', 'SCOTT');
    EXEC DBMS_STATS.unlock_partition_stats('SCOTT', 'EMP', 'TEST_JAN2016');

    --查看统计信息锁定情况
    SELECT stattype_locked FROM dba_tab_statistics WHERE table_name = 'TEST' and owner = 'SCOTT';


    8 .删除统计信息
    -- 删除整个数据库的统计信息:
    EXEC DBMS_STATS.delete_database_stats;
    -- 删除指定用户统计信息:
    EXEC DBMS_STATS.delete_schema_stats('SCOTT');
    -- 删除指定表的统计信息:
    EXEC DBMS_STATS.delete_table_stats('SCOTT', 'EMP');
    -- 删除指定列名统计信息:
    EXEC DBMS_STATS.delete_column_stats('SCOTT', 'EMP', 'EMPNO');
    -- 删除索引统计信息:
    EXEC DBMS_STATS.delete_index_stats('SCOTT', 'EMP_PK');
    -- 删除数据字典统计信息:
    EXEC DBMS_STATS.delete_dictionary_stats;
    -- 数据视图对象/基表统计信息:
    exec dbms_stats.delete_fixed_objects_stats;
    -- 删除系统统计信息:
    exec dbms_stats.delete_system_stats('STAT_TAB');


    8. 获取和设置表上统计信息收集选项

    SELECT dbms_stats.get_prefs('PUBLISH') EST_PCT FROM dual;
    select dbms_stats.get_prefs('PUBLISH', 'SCOTT') from dual

    select dbms_stats.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'PUBLISH') FROM DUAL;
    select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'INCREMENTAL') FROM DUAL;
    select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'GRANULARITY') FROM DUAL;
    select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'STALE_PERCENT')  FROM DUAL;
    select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'ESTIMATE_PERCENT')  FROM DUAL;
    select DBMS_STATS.get_prefs(ownname=>'SCOTT',tabname=>'EMP',pname=>'DEGREE')  FROM DUAL;


    exec dbms_stats.set_table_prefs('SCOTT','EMP','PUBLISH','FALSE');
    exec dbms_stats.set_table_prefs('SCOTT','EMP','ESTIMATE_PERCENT','20');
    exec dbms_stats.set_table_prefs('SCOTT','EMP','DEGREE','8');

    exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','PUBLISH','FALSE');
    exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','ESTIMATE_PERCENT','20');
    exec dbms_stats.SET_SCHEMA_PREFS('DBATEST','CASCADE','TRUE');


    exec dbms_stats.set_database_prefs('PUBLISH', 'TRUE');
    exec dbms_stats.set_database_prefs('DEGREE', '16');


    exec dbms_stats.set_global_prefs('PUBLISH', 'TRUE');
    exec dbms_stats.set_global_prefs('DEGREE', '16');


    9 . 删除统计信息收集选项

    exec dbms_stats.delete_schema_prefs('SCOTT', 'DEGREE');
    exec dbms_stats.delete_schema_prefs('SCOTT', 'CASCADE');


    exec dbms_stats.delete_database_prefs('ESTIMATE_PERCENT', FALSE);
    exec dbms_stats.delete_database_prefs('DEGREE', FALSE);


    10 . Publish pending statistics:

    -- 按用户pending统计信息
    exec dbms_stats.publish_pending_stats('SCOTT',null);

    -- 按表pending统计信息
    EXEC DBMS_STATS.PUBLISH_PENDING_STATS ('SCOTT','EMP');


    11. Delete pending statistics:
    exec dbms_stats.delete_pending_stats('SCOTT', 'EMP');
    exec dbms_stats.delete_pending_stats('SCOTT', null);


    12. 更新表的统计信息:

    EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE(OWNNAME =>'RAJ',STATTAB =>'STAT_TEST');


    13. 查看/修改统计信息保留期限:

    select dbms_stats.get_stats_history_retention from dual;
    exec DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(60);


    14. 创建统计信息保留表
    exec dbms_stats.create_stat_table(ownname => 'SCOTT', stattab => 'STAT_BACKUP',tblspace=>'USERS');


    15. 导出统计信息

    -- 导出全库统计信息
    exec dbms_stats.export_database_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.export_table_stats(ownname=>'SCOTT', tabname=>'EMP', statown =>'SCOTT',stattab=>'STAT_BACKUP', cascade=>true);
    exec dbms_stats.export_schema_stats(ownname=>'SCOTT', statown =>'SCOTT' , stattab=>'STAT_BACKUP');
    exec dbms_stats.export_fixed_objects_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.export_dictionary_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.export_index_stats(ownname=>'SCOTT', indname=>'EMP_UK1', statown =>'SCOTT',stattab=>'STAT_BACKUP')


    16. 导入统计信息:

    exec dbms_stats.import_database_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.import_table_stats(ownname=>'SCOTT', tabname=>'EMP', statown =>'SCOTT',stattab=>'STAT_BACKUP', cascade=>true);
    exec dbms_stats.import_schema_stats(ownname=>'SCOTT', statown =>'SCOTT' , stattab=>'STAT_BACKUP');
    exec dbms_stats.import_fixed_objects_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.import_dictionary_stats(statown => 'SCOTT' ,stattab=>'STAT_BACKUP');
    exec dbms_stats.import_index_stats(ownname=>'SCOTT', indname=>'EMP_UK1', statown =>'SCOTT',stattab=>'STAT_BACKUP');


    17 . 统计信息相关查询
    -- 查询表的统计信息:
    select owner,table_name,STALE_STATS from dba_tab_statistics where owner='&SCHEMA_NAME' and table_name='&TABLE_NAME';
    -- 查询索引统计信息:
    select owner,INDEX_NAME,TABLE_NAME from DBA_IND_STATISTICS where owner='&SCHEMA_NAME' and index_name='&INDEX_NAME';

    --  查询表的历史统计信息
    select owner,TABLE_NAME,STATS_UPDATE_TIME from dba_tab_stats_history where table_name='&TABLE_NAME';

    -- 查询保存统计信息占用的表空间
    select occupant_desc, space_usage_kbytes from v$sysaux_occupants where OCCUPANT_DESC like '%Statistics%';

    -- 查询表是否锁定统计信息
    select owner, table_name, stattype_locked from dba_tab_statistics where stattype_locked is not null and owner not in ('SYS','SYSTEM');

     

    下面是我的公众号:定期会更新一些Oracle 数据库及Python相关的学习经验。欢迎关注:

    展开全文
  • Oracle自动性能统计

    千次阅读 2017-04-13 10:10:15
    高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出...本文主要描述Oracle性能统计涉及到的相关概念及统计对象,以更好的利用统计信息为性能调整奠定基础。

    Oracle自动性能统计

      高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出相应的药方。Oracle数据库为系统、会话以及单独的sql语句生成多种类型的累积统计信息。本文主要描述Oracle性能统计涉及到的相关概念及统计对象,以更好的利用统计信息为性能调整奠定基础。

    一、性能统计信息的几个术语

    • 增量值(delta)

      性能统计信息依赖于delta值的累计,即增量值。增量值反映了在某个特定时段某个特定事件的趋势,或者说波动的幅度。通过对比在开始期间统计的累计值和结尾处的累计值之间的差异,才能够更清晰的了解该项值在系统不同负载时间段所需要的资源开销以及用于定位性能瓶颈。

      在Oracle数据库中,可以通过查询V$SESSTAT和V$SYSSTAT来查询统计值的累计情况。由于这2个视图为动态性能视图,因此,这2个视图的数据收集的仅仅是自实例启动以来的统计数据。如此这般,那数据库关闭后所有的统计信息丢失肿么办,不用着急,有AWR来定期进行保存。

    • 度量(metric)

      度量是Oracle数据库收集的另一种统计类型。一个度量被定义为在一些累积统计信息的变化率。该速率可以对各种单元进行测量,包括时间、事务或数据库调用。例如,每秒的数据库调用是一个度量。度量值可以从动态性能视图查询获得。其中的值是在一个相当小的时间间隔的平均值,通常为60秒。最近的度量值的历史是在V$视图,同时一些数据也由AWR快照进行持久化保持。

    • 采样(sampling)

      Oracle对活动会话过程中出现的相关等待进行采样,并将这些数据收集到内存中,可以用V$视图进行访问,也可以将其生成报告,用于快速或者实时的定位性能问题。那这个部分就是所谓的ASH,活动会话历史。同时这些数据由AWR快照处理也将其写入持久存储。

    • 基线(baseline)

      有数据,能比对,才能够真正反映问题的实质。那么在Oracle数据库里边,我们可以将其业务负载高峰期的活动会话历史数据,更确切的说是AWR持久化的数据贴个标签,这个标签就是所谓的基线。因此基线就是某个特定时段业务高峰期数据库整体性能的一个基准报告,一旦当后续数据库出现性能问题或运行不佳的时候,通过使用基线,与性能问题期间的性能统计数据进行比对,得出两者的差异报告,有助于问题的定位于解决。

    二、系统级别性能统计

      操作系统基本性能统计提供了系统主要硬件部件的使用和性能的信息,以及操作系统本身的性能。这些信息对于检测潜在的资源消耗,如CPU周期和物理内存,以及检测外设性能不良,如磁盘驱动器是至关重要的。 操作系统统计是硬件和操作系统工作状况的重要的指标。主要包括以下重要信息。

    • CPU统计信息

      CPU利用率是调优过程中最重要的操作系统统计。应获取整个系统和多处理器系统中单个CPU的利用率。每个CPU的利用率可以检测单线程和可扩展性问题。大多数操作系统在用户空间或内核空间显示CPU时间开销,这些额外的统计数据可以更好地分析CPU实际执行情况。

      在仅仅单个应用程序运行的Oracle数据库系统中,通常情况下,该业务系统在用户空间中运行数据库活动。服务于数据库的活动请求(如调度、同步、I/O、内存管理、进程/线程创建和删除)则在内核模式(空间)下运行。在一个CPU充分利用的系统中,一个健康的Oracle数据库在用户空间CPU的开销通常在运行65%到95%之间。

      可以通过查询V$osstat视图捕获硬件和操作系统级别的相关信息,使得判定硬件级资源存在的问题更容易。V$sysmetric_history视图保留主机一小时内CPU使用度量,以每一分钟时间间隔来表示的CPU使用率。V$ sys_time_model视图提供了有多少CPU被Oracle数据库使用。这两组统计数据更能够确定Oracle数据库或其他系统活动是否是CPU问题的原因。

    • 虚拟内存统计信息

      虚拟内存统计主要用于判断系统上是否存在大量分页或交换活动。当大量分页和交换时,系统性能会迅速下降。单个进程的内存统计数据可以检测内存泄漏是否是由于某个进程释放内存失败而导致。

    • 磁盘I/O统计信息

      I/O子系统的性能决定或影响着数据库的性能。大多数操作系统对磁盘提供一些扩展的统计信息。最重要的磁盘统计信息是当前的响应时间和磁盘队列的长度。这些统计数据显示磁盘是否处于最佳状态,或者磁盘是否正在超负荷工作。

      测量I/O系统的正常性能;取决于所使用的硬件,单个块读取范围的典型值从5到20毫秒。如果硬件显示的响应时间远高于正常的性能值,那么它表现不佳或超负荷工作。这就是瓶颈。如果磁盘队列开始超过两个,那么磁盘是一个潜在的瓶颈系统。

      Oracle数据库提供了一些在I/O调用时的I/O统计信息。这些统计数据在以下视图获取。

      v$iostat_consumer_group :

        在启用资源计划后,该视图捕获I/O相关信息,是所有资源消费群组统计。数据库样本统计每小时累积并将它们存储在AWR中。

      v$iostat_file :

        该视图是基于磁盘文件I/O的统计,主要用于以文件级别展现文件访问频度。

      v$iostat_function:

        该视图是基于I/O数据库功能(如LGWR和DBWR)的统计数据。

    • 网络统计信息

      用于确定网络或网络接口是否过载或没有最佳执行。在今天的网络应用中,网络延迟可以是实际用户响应时间的很大一部分。出于这个原因,这些统计是一个关键的调试工具。

      v$IOSTAT_NETWORK:

        该视图提供网络相关统计信息查询

    三、数据库统计信息

      数据库统计提供数据库上的负载类型以及数据库使用的内部和外部资源的信息。

    • 等待事件

      等待事件是由服务器进程或线程递增的统计数据,也就是说在继续处理当前某项任务之前,它必须等待某个事件完成才能继续处理。等待事件数据揭示了可能影响性能的问题的各种症状,如锁存争用、缓冲区争用和I/O争用。

      为了更好的分析不同等待事件,Oracle将等待事件进行了分类。等待事件分类包括:管理,应用程序,集群,提交,并发,配置,空闲,网络,其他,调度,系统I/O,和用户I/O。

       Author : Leshami

       Blog : http://blog.csdn.net/leshami

      下面的列表包括一些类中的等待的常见示例:

         1. 应用程序:由行级锁定或显式锁命令所引起的锁等待

         2. 提交:提交后等待重做日志写入确认

         3. 空闲:表示会话不活动的等待事件,例如来自客户端的sql*net消息

         4. 网络:等待数据通过网络发送

         5. 用户I/O:等待块被读取磁盘

    • 时间模型统计

       基于时间模型统计,主要是基于操作类型测量在数据库中花费的时间的统计信息。最重要的时间模型统计是数据库时间,即DB Time。数据库时间表示在数据库调用中所花费的总时间,是实例工作负载量的总指示器。

       在Oracle数控中,每个组件都有自己的统计数据。因此通过该组件与整体DB Time进行比对,可以很好地衡量这个组件的性能,或者说这个组件占据整个DB Time的百分比。如果能够基于这些开销过大的组件来进行调整,也即是整个DB Time开销的时间更少。

    DB Time:

      即所有花费在数据库层面调用时间的总和,包括所有会话(前台进程)以及非空闲等待,CPU时间等

       DB Time 是从实例启动以来时间的累计测量。由于DB时间是由所有非空闲用户会话的时间组合来计算的,所以DB时间可能超过实例开始后所经过的实际时间。例如,已经运行了30分钟的实例可能有四个活动用户会话,其累积DB Time大约为120分钟。

    更多关于时间统计模型可以参考:Oracle Time Model Statistics(时间模型统计)

    • 活动会话历史(ASH)

      Oracle对当前数据库活动会话,每秒进行采样,并将其最近10次的等待信息保存到v$session_wait,同时将其归档到活动会话历史表v$session_wait_history。这即是活动会话历史(ASH)。这些数据被保留在从SGA分配的特定内存中,并且采用循环写的方式,即采取LRU算法定期清理该部分缓存。说简单一点,ASH采用的策略是:保存处于等待状态的活动session的信息,每秒从v$session_wait中采样一次,并将采样信息保存在内存中。由于SGA中的活动会话信息存储在循环缓冲区中,系统活动越大,可以在循环缓冲区中存储的会话活动的秒数越小。因此这些数据就需要定期将其写入到磁盘,那就是由MMON进程定期将部分数据写入到AWR。AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留8天(11g缺省值),8天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间(8天)可以根据实际情况进行调整。

      活动会话历史通常包括以下数据:

        SQL语句及SQLID

        用于执行sql语句的sql计划的sql计划标识符和哈希值

        SQL执行计划信息

        对象编号、文件号和块号

        等待事件标识符和参数

        会话标识符和会话序列号

        模块和动作名称

        会话的客户端标识符

        服务散列标识符

        消费组标识符

    • 系统和会话统计信息

      可以从V$SYSSTAT和V$SESSTAT两个视图获取大量系统级别以及会话级别的统计信息。

    DBA牛鹏社(SQL/NOSQL/LINUX)

    展开全文
  • 目前在学习Oracle的性能调优这一块,管理和合理的运用统计信息是很重要的,本章记录一下Oracle对于统计信息的管理和维护。首先看一下Oracle对于统计信息的解释:Op...
       目前在学习Oracle的性能调优这一块,管理和合理的运用统计信息是很重要的,本章记录一下Oracle对于统计信息的管理和维护。

    首先看一下Oracle对于统计信息的解释:

    Optimizer statistics are a collection of data that describe more details about the database and the objects in the database. These statistics are used by the query optimizer to choose the best execution plan for each SQL statement. Optimizer statistics include the following:
    • Table statistics

      • Number of rows

      • Number of blocks

      • Average row length

    • Column statistics

      • Number of distinct values (NDV) in column

      • Number of nulls in column

      • Data distribution (histogram)

    • Index statistics

      • Number of leaf blocks

      • Levels

      • Clustering factor

    • System statistics

      • I/O performance and utilization

      • CPU performance and utilization

    从上面的注释可以看到,统计信息的范围是很广的,典型的包括表的总行数,存储所占用的数据块数以及平均行的长度。

    我们最常用到的无外乎表,列以及索引的统计信息。

    其中,对于红字标识部分也就是通常所说的直方图要深刻理解。

    直方图又称为数据分布,其标明了该列数据的分布区间,如下图所示:

    Consider a column C with values between 1 and 100 and a histogram with 10 buckets.

    De.ion of Figure 14-1 follows

    这个图示标明列C的值均匀分布在1-100的区间。

    直方图是很重要的统计信息,能否生成高效率的执行计划与此密切相关。


    关于统计信息各项指标的用途在后面再详细说明,今天主要是了解统计信息的概念以及如何对统计信息进行操作。


    在Oracle 9i之前,只能通过analyze命令来更新对象的统计信息,例如:
    ANALYZE TABLE T1 COMPUTE STATISTICS
    FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;
    并且需要人手工干预来定时更新。

    在9i之后,Oracle提供了一个系统包dbms_stats用于管理和维护统计信息,并且作为系统任务由Oracle自动调用,定期更新统计信息,当然也可以手工执行。

    默认数据库在创建的时候会自动产生更新统计信息的job,可以通过以下语句查询系统的自动作业调度:
    SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';

    如果想将此作业停止,可执行以下命令:
    BEGIN DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); END; /

    以下命令用于收集或更新一个表的统计信息:
    BEGIN
    DBMS_STATS.GATHER_TABLE_STATS('TEST','T1',10);
    END;
    /

    以下命令用于删除一个表的统计信息:
    BEGIN
    DBMS_STATS.DELETE_TABLE_STATS('TEST','T1');
    END;
    /
    以下命令用于锁定一个表的统计信息:
    BEGIN
    DBMS_STATS.LOCK_TABLE_STATS('TEST','T1');
    END;
    /
    注:如果执行了锁定操作,那么这个表或对象的统计信息将无法被更新,直到执
    行解锁命令。

    注:更新以及删除模式或数据库的统计信息同上。



    还原统计信息

    默认情况下,数据库会保留最近31天的统计信息,可以通过以下语句查询:

    SELECT * FROM DBA_OPTSTAT_OPERATIONS;

    以上结果记录着Oracle自动创建的更新数据库统计信息的作业在最近31天的执行情况,
    默认情况下可以将任意对象的统计信息还原至这段时间内。


    一个典型的还原统计信息的例子如下:
    begin
    dbms_stats.restore_table_stats(ownname => 'BOLAN',tabname => 'IEA_CWFXCPB',as_of_timestamp => to_date('2012-05-14 22:00:49','yyyy-mm-dd hh24:mi:ss'));
    end;


    导入和导出统计信息

    除了可以通过系统自动备份的统计信息来还原之前的记录,还可以手工来管理统计信息。

    首先需要调用dbms_stats.create_stat_table来创建一张用来存放统计信息的表,如下:
    begin
    dbms_stats.create_stat_table(ownname=>'SCOTT',stattab=>'STATTAB');
    end;

    导出统计信息:

    begin
      dbms_stats.export_table_stats(ownname => 'SCOTT',tabname => 'TEST',stattab => 'STATTAB');
    end;

    以上语句将表TEST的统计信息导出到刚刚创建的表STATTAB中。

    如果要将多张表的统计信息导入到一张表中进行存储,那么就必须要有一个标识用以区分每段统计信息,那么上面的语句就要考虑加一个参数STATID,如下:


    begin
      dbms_stats.export_table_stats(ownname => 'SCOTT',tabname => 'TEST',stattab => 'STATTAB',STATID=>'TEST_20120516');
    end;

    这样在查询或者导入统计信息的时候就有一个唯一区别一组统计信息的标记。


    导入统计信息:
    begin
      dbms_stats.import_table_stats(ownname => 'SCOTT',tabname => 'TEST',stattab => 'STATTAB',STATID=>'TEST_20120516');
    end;

    注:ORACLE里面的频度直方图只能通过ANALYZE命令来生成,DBMS_STATS只能生成高度直方图。

    此时就将上面所导出的统计信息重新导入。

    导入和导出统计信息在性能调优的时候尤为重要,有时候更新一张表的统计信息会
    导致好几个大的查询执行计划改变,反而会使得整体的执行效率降低,而此时如果没有保存相应的统计信息,那么想恢复到之前的状态要费很大的工夫。
    所以以后在性能调优涉及到要更新对象统计信息的时候,一定要先保存统计信息再更新,切记切记!

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22166274/viewspace-729949/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/22166274/viewspace-729949/

    展开全文
  • Oracle Statistic 统计

    2016-12-21 09:06:20
    一. Statistic 说明 Oracle 官网对Statistic 有详细说明,参考: Managing Optimizer Statistics http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/stats.htm#sthref1068
  • Oracle9i之前,由DBA负责收集对象统计信息。默认情况下,数据库不提供对象统计信息。到了oracle10g,在创建数据库的时候,就创建一. 概述Oracle9i之前,由DBA负责收集对象统计信息。默认情况下,数据库不提供对象...
  • Oracle 收集对象统计信息

    千次阅读 2013-01-06 10:02:56
     Oracle9i之前,由DBA负责收集对象统计信息。默认情况下,数据库不提供对象统计信息。到了oracle10g,在创建数据库的时候,就创建了一个定期收集对象统计信息的作业并进行调度。以便拥有最新的对象统计信息,因为表...
  • dbms_stats包收集统计信息: dbms_stats 包含很多存储过程,为收集、删除、导出、导入...dbms_stats包收集统计信息是oracle推荐使用的 DBMS_STATS包中用于收集统计信息常用的过程: EXPORT_COLUMN_STATS:导出
  • Oracle Statistic 统计信息 小结

    千次阅读 2014-05-19 18:17:18
    一. Statistic 说明 ...Oracle 官网对Statistic 有详细说明,参考:  Managing Optimizer Statistics  http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/stats.htm#sthref1068
  • Statistic 对Oracle 是非常重要的。 它会收集数据库中对象的详细信息,并存储在相应的数据字典里。 根据这些统计信息, optimizer 可以对每个SQL 去选择最好的执行计划。   在9i 及之前的版本,在选择执行...
  • Oracle Statistic 统计信息 小结https://blog.csdn.net/tianlesoftware/article/details/4668723版权声明: https://blog.csdn.net/tianlesoftware/article/details/4668723 一. Statistic 说明 Oracle 官网对...
  • oracle优化器统计信息相关

    千次阅读 2016-10-17 21:11:50
    优化器使用统计信息来生成每个sql语句最优的执行计划。准确的统计信息对于数据库的效率至关重要。dba和程序开发人员都应该了解一些统计信息相关知识,这可以使你更好的理解为什么会生成一个你看到的执行计划,知其然...
  • Oracle

    千次阅读 2017-10-25 19:14:21
    Oracle 数据库: 位于硬盘上实际存放数据的文件, 这些文件组织在一起, 成为一个整体, 即为 Oracle 数据库. 因此在 Oracle 看来, “数据库” 是指硬盘上文件的集合, 必须要与内存里实例合作, 才能对外提供数
  • Oracle 各种收集统计信息的方法

    万次阅读 2019-04-04 17:07:35
    查看某个表的统计信息 alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; select t.TABLE_NAME,t.NUM_ROWS,t.BLOCKS,t.LAST_ANALYZED from user_tables t where table_name in ('T1','T2'); 查看某个表上...
  • Oracle Statistic 统计信息(Dave)

    千次阅读 2013-11-27 21:57:47
    本文转载子dava的文章,以便日后复习,所以转载下,写的非常好来自博客...Oracle 官网对Statistic 有详细说明,参考:  Managing Optimizer Statistics
  • Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。 这个特性减少了由于sql语句统计失效或陈旧而导致性能很差的可能性,通过提高查询...
  • 有次数据库用IMPDP/EXPDP迁移结束后,发现有些表的查询比迁移前更慢了非常,首先检查了该schema 的统计信息,发现db_ind_statistics 表中该schema的 stattype_locked 的都是all. 分析这次迁移的整个过程: 1)...
  • 最近,遇到一客户,反馈业务响应慢,经过分析后最后锁定到平时执行不到1秒的SQL语句,今天突然执行时间变成 半分钟。处理过程如下:  取问题时段的AWR,查看数据库负载,发现数据库负载不高:  查看数据库...
  • 说明:本文为Oracle11g收集各种统计信息的简要指导手册 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化 ● 官网地址 ...
  • oracle

    千次阅读 2017-10-03 16:01:02
     ORACLE安装目录 一. ORACLE安装目录结构与卸载 1.开发工具集 10G 【sqlplus ( dos命令: sqlplus /nolog, conn /as sysdba ),  isqlplus(  http://localhost:5560/isqlplus  )  em

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,502
精华内容 5,800
关键字:

oracle统计值锁定