系统对象统计信息用来票数oracle数据库里的一些内部表(X$系列表)的详细信息。实际上X$系列表实际上只是Oracle自定义的内存结构,X$表里面会存储与示例相关的各种信息。
在数据库运行的阶段,X$是被频繁访问的。
一次性收集所有X$表的内部对象统计信息:
SQL> exec dbms_stats.gather_fixed_objects_stats();
一次性删除所有X$表的内部对象统计信息:
SQL> exec dbms_stats.delete_fixed_objects_stats();
当然也可以通过dbms_stats包来对单个对象收集统计信息:
SQL> exec dbms_stats.gather_table_stats('SYS','X$KCCRSR',cascade=>true,estimate_percent=>100);
相应的,也可以对单个内部表对象删除统计信息:
SQL> dbms_stats.delete_table_stats('SYS','X$KCCRSR');
不建议频繁的收集内部对象统计信息,因为在收集内部对象统计信息的时候oracle会持有相关对象的Latch(mutex)会损耗CPU资源,对于系统而言压力将非常大。
如果诊断出来是内部对象统计信息的问题,可以通过收集单个内部对象统计信息,而不要一次性收集所有内部对象统计信息。