`
ruilin215
  • 浏览: 1143801 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

10g收集统计信息

 
阅读更多

10g收集统计信息

---------------------------------------

从10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息

这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。

调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。


可以通过以下查询这个JOB的运行情况

SELECT * FROM Dba_Scheduler_Jobs WHERE Job_Name = 'GATHER_STATS_JOB';

其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB:

SELECT Job_Name, Last_Start_Date FROM Dba_Scheduler_Jobs;


JOB_NAME LAST_START_DATE

------------------------------ ------------------------------------

AUTO_SPACE_ADVISOR_JOB 30-OCT-08 10.00.01.463000 PM +08:00

GATHER_STATS_JOB 30-OCT-08 10.00.01.463000 PM +08:00


然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。

而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。

所以建议最好关闭这个自动统计信息收集功能:

关闭及开启自动搜集功能,有两种方法,分别如下:

方法一:

exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');

exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');

方法二:

alter system set "_optimizer_autostats_job"=false scope=spfile;

alter system set "_optimizer_autostats_job"=true scope=spfile;


---------------------------------------

查看统计

---------------------------------------

表/索引/列上的统计

DBA_TABLES

DBA_OBJECT_TABLES

DBA_TAB_STATISTICS

DBA_TAB_COL_STATISTICS

DBA_TAB_HISTOGRAMS

DBA_INDEXES

DBA_IND_STATISTICS

DBA_CLUSTERS

DBA_TAB_PARTITIONS

DBA_TAB_SUBPARTITIONS

DBA_IND_PARTITIONS

DBA_IND_SUBPARTITIONS

DBA_PART_COL_STATISTICS

DBA_PART_HISTOGRAMS

DBA_SUBPART_COL_STATISTICS

DBA_SUBPART_HISTOGRAMS



对于数据分布统计(Histogram)建议

10g之后,统计信息采集脚本(例如dbms_stats.gather_table_stats)中参数method_opt默认为'FOR ALL COLUMNS SIZE AUTO',FOR ALL COLUMNS SIZE AUTO将自动进行数据分布信息的统计。

可以将method_opt设置为'FOR ALL COLUMNS SIZE 1'避免数据分布信息的统计(在dbms_stats.gather_table_stats中进行设置或通过dbms_stats.set_param(method_opt=>'FOR ALL COLUMNS SIZE 1')来设置)

然后采用手工的方式采集数据分布信息,只有在下面情况下考虑采集数据分布信息:

1.字段数据分布不均匀,并且有索引。

2.应用sql语句没有使用绑定变量

3.字段不是唯一键,并且查询条件不为'='操作


锁住统计信息

还有一些情况,当表或schema的数据记录基本处于稳定状态时,可以通过以下命令锁住统计信息:

exec DBMS_STATS.LOCK_TABLE_STATS('owner_name','table_name');

exec DBMS_STATS.LOCK_SCHEMA_STATS('schema_name');

这样这些表或schema的统计信息将不会被收集,从而节省资源消耗和时间。通过UNLOCK_TABLE_STATS,UNLOCK_SCHEMA_STATS解除锁定。


修改10g自动统计的时间属性

--GATHER_STATS_JOB


--查看SCHEDULER_JOBS

select job_name from dba_scheduler_running_jobs;

SELECT job_name , SCHEDULE_NAME FROM DBA_SCHEDULER_JOBS;


select * from dba_scheduler_wingroup_members where window_group_name='MAINTENANCE_WINDOW_GROUP';

/* WINDOW_GROUP_NAME WINDOW_NAME

1 MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW

2 MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW

*/


select t1.window_name,t1.repeat_interval,t1.duration from dba_scheduler_windows t1,dba_scheduler_wingroup_members t2

where t1.window_name=t2.window_name and t2.window_group_name='MAINTENANCE_WINDOW_GROUP';

/*

WINDOW_NAME REPEAT_INTERVAL DURATION

1 WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00

2 WEEKEND_WINDOW freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00

*/


--下面修改配置(使用sys用户登录oracle执行)

sqlplus sys/xxx@xxxdb as sysdba

set linesize 120


--修改WEEKEND_WINDOW的配置 (改成和WEEKNIGHT_WINDOW相同,即周一~周五,每日的22:00向后8小时,至次日凌晨6点)

begin

dbms_scheduler.set_attribute('WEEKEND_WINDOW','REPEAT_INTERVAL','freq=daily;byday=SAT,SUN;byhour=22;byminute=0;bysecond=0');

dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+000 08:00:00');

end;

/


--查看修改结果:

select t1.window_name,t1.repeat_interval,t1.duration from dba_scheduler_windows t1,dba_scheduler_wingroup_members t2

where t1.window_name=t2.window_name and t2.window_group_name='MAINTENANCE_WINDOW_GROUP';

/*

WINDOW_NAME REPEAT_INTERVAL DURATION

1 WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00

2 WEEKEND_WINDOW freq=daily;byday=SAT,SUN;byhour=22;byminute=0;bysecond=0 +000 08:00:00

*/



--若要还原成以前默认设置,可执行如下

--周末两天都是全天:

begin

dbms_scheduler.set_attribute('WEEKEND_WINDOW','REPEAT_INTERVAL','freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0');

dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+002 00:00:00');

end;

/


网上也有手动收集统计信息的脚本,有时间可以揣摩一下。csdn博客系统现在仍在维护,不能访问,只能暂且放到QQ空间了,有空在移过去呀!!!

以上来自http://www.cnblogs.com/rootq/archive/2010/02/04/1663622.html

http://liurizhaooracle.blog.163.com/blog/static/12311087220091130105353326/

品悟性能优化

分享到:
评论

相关推荐

    Oracle 11g收集各种统计信息(DBMS_STAT)

    在Oracle 7版本中,analyze语句被用来收集统计信息,但在Oracle 8.1.5引入DBMS_STATS后,Oracle开始推荐使用这个包,因为它提供了更高级的功能和控制。 DBMS_STATS的主要功能是分析表、索引和其他数据库对象,以...

    oracle 10g AWR

    Oracle 10g AWR(Automatic Workload Repository)是一种性能分析工具,用于收集和存储数据库的性能数据,包括快照频率、基准线、段的统计、LOB 段信息、物理文件 I/O 等信息。AWR 报告可以帮助 DBA 了解数据库的...

    Oracle Database 10g

    - 最后一次分析日期(Last Analyzed Date):这表明了自上次收集统计信息以来的时间,有助于确定是否需要重新收集统计信息。 - 表大小(Size of Table in Bytes)和表大小(Size of Table in Database Blocks):这...

    Oracle10G培训日志

    3. 数据库健康检查:定期执行DBA维护任务,如空间清理、统计信息收集等。 六、Java项目与Oracle10G的结合 在“动力节点_王勇”的Java项目视频中,可能涵盖了如何使用Java的JDBC(Java Database Connectivity)接口...

    简洁版的Oracle10g.rar

    3. 性能优化:Oracle 10g引入了自动工作负载仓库(AWR)和统计信息收集,以自动调整数据库性能。此外,Real Application Clusters (RAC) 功能允许多台服务器共享同一个数据库实例,提高可用性和性能。 4. 安全性:...

    Oracle10G官方文档CHM合集-Database参考手册

    在性能优化方面,Oracle 10G引入了自动工作负载 repository (AWR) 和统计信息收集工具,如Automatic SQL Tuning Advisor,帮助DBA分析数据库性能并提供优化建议。文档会详细介绍这些工具的使用方法和最佳实践。 ...

    Oracle10g培训PPT

    1. 优化器(Optimizer):Oracle 10g的优化器采用了新的成本估算方法和统计信息,提高了查询执行计划的选择准确性。 2. SQL Trace 和 TKPROF:这些工具用于诊断SQL语句的性能问题,生成分析报告,帮助改进查询效率。...

    Oracle11g五大新特性

    从分区、数据压缩技术、自动内存管理、统计信息收集、 SecureFiles五个方面详细介绍了Oracle ...有关收集统计信息方面功能也得到了增强。当然Oracle11g的新特性不止这些,不完整之处希望大家积极发言或来信补充,谢谢!

    Oracle 10g 标准教程课件 PPT

    8. 数据库性能优化:Oracle 10g提供了自动工作负载 Repository (AWR) 和统计信息收集,帮助管理员识别性能瓶颈。另外,通过SQL Tuning Advisor,可以自动建议优化查询的策略。 9. 版本控制:Oracle 10g引入了版本...

    Oracle 10g性能优化.pdf

    这些工具通过收集执行计划和统计信息,帮助DBA快速定位和解决问题。 #### 2.2 统计数据收集与分析 正确收集和维护统计数据对于性能优化至关重要。Oracle 10g提供了更强大的统计包(Statspack)和新的自动工作负载...

    orcle 10g 培训资料

    - 数据库维护任务:如DBMS_STATS的使用,进行统计信息收集以优化查询性能。 - 索引管理:创建、监控和调整索引,以提高查询效率。 通过这份"Oracle 10g培训资料"的学习,你可以全面掌握Oracle 10g数据库的管理,...

    Oracle10g_Views.pdf

    - **系统统计信息**:如V$SYSSTAT,用于收集关于整个数据库实例级别的统计信息。 - **会话和进程信息**:如V$SESSION、V$PROCESS,记录当前活动会话及其相关信息。 - **内存结构**:如V$CACHE、V$BUFFER_POOL,提供...

    oracle 9i & 10g

    - **Automatic Workload Repository (AWR)**:自动收集数据库性能统计信息,帮助管理员识别性能瓶颈。 - **Memory Management Enhancements**:包括Automatic Shared Memory Management(ASMM)和Automatic PGA ...

    ORACLE10G 性能优化

    - **AWR报告**:提供了关于数据库活动的详细信息,包括等待事件、SQL统计信息等。 - **v$视图**:如v$session_wait、v$sql、v$shared_pool等,用于监控实例内部状态。 - **操作系统工具**:如top、vmstat等,用于...

    Oracle 10g精要 第三版.rar

    Oracle的自动工作负载 repository(AWR)和统计信息的收集也是优化的关键。 6. **安全性**:了解Oracle的安全特性,如用户权限管理、角色、审计和网络加密,以及如何设置数据库安全策略。 7. **网格计算**:Oracle...

    SQLT Tool for 12c, 11g and 10g

    5. **解析和分析:** 收集到的跟踪信息会被转换成一系列的报告,包括SQL执行计划、执行时间、I/O统计等。SQLT的输出文件通常包含多个部分,例如utltext.htm、plan_table.html等,每个部分提供了不同维度的分析结果。...

    oracle 10g rac

    - **AWR (Automatic Workload Repository)**:收集性能统计数据,帮助诊断性能问题。 ##### 4.2 性能调优技巧 - **SQL 调优**:优化查询语句,减少执行时间。 - **索引管理**:合理创建和维护索引,加快查询速度。 ...

    Oracle 10g基本概念

    它能够分析查询计划,提出优化建议,包括索引调整、统计信息更新等,从而提升数据库的整体响应速度。 ### 3. Oracle 10g的安全性增强 Oracle 10g在安全性方面进行了多项改进,包括细粒度的访问控制、数据加密和...

Global site tag (gtag.js) - Google Analytics