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 7版本中,analyze语句被用来收集统计信息,但在Oracle 8.1.5引入DBMS_STATS后,Oracle开始推荐使用这个包,因为它提供了更高级的功能和控制。 DBMS_STATS的主要功能是分析表、索引和其他数据库对象,以...
Oracle 10g AWR(Automatic Workload Repository)是一种性能分析工具,用于收集和存储数据库的性能数据,包括快照频率、基准线、段的统计、LOB 段信息、物理文件 I/O 等信息。AWR 报告可以帮助 DBA 了解数据库的...
- 最后一次分析日期(Last Analyzed Date):这表明了自上次收集统计信息以来的时间,有助于确定是否需要重新收集统计信息。 - 表大小(Size of Table in Bytes)和表大小(Size of Table in Database Blocks):这...
3. 数据库健康检查:定期执行DBA维护任务,如空间清理、统计信息收集等。 六、Java项目与Oracle10G的结合 在“动力节点_王勇”的Java项目视频中,可能涵盖了如何使用Java的JDBC(Java Database Connectivity)接口...
3. 性能优化:Oracle 10g引入了自动工作负载仓库(AWR)和统计信息收集,以自动调整数据库性能。此外,Real Application Clusters (RAC) 功能允许多台服务器共享同一个数据库实例,提高可用性和性能。 4. 安全性:...
在性能优化方面,Oracle 10G引入了自动工作负载 repository (AWR) 和统计信息收集工具,如Automatic SQL Tuning Advisor,帮助DBA分析数据库性能并提供优化建议。文档会详细介绍这些工具的使用方法和最佳实践。 ...
1. 优化器(Optimizer):Oracle 10g的优化器采用了新的成本估算方法和统计信息,提高了查询执行计划的选择准确性。 2. SQL Trace 和 TKPROF:这些工具用于诊断SQL语句的性能问题,生成分析报告,帮助改进查询效率。...
从分区、数据压缩技术、自动内存管理、统计信息收集、 SecureFiles五个方面详细介绍了Oracle ...有关收集统计信息方面功能也得到了增强。当然Oracle11g的新特性不止这些,不完整之处希望大家积极发言或来信补充,谢谢!
8. 数据库性能优化:Oracle 10g提供了自动工作负载 Repository (AWR) 和统计信息收集,帮助管理员识别性能瓶颈。另外,通过SQL Tuning Advisor,可以自动建议优化查询的策略。 9. 版本控制:Oracle 10g引入了版本...
这些工具通过收集执行计划和统计信息,帮助DBA快速定位和解决问题。 #### 2.2 统计数据收集与分析 正确收集和维护统计数据对于性能优化至关重要。Oracle 10g提供了更强大的统计包(Statspack)和新的自动工作负载...
- 数据库维护任务:如DBMS_STATS的使用,进行统计信息收集以优化查询性能。 - 索引管理:创建、监控和调整索引,以提高查询效率。 通过这份"Oracle 10g培训资料"的学习,你可以全面掌握Oracle 10g数据库的管理,...
- **系统统计信息**:如V$SYSSTAT,用于收集关于整个数据库实例级别的统计信息。 - **会话和进程信息**:如V$SESSION、V$PROCESS,记录当前活动会话及其相关信息。 - **内存结构**:如V$CACHE、V$BUFFER_POOL,提供...
- **Automatic Workload Repository (AWR)**:自动收集数据库性能统计信息,帮助管理员识别性能瓶颈。 - **Memory Management Enhancements**:包括Automatic Shared Memory Management(ASMM)和Automatic PGA ...
- **AWR报告**:提供了关于数据库活动的详细信息,包括等待事件、SQL统计信息等。 - **v$视图**:如v$session_wait、v$sql、v$shared_pool等,用于监控实例内部状态。 - **操作系统工具**:如top、vmstat等,用于...
Oracle的自动工作负载 repository(AWR)和统计信息的收集也是优化的关键。 6. **安全性**:了解Oracle的安全特性,如用户权限管理、角色、审计和网络加密,以及如何设置数据库安全策略。 7. **网格计算**:Oracle...
5. **解析和分析:** 收集到的跟踪信息会被转换成一系列的报告,包括SQL执行计划、执行时间、I/O统计等。SQLT的输出文件通常包含多个部分,例如utltext.htm、plan_table.html等,每个部分提供了不同维度的分析结果。...
- **AWR (Automatic Workload Repository)**:收集性能统计数据,帮助诊断性能问题。 ##### 4.2 性能调优技巧 - **SQL 调优**:优化查询语句,减少执行时间。 - **索引管理**:合理创建和维护索引,加快查询速度。 ...
它能够分析查询计划,提出优化建议,包括索引调整、统计信息更新等,从而提升数据库的整体响应速度。 ### 3. Oracle 10g的安全性增强 Oracle 10g在安全性方面进行了多项改进,包括细粒度的访问控制、数据加密和...