Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Performance 标识在架构列表中具有过时统计信息的分区_Performance_Oracle_Oracle11g_Partitioning - Fatal编程技术网

Performance 标识在架构列表中具有过时统计信息的分区

Performance 标识在架构列表中具有过时统计信息的分区,performance,oracle,oracle11g,partitioning,Performance,Oracle,Oracle11g,Partitioning,我有5个开发模式。他们每个人都有分区表。我们还有脚本来动态创建分区表(每月/每年)。我们每次都要去DBA收集分区表的详细信息。我们真正的问题是我们有一个9个分区的分区表。每天在增量加载操作(使用PL/SQL更新/删除)之后,也会使用SQL*加载程序加载一些APPEND。当数据库的负载达到峰值时,会发生此操作。此表中确实存在一些性能问题。(SELECTquerys) 当向DBA报告时,他们会说表统计数据过时,在他们“收集统计数据”之后,神奇地查询工作更快。我对此进行了搜索,并确定了一些有关动态性能

我有5个开发模式。他们每个人都有分区表。我们还有脚本来动态创建分区表(每月/每年)。我们每次都要去DBA收集分区表的详细信息。我们真正的问题是我们有一个9个分区的分区表。每天在增量加载操作(使用
PL/SQL
更新/删除)之后,也会使用
SQL*加载程序
加载一些
APPEND
。当数据库的负载达到峰值时,会发生此操作。此表中确实存在一些性能问题。(
SELECT
querys)

当向DBA报告时,他们会说表统计数据过时,在他们“收集统计数据”之后,神奇地查询工作更快。我对此进行了搜索,并确定了一些有关
动态性能
视图的信息

现在,我有以下问题

1) 开发人员是否可以生成一个包含所有分区表、分区名称、可用记录数的列表,而无需访问DBA
2) 我们要确定每个分区的最后分析日期吗
3) 以及分区(索引)的状态(如果可用或不可用)

  • 是的,您可以通过使用
    ALL\u PART\u tables
    USER\u PART\u tables
    (如果您有访问权限),生成分区表列表和您想要查看的大量相关数据。
    ALL_TAB_PARTITIONS
    可用于获取每个分区的行数以及其他详细信息
  • 检查Oracle的其他视图以收集分区表的详细信息

  • 我建议您在数据加载后每天分析表,并可能重建索引。如果数据负载正在影响表中的许多记录,并且将影响现有索引,那么最好主动更新表和索引的统计信息

  • 您可以在系统视图上使用以获取此信息(检查)

  • 是的,您可以通过使用
    ALL\u PART\u tables
    USER\u PART\u tables
    (如果您有访问权限),生成分区表列表和您想要查看的大量相关数据。
    ALL_TAB_PARTITIONS
    可用于获取每个分区的行数以及其他详细信息
  • 检查Oracle的其他视图以收集分区表的详细信息

  • 我建议您在数据加载后每天分析表,并可能重建索引。如果数据负载正在影响表中的许多记录,并且将影响现有索引,那么最好主动更新表和索引的统计信息

  • 您可以在系统视图上使用以获取此信息(检查)


  • 我曾经查询过下面提到的所有表

    您提到的统计信息和直方图详细信息将由Oracle自动更新。但是当数据库忙于许多负载时,我看到这些操作需要手动触发。我们面临着类似的情况,所以在加载关键表之后,我们通常会强制执行分析操作。您需要对用于加载表的id具有权限

    ANALYZE TABLE table_name PARTITION (partition_name) COMPUTE STATISTICS;
    
    编辑
    分析
    不再收集所述的
    CBO
    统计数据

    因此,必须使用
    DBMS\u STATS

    DBMS_STATS.GATHER_TABLE_STATS (
       ownname          VARCHAR2, 
       tabname          VARCHAR2, 
       partname         VARCHAR2 DEFAULT NULL,
       estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                    (get_param('ESTIMATE_PERCENT')), 
       block_sample     BOOLEAN  DEFAULT FALSE,
       method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
       degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
       granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
       cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
       stattab          VARCHAR2 DEFAULT NULL, 
       statid           VARCHAR2 DEFAULT NULL,
       statown          VARCHAR2 DEFAULT NULL,
       no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (
                                         get_param('NO_INVALIDATE')),
       force            BOOLEAN DEFAULT FALSE);
    
    在分析完成之前,下面的视图表可能无法生成准确的结果(尤其是最后分析的行和num列)

    注意:尝试将表名中的
    all
    替换为
    dba
    ,如果您有访问权限,可以尝试

    您还可以尝试为您使用的开发id获取
    SELECT\u CATALOG\u ROLE
    ,这样您就可以选择
    数据字典视图
    ,这减少了对此类查询的依赖性(DBA仍然是解决少数问题的合适人选!!)

    查询以标识分区表、分区名称、行数和上次分析的日期

    select 
          all_part.owner as schema_name,
          all_part.table_name,
          NVL(all_tab.partition_name,'N/A'),
          all_tab.num_rows,
          all_tab.last_analyzed
    from
          all_part_tables all_part,
          all_tab_partitions all_tab
    where all_part.table_name = all_tab.table_name and
          all_tab.partition_name = all_tab.partition_name and
          all_part.owner=all_tab.table_owner and
          all_part.owner in ('SCHEMA1','SCHEMA2','SCHEMA3')
    order by all_part.table_name,all_tab.partition_name;
    
    下面的查询返回
    不可用的索引/表名

    SELECT INDEX_NAME,
      TABLE_NAME,
      STATUS
    FROM ALL_INDEXES
    WHERE status NOT IN ('VALID','N/A');
    
    SELECT INDEX_NAME,
      PARTITION_NAME,
      STATUS ,
      GLOBAL_STATS
    FROM ALL_IND_PARTITIONS
    WHERE status != 'USABLE';
    
    下面的查询返回
    不可用的索引/表(
    分区
    )名称

    SELECT INDEX_NAME,
      TABLE_NAME,
      STATUS
    FROM ALL_INDEXES
    WHERE status NOT IN ('VALID','N/A');
    
    SELECT INDEX_NAME,
      PARTITION_NAME,
      STATUS ,
      GLOBAL_STATS
    FROM ALL_IND_PARTITIONS
    WHERE status != 'USABLE';
    

    我曾经查询过下面提到的所有表

    您提到的统计信息和直方图详细信息将由Oracle自动更新。但是当数据库忙于许多负载时,我看到这些操作需要手动触发。我们面临着类似的情况,所以在加载关键表之后,我们通常会强制执行分析操作。您需要对用于加载表的id具有权限

    ANALYZE TABLE table_name PARTITION (partition_name) COMPUTE STATISTICS;
    
    编辑
    分析
    不再收集所述的
    CBO
    统计数据

    因此,必须使用
    DBMS\u STATS

    DBMS_STATS.GATHER_TABLE_STATS (
       ownname          VARCHAR2, 
       tabname          VARCHAR2, 
       partname         VARCHAR2 DEFAULT NULL,
       estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                    (get_param('ESTIMATE_PERCENT')), 
       block_sample     BOOLEAN  DEFAULT FALSE,
       method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
       degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
       granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
       cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
       stattab          VARCHAR2 DEFAULT NULL, 
       statid           VARCHAR2 DEFAULT NULL,
       statown          VARCHAR2 DEFAULT NULL,
       no_invalidate    BOOLEAN  DEFAULT  to_no_invalidate_type (
                                         get_param('NO_INVALIDATE')),
       force            BOOLEAN DEFAULT FALSE);
    
    在分析完成之前,下面的视图表可能无法生成准确的结果(尤其是最后分析的行和num列)

    注意:尝试将表名中的
    all
    替换为
    dba
    ,如果您有访问权限,可以尝试

    您还可以尝试为您使用的开发id获取
    SELECT\u CATALOG\u ROLE
    ,这样您就可以选择
    数据字典视图
    ,这减少了对此类查询的依赖性(DBA仍然是解决少数问题的合适人选!!)

    查询以标识分区表、分区名称、行数和上次分析的日期

    select 
          all_part.owner as schema_name,
          all_part.table_name,
          NVL(all_tab.partition_name,'N/A'),
          all_tab.num_rows,
          all_tab.last_analyzed
    from
          all_part_tables all_part,
          all_tab_partitions all_tab
    where all_part.table_name = all_tab.table_name and
          all_tab.partition_name = all_tab.partition_name and
          all_part.owner=all_tab.table_owner and
          all_part.owner in ('SCHEMA1','SCHEMA2','SCHEMA3')
    order by all_part.table_name,all_tab.partition_name;
    
    下面的查询返回
    不可用的索引/表名

    SELECT INDEX_NAME,
      TABLE_NAME,
      STATUS
    FROM ALL_INDEXES
    WHERE status NOT IN ('VALID','N/A');
    
    SELECT INDEX_NAME,
      PARTITION_NAME,
      STATUS ,
      GLOBAL_STATS
    FROM ALL_IND_PARTITIONS
    WHERE status != 'USABLE';
    
    下面的查询返回
    不可用的索引/表(
    分区
    )名称

    SELECT INDEX_NAME,
      TABLE_NAME,
      STATUS
    FROM ALL_INDEXES
    WHERE status NOT IN ('VALID','N/A');
    
    SELECT INDEX_NAME,
      PARTITION_NAME,
      STATUS ,
      GLOBAL_STATS
    FROM ALL_IND_PARTITIONS
    WHERE status != 'USABLE';
    

    通常不需要识别需要收集统计信息的对象。Oracle会自动收集过时对象的统计信息,除非任务已完成 手动禁用。这对于OLTP系统来说通常已经足够好了。使用t