数据库使用中的quot陷阱quot

上回说的数据库中的陷阱不知道你是否已经get了,不过和今天要介绍的主角来比较,之前的陷阱只能算是小巫见大巫了。今天要介绍的主角叫做统计信息。千万别小看他,掉进这个陷阱,你的数据库分分钟就会宕掉的。在ORACLE中,统计信息的内容很多,本期先来介绍一下统计信息的概况。

统计信息主要是描述数据库中表。索引大小、规模、数据分布状况等的一类信息。例如:一张表的行数、块数、平均每行大小等等。千万不要小看统计信息,统计信息可以说是数据库中最为重要的一部分!数据库优化器正是根据这些统计信息,才能计算出不同访问路径下,各种计划的成本。也就是说,如果统计信息出现问题,那么会影响到数据库中的所有操作!

在ORACLE10g以上版本中,可以通过调用dbms_stats内部包,手动收集不同对象的统计信息;当然如果你比较赶时间,ORACLE还非常人性化的为你设置了收集统计信息的自动任务,并配置了默认的策略。ORACLE10G数据库收集统计信息时间窗口是每日22:00到次日6:00;ORACLE11G的时间窗口是每日22:00到次日2:00。当然数据库也不会傻到每天对海量的数据进行统计信息收集,对于数据表日变化量小于10%的情况下是不进行收集的。

下面列举一下常用的收集统计信息的方法,友情提示:这些操作并非必须sysdba才可以执行,普通用户对自己的表也可以执行。

Oracle常用统计信息收集命令:

收集表统计信息:

execdbms_stats.gather_table_stats(ownname=,tabname=,cascade=true,estimate_percent=XXX,method_opt=’forallcolumnssize1’);

注:estimate_percent为采样率,XXX为[10-]的数字,一般情况下建议GB以下的表均选用XXX=的采样率;Method_opt选项中forallcolumnssize1表示对所有字段不收集直方图。

锁定表统计信息:

execdbms_stats.lock_table_stats(ownname=,tabname=);

解锁表统计信息:

execdbms_stats.unlock_table_stats(ownname=,tabname=);

创建统计信息导入导出的中间表ABC.TEST:

execdbms_stats.create_stat_table(ownname=ABC,stattab=TEST);

导出表ABC.OLD统计信息:

execdbms_stats.export_table_stats(ownname=ABC,tabname=OLD,stattab=TEST);

导入表统计信息至ABC.NEW:

execdbms_stats.import_table_stats(ownname=ABC,tabname=NEW,stattab=TEST);

删除表上统计信息:

execdbms_stats.delete_table_stats(ownname=,tabname=);

欲知“统计信息”的其他使用陷阱,且见下回分解!









































北京看白癜风医院地址
北京治疗白癜风哪里便宜



转载请注明:http://www.xcqg58.com/jbjj/1394.html