Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 收集物化视图的统计信息,作为收集模式统计信息的一部分_Oracle_Statistics_Materialized Views - Fatal编程技术网

Oracle 收集物化视图的统计信息,作为收集模式统计信息的一部分

Oracle 收集物化视图的统计信息,作为收集模式统计信息的一部分,oracle,statistics,materialized-views,Oracle,Statistics,Materialized Views,我们使用以下方法刷新给定架构中所有表的统计信息: exec dbms_stats.gather_schema_stats(ownname => 'some_schema', estimate_percent => dbms_stats.auto_sample_size, cascade => true, method_opt => 'FOR ALL COLUMNS SIZE AUTO', degree => 12); 但是,这会将物化视图的行数设置为零,并且会产生

我们使用以下方法刷新给定架构中所有表的统计信息:

exec dbms_stats.gather_schema_stats(ownname => 'some_schema', estimate_percent => dbms_stats.auto_sample_size, cascade => true, method_opt => 'FOR ALL COLUMNS SIZE AUTO', degree => 12);
但是,这会将物化视图的行数设置为零,并且会产生不必要的副作用,导致针对物化视图的查询计划效率低下。我们通过在运行模式统计数据之后收集针对特定MView的表统计数据来解决这个问题

我的问题是:我是否可以更改参数以收集\u schema\u stats,从而导致MVView行计数不设置为零?

您不能告诉收集\u schema\u stats排除某些对象。您可以执行“收集过时”操作,以仅收集统计信息过时的对象上的统计信息,但完全有可能包含物化视图。解决这个问题的一些方法

1使用LOCK_TABLE_STATS过程锁定物化视图的统计信息。这将阻止GATHER_SCHEMA_STATS收集这些对象的统计信息,直到调用UNLOCK_TABLE_STATS过程(可能是定期刷新物化视图统计信息的过程的一部分)为止

2在收集架构统计信息之前,使用EXPORT_TABLE_STATS过程保存物化视图的统计信息,然后在GATHER_schema_STATS调用完成后调用RESTORE_TABLE_STATS将物化视图统计信息放回

3不要使用聚集模式统计数据。在循环中调用GATHER_TABLE_STATS,在该循环中排除所需的任何对象。差不多

BEGIN
  FOR x IN (SELECT *
              FROM dba_tables
             WHERE owner = 'SOME_SCHEMA'
               AND table_name NOT IN (<<list of MVs>>))
  LOOP
     dbms_stats.gather_table_stats( x.owner, x.table_name, ... );
  END LOOP;
END;

这个问题最好继续问下去。非常感谢。我没有听说过锁表统计。事实证明,重置mview统计数据的并不是聚集模式统计数据。这是dbms_snapshot.refresh。我们将在刷新之前锁定mview统计信息。