zoukankan      html  css  js  c++  java
  • Oracle 11g系统自己主动收集统计信息的一些知识

        在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息。怎样推断10%。之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验。这个STALE_PERCENT=10%,是无法改动的,假设表很大。10%是许多的数据,很有可能造成统计信息不准确。

        在11g之后,STALE_PERCENT=10%是能够改动的,分为全局(DBMS_STATS.SET_GLOBAL_PREFS )和表级别(DBMS_STATS.SET_TABLE_PREFS)。表级别的设定:

        改动为5%(范围从1-100): exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',5);
        恢复为10%: exec dbms_stats.set_table_prefs(null,'table_name','STALE_PERCENT',null);
        查询百分比:select dbms_stats.get_prefs('STALE_PERCENT',null,'table_name') from dual;


    ---11g的是 周一到周五 22:00-2:00 周六周日 6:00-4:00

    SELECT w.window_name, w.repeat_interval, w.duration, w.enabled
    FROM dba_autotask_window_clients c, dba_scheduler_windows w
    WHERE c.window_name = w.window_name
    AND c.optimizer_stats = 'ENABLED';
    WINDOW_NAME          REPEAT_INTERVAL                                              DURATION
    -------------------- ------------------------------------------------------------ ---------------
    SUNDAY_WINDOW        freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0         +000 20:00:00
    FRIDAY_WINDOW        freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0        +000 04:00:00
    WEDNESDAY_WINDOW     freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0        +000 04:00:00
    SATURDAY_WINDOW      freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0         +000 20:00:00
    THURSDAY_WINDOW      freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0        +000 04:00:00
    TUESDAY_WINDOW       freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0        +000 04:00:00
    MONDAY_WINDOW        freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0        +000 04:00:00

    --禁用自己主动收集
    exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
    --启用自己主动收集
    exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
    --查看job

    select client_name,status from dba_autotask_client;

    CLIENT_NAME                                                      STATUS
    ---------------------------------------------------------------- --------
    auto optimizer stats collection                                  ENABLED
    auto space advisor                                               ENABLED
    sql tuning advisor                                               ENABLED

    --收集当前数据库下全部用户的统计信息
    exec dbms_stats.gather_database_stats(user);
    --收集当前数据库用户下全部对象的统计信息
    exec dbms_stats.gather_schema_stats(user);
    --收集数据字典的统计信息
    exec dbms_stats.gather_dictionary_stats();

    --当系统有非常大的分区表时,假设总是所有收集则会比較慢。11g之后能够设置INCREMENTAL仅仅对数据有变动的分区做收集

    exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','TRUE');--仅仅收集数据变动的分区

    exec dbms_stats.set_table_prefs(user,'table_name','INCREMENTAL','FALSE');--都要收集

    select dbms_stats.get_prefs('INCREMENTAL',null,'table_name') from dual;--查看分区表INCREMENTAL的值

    --获取global的统计信息收集设置选项
    select dbms_stats.get_prefs('method_opt') from dual;
    select dbms_stats.get_prefs('concurrent') from dual; 
    select dbms_stats.get_prefs('GRANULARITY') from dual;

    select dbms_stats.get_prefs('INCREMENTAL') from dual;
    --设置global的统计信息收集选项

    exec DBMS_STATS.SET_PARAM('DEGREE',4);

    exec DBMS_STATS.SET_PARAM('INCREMENTAL','TRUE');


  • 相关阅读:
    CSS 3列等高
    CSS分列等高
    jQuery函数
    JQuery解析JSON数据
    2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?
    2020-09-24:jvm监控系统是通过jmx做的么?
    2020-09-23:TCP头部信息有哪些?
    2020-09-22:已知两个数的最大公约数和最小公倍数,并且这两个数不能是最大公约数和最小公倍数本身。如何判断这两个数是否存在?
    2020-09-21:已知最大公约数和最小公倍数,如何判断这两个数是否存在?
    2020-09-20:如何判断一个数是质数?
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5352194.html
Copyright © 2011-2022 走看看