平台人生
作者平台人生·2016-12-22 10:39
软件开发工程师·平台人生

数据库使用中的陷阱之统计信息(二)

字数 908阅读 4059评论 0赞 0

作者韩涛
文章来自微信公众号平台人生


上回介绍了统计信息的概况和一些常规的收集方法。这回主要说下在统计信息收集中的一些特殊场景,虽然ORACLE贴心的设置了统计信息自动收集任务,它并不一定适用于所有场景,当遇到如下的特殊场景时,即使赶时间,也要耐心仔细的手动来收集统计信息。

1、程序中使用AB表切换,需要考虑AB表数据量剧烈变化或表被重建等场景,程序需根据业务特性对AB表的统计信息收集进行针对性处理。例如:AB表切换删除重建后可考虑对变化表导入历史统计信息并锁定统计信息等措施。

2、程序需要执行数据清理、数据导入、数据迁移等导致记录数变化量较大的操作,需要根据业务特性对此类表的统计信息收集进行针对性处理。例如:数据表清空时可考虑程序中在表中数据被清理前进行收集,收集完成后再锁定该表统计信息,下次收集前先解除锁定;数据表导入时可考虑对表在数据导入后立即进行收集统计信息。

3、程序中如果存在先drop表再建新表的场景,程序需要根据业务特性对新建表的统计信息收集进行针对性处理,例如:
很多循环场景下可考虑在drop动作前先导出此表统计信息,表被新建后再将之前导出的统计信息导入至新建数据表并锁定统计信息等措施。

4、程序中如果存在分区表新建分区操作的场景,程序需要根据业务特性进行针对性处理,例如:预估未删除分区中与新建分区数据类型一样、数据量相类似的分区,导出其统计信息并导入新分区并锁定统计信息。

5、程序中如果存在分区表循环使用的场景,程序需要根据业务特性进行针对性处理,例如:在删除旧分区前先导出其上面的统计信息,删除旧分区后再将统计信息导入新建分区并锁定统计信息。

6、程序内嵌定期统计信息收集作业的,为避免与自动统计信息收集作业冲突,引起错误时间误收集,需要在收集完成后锁定此类表的统计信息,这样可以避免ORACLE数据库再次进行收集,导致收集结果的数据分布不准确。

7、程序中进行统计信息收集时,若对应数据库是ORACLE 10G或ORACLE 11G,使用dbms_stats包进行收集,禁止使用analyze table 命令收集;

8、程序对数据库表的收集时间点,需考虑尽量在表中数据量近似于最大值时进行收集。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关文章

相关问题

相关资料

X社区推广