用 DBMS_STATS 构造 STATS 环境
保存表或者相关数据对象统计信息的历史数据是个不错的习惯。万一新的分析(ANALYZE 或者 DBMS_STATS) 过后发现统计信息有问题,急于恢复的时候又找不到备份,是个比较糟糕的事情。
虽然我在维护的过程中很少使用 DBMS_STATS 来收集数据对象统计信息,不过用这个工具来进行统计信息的管理还是很方便的。
首先建立资料库, DBMS_STATS 的具体语法暂且就跳过去了, 毕竟手册上写的更清楚):
EXECUTE DBMS_STATS.CREATE_STAT_TABLE ('SCOTT', 'STATTAB','SYSAUX');
在 SYSAUX 表空间上创建 STATTAB 用以存储统计信息, 所有者是 SCOTT 用户。
导出统计信息. (在任何可能更改表的统计信息的 DDL 操作之前, 一定要导出统计信息)
EXEC dbms_stats.EXPORT_SCHEMA_STATS (ownname=>'scott',stattab=>'stattab',STATID=>'foo_20080107');
这里建议手动设定一下 STATID. STATID 命名规则建议用 对象名(SCHEMA名)+ 时间(注意粒度).
至于导入整个 SCHEMA 的信息,一定要慎重再慎重。
在任何可能更改表的统计信息的 DDL 操作之前, 导出(备份)统计信息
EXEC dbms_stats.export_table_stats (OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20080107');
恢复该表的统计信息(之前要导出当前的统计信息):
EXEC dbms_stats.import_table_stats (OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20080107');
为了避免误导,需要说明的是,我只收集表和索引的统计信息。尽量不用 DBMS_STATS 收集统计信息,要问为什么? 去看看 DBMS_STATS 相关的 Bug 就知道了(比如飞龙说的这个问题)。只有在 ANALYZE 力有未逮之时才会考虑用 DBMS_STATS.
这里说的 和 ADDM 无关,建议在熟知 ADDM 之前,最好别用这玩意儿。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用