oracle10g 统计信息查看、收集
2.3 分析某数据表,可以在PL/SQL的command window下执行的
2.5 dbms_stats.gather_schema_stats详解
2.6 初始化参数statistics_level与oracle默认统计信息收集JOB的关系
3.1 创建新的统计信息收集PROC、JOB,每周末执行一次
4.3按表收集统计信息:改变了核心SQL的执行计划---OK
4.4统计信息收集实战的重要结论(oracle公司技术人员推荐)
1. 统计信息查看
1.1 单个表的全局统计信息、统计效果查看
SQL> select COLUMN_NAME,NUM_DISTINCT,DENSITY,SAMPLE_SIZE,AVG_COL_LEN from DBA_TAB_COL_STATISTICS where table_name='TB1';
SQL> select GLOBAL_STATS from dba_tables where table_name='TB1';
如果是NO,则马上要分析统计信息。
查看某表最后一次统计信息收集时间:
SQL> select to_char(LAST_ANALYZED,'fmYYYY-MM-DD HH24:MI:SS') from dba_tables where WNER='PLATFORM_DEV' and TABLE_NAME='T_USER';
查看某索引最后一次统计信息收集时间:查dba_indexes、user_indexes的LAST_ANALYZED.
2. 统计信息分析(收集)
2.1 分析工具选择
dbms_stats可以并行分析
dbms_stats有自动分析的功能(alter table monitor )
analyze 分析统计信息,不准确----some times
2.2 分析前做index重建
按表重建索引:
SQL> select 'alter index platform_dev.'||INDEX_NAME||' rebuild online;' from dba_indexes where wner='PLATFORM_DEV' and TABLE_NAME='T_SSO_SESSION';
按用户(schema)重建索引:
SQL> select 'alter index platform_dev.'||INDEX_NAME||' rebuild online;' from dba_indexes where wner='PLATFORM_DEV';
2.3 分析某数据表,可以在PL/SQL的command window下执行的
缺省方式----最常用的方式:
SQL> EXECUTE DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'LK',
TABNAME => 'TB1' ,
ESTIMATE_PERCENT => NULL ,
METHOD_OPT => 'FOR ALL INDEXED COLUMNS' ,
CASCADE => TRUE);
------整表全分析(全粒度),注意,必加cascade=true,否则相关索引可能不统计。
SQL> begin
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'PLATFORM_DEV',tabname => 'T_OPERATION_LOG', CASCADE => TRUE);
end;
/
2.4 分析SCHEMA,在SQLPLUS中进行的
PL/SQL:
begin
dbms_stats.gather_schema_stats(ownname =>'PLATFORM_DEV',estimate_percent => 5,cascade=>true,degree=>5);
end;
/
SQLPLUS:
----资源耗用大,只能在服务器本机sqlplus中执行。
SQL> exec dbms_stats.gather_schema_stats(ownname =>'LK',estimate_percent => 5,cascade=>true,degree=>5);
2.5 dbms_stats.gather_schema_stats详解
estimate_percent选项:允许Oracle的dbms_stats在收集统计数据时,自动估计要采样的一个segment的最佳百分比:
estimate_percent => dbms_stats.auto_sample_size ---这是它的缺省值
estimate_percent=>100 ---完全统计
cascade选项:递归统计,统计相关表对应的索引
cascade=> TRUE
degree选项:决定并行度.默认值为null
options参数
options=>"gather"——重新分析整个架构(Schema)。
options=>"gather empty" -----收集没有分析过的表的统计信息
options=>"gather stale" ----重新分析修改量超过10%的表(即增、删、改)。
options=>"gather auto" ----重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。注意,使用gather auto类似于组合使用gather stale和gather empty。
method_opt参数
适合在表和索引数据发生变化时刷新统计数据,也适合用于判断哪些列需要直方图(histograms)。
method_opt=>'for all columns size skewonly'
method_opt=>'for all columns size repeat' ----定期重新分析统计数据时,使用它,重新分析任务所消耗的资源就会少一些。它只会为现有的直方图重新分析索引,不再搜索其他直方图机会。-----触发了BUG!别用此项!
method_opt=>'for all columns size auto' -----ORACLE公司推荐设置值
2.6 初始化参数statistics_level与oracle默认统计信息收集JOB的关系
Ø Sys用户,找到默认统计信息收集JOB:
select OWNER,PROGRAM_NAME,job_action,job_name, state from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'
Ø 初始化参数statistics_level三种状态(BASIC、TYPICAL或ALL)
statistics_level=basic时,oracle关闭默认统计信息收集JOB中所有性能数据的收集,也即若要关闭AWR或statspack收集,只要设置alter system set statistics_level=basic;就行了。
statistics_level=typical的时候,除了plan_executetion_statistics和OS Statistics不能收集外,其他的都可以收集,如要要收集这个两项,必须设置statistics_level=all;
3. 改良、辅助oracle默认统计信息收集JOB
3.1创建新的统计信息收集PROC、JOB,每周末执行一次
/////可选的方法---禁用默认的统计信息收集JOB,但不提倡
Sys用户,将默认统计信息收集JOB禁用:
SQL> BEGIN
DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
END; ----再次启用就用DBMS_SCHEDULER.ENABLE命令
复查是否真已被禁用:
SQL> SELECT OWNER,JOB_NAME,ENABLED FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB'; ---- 此时ENABLED应为FALSE
/////可选的方法---禁用默认的统计信息收集JOB,但不提倡,结束
Ø Sys用户创建周末统计信息收集存储过程
create or replace procedure PROC_STATISTICS_GATHER_WEEKEND is
begin
---gather statistics of schema:LK
dbms_stats.gather_schema_stats(ownname =>'LK',
estimate_percent => 30,
cascade=>true,degree=>5);
----repeat above sentence for other schema.
end;
----参数method_opt=>'for all columns size repeat'是否有问题 ,不显式指定而用默认值最好。
Ø Sys用户创建周末统计信息收集JOB
begin
dbms_scheduler.create_job (
job_name => 'JOB_STATISTICS_GATHER_WEEKEND',
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.PROC_STATISTICS_GATHER_WEEKEND',
start_date => to_date('2010-08-22 04:00:00','fmYYYY-MM-DD HH24:MI:SS'),
repeat_interval => 'FREQ=DAILY;INTERVAL=7',
comments => 'author: liukan');
end;
----注:每7天一次,第一次是2010-08-22 04:00:00,
Ø Sys开启ENABLE上面的JOB
begin
dbms_scheduler.enable('JOB_STATISTICS_GATHER_WEEKEND');
end;
Ø Sys手动试运行上面的JOB
begin
dbms_scheduler.run_job(job_name => 'JOB_STATISTICS_GATHER_WEEKEND',
use_current_session => TRUE);
end;
3.2查看新建的统计信息收集JOB的状态
Sys用户:
select job_name,job_action,state,to_char(START_DATE,'fmYYYY-MM-DD HH24:MI:SS') START_DATE, to_char(NEXT_RUN_DATE,'fmYYYY-MM-DD HH24:MI:SS') NEXT_RUN_DATE from user_scheduler_jobs;
3.3批量生成收信统计信息(按table)的SQL
select 'exec DBMS_STATS.GATHER_TABLE_STATS(ownname => '||chr(39)||'PLATFORM_DEV'||chr(39)||',tabname => '||chr(39)||table_name||chr(39)||',CASCADE => TRUE,degree => 5);' from user_tables;
4. 最有力度的统计信息收集命令(失败与成功纪实)
4.1失败的统计信息收集命令
create or replace procedure PROC_STATISTICS_GATHER_WEEKEND is
begin
dbms_stats.gather_schema_stats(ownname =>'PLATFORM_DEV',
estimate_percent => 50,
method_opt=>'for all columns size repeat',
cascade=>true,degree=>5);
end;
----它的执行导致友商网主站库最最核心的(用户登录)SQL无法走最佳执行计划。
4.2尝试的命令,各命令都改变不了核心SQL的执行计划
命令1:
exec dbms_stats.gather_schema_stats(ownname =>'PLATFORM_DEV',estimate_percent => 30,cascade=>true,degree=>5);
命令2:
exec dbms_stats.GATHER_SCHEMA_STATS(ownname=>'PLATFORM_DEV',estimate_percent => 30,method_opt=>'for all indexed columns',options=>'GATHER',cascade=>TRUE);
命令3:
exec dbms_stats.gather_schema_stats(ownname => 'PLATFORM_DEV', estimate_percent => 30, method_opt => 'for all columns size skewonly', cascade=>true,degree => 5);
命令4:
exec dbms_stats.gather_schema_stats(ownname => 'PLATFORM_DEV', estimate_percent => 30, method_opt => 'for all columns size skewonly', cascade=>true,degree => 5);
这些命令都没用,在重建完所有索引后,再执行这些语句也没用,核心的(用户登录)SQL还是无法走最佳执行计划。
4.3按表收集统计信息:改变了核心SQL的执行计划---OK
exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'PLATFORM_DEV',tabname => 'T_USER', CASCADE => TRUE,degree => 5);
exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'PLATFORM_DEV',tabname => 'T_CORPORATION_USER', CASCADE => TRUE,degree => 5);
……
核心的(用户登录)SQL走了最佳执行计划!
4.4统计信息收集实战的重要结论(oracle公司技术人员推荐)
dbms_stats.gather_schema_stats可能不好用,还不如:
1. 每三个月或每半年(根据数据变更的频繁度决定)利用例行更新停机时间,整理主要表的存储结构(move tablespace可同一tbs)、重建所有索引(rebuild无online选项),在此基础上手工按schema收集统计信息,然后,密切跟踪数据库性能。+
2. 平时的统计信息收集由oracle自带的自动统计信息收集机制完成+
3. 发现慢SQL,可重点考虑重建与慢SQL相关的表的索引、重新收集相关表的统计信息(DBMS_STATS.GATHER_TABLE_STATS)+
/////////////////////
select 'exec DBMS_STATS.GATHER_TABLE_STATS(ownname => ' || chr(39) ||
'PLATFORM_DEV' || chr(39) || ',tabname => ' || chr(39) || table_name ||
chr(39) || ',estimate_percent =>30,CASCADE => TRUE,degree => 5);'
from user_tables t where t.table_name not like '%$%';
////////////////////
4. 最核心、最频繁执行、且并非程序复杂拼装的SQL,应加HINT,以强制其执行计划。
5. 重要、咽喉的、核心的SQL以存储过程或视图形式存于oracle数据库中,以方便快速SQL调优、故障解决。
oracle10g 统计信息查看、收集的更多相关文章
- Oracle自动统计信息的收集原理及实验
[日期:2014-11-21]来源:Linux社区 作者:stevendbaguo[字体:大 中 小] 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATH ...
- Oracle的自动统计信息不收集直方图的信息
Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...
- PLSQL_统计信息系列03_统计信息的收集
20150506 Created By Baoxinjian
- SQL Server 等待统计信息基线收集
背景 我们随时监控每个服务器不同时间段的wait statistics ,可以根据监控信息大概判断什么时候开始出现异常,相当于一个wait statistics基线收集,还可以具体分析占比高的等待类型 ...
- oracle的统计信息的查看与收集
查看某个表的统计信息 SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; Session altered. SQL&g ...
- ORACLE收集统计信息
1. 理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: · ...
- ORACLE 收集统计信息
1. 理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: · ...
- 11g新特性-如何禁用自动统计信息收集作业
一.11g中auto stats gather job被集成到了auto task中. SQL> select client_name,status from DBA_AUTOTASK_CLIE ...
- Oracle 11g系统自己主动收集统计信息的一些知识
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10 ...
随机推荐
- TWaver家族新成员 — Legolas工业自动化设计平台
对于TWaver可视化家族的成员,大家比较熟悉的是我们的网络拓扑图组件和MONO Design三维建模工具.作为开发工具,这两款产品面向广大的程序猿同志,在界面可视化上为大家省时省力.但是,当项目交付 ...
- Asp.net Mvc4 使用Cas单点登录
因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: <?xml version=" ...
- WWDC2015 结束.新一波更新以及bug即将来袭.
WWDC结束.新一波更新以及bug即将来袭. HTTPS 将成为标准链接. http被报错. GamePlayKit 这是搞那样. 还有ReplayKit 那些什么录像分享什么的还有活路么? Mod ...
- AutoLayout那些坑
最近在做一个聊天界面,要适配iOS所有屏幕. 以前的思路是键盘弹出的时候去改table 和输入框的frame. 现在发现和autolayout的约束有冲突. 搞了半天发现需要动态改Constraint ...
- eclipse开发web应用程序步骤(图解)
*运行环境(也就是服务器的选择) 环境搭建好之后开始编写web程序!然后右键->Run as -> Run on Server!
- 轻量型ORM框架Dapper的使用
在真实的项目开发中,可能有些人比较喜欢写SQL语句,但是对于EF这种ORM框架比较排斥,那么轻量型的Dapper就是一个不错的选择,即让你写sql语句了,有进行了关系对象映射.其实对于EF吧,我说下我 ...
- [Math] A love of late toward Mathematics - how to learn it?
Link: https://www.zhihu.com/question/19556658/answer/26950430 王小龙 ,数学,计算机视觉,图形图像处理 数学系博士怒答! 我想大家 ...
- 使用Html5+C#+微信 开发移动端游戏详细教程 :(一)序(关于作者创业失败的感想)
说起梦想,我清楚的记得2012年7月初毕业,拿到毕业证书的那天果断买好了次日南下去深圳的绿皮火车票,500多块,26个小时车程.第二天就拖上行李到了深圳. 一开始的想法仅仅是过去想见见世面,学习点新技 ...
- Solr官方文档翻译-About & Getting Started
关于(About) 官方文档介绍了所有的Apache Solr实现的重要特性和功能.它是免费的,可以到http://lucene.apache.org/solr/下载. 为了更加的深入和广泛,设计成一 ...
- 开放产品开发(OPD):开篇
OPD?这是什么玩意?google一下.忘记说了,最近google被封锁的厉害,那就百度一下吧.可惜,OPD找不出是什么.你今天你找不到是正常的,因为之前还没有OPD,而现在才开始有OPD这个东东.相 ...